LLVMFuzzerTestOneInput:
   27|  12.3k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   28|  12.3k|  if (size < 4)
  ------------------
  |  Branch (28:7): [True: 2, False: 12.3k]
  ------------------
   29|      2|    return 0;
   30|       |
   31|  12.3k|  FuzzedDataProvider fdp(data, size);
   32|       |
   33|       |  // Split data: most goes to model, some to test text
   34|  12.3k|  std::string model_data = fdp.ConsumeRandomLengthString(size);
   35|  12.3k|  std::string test_text = fdp.ConsumeRemainingBytesAsString();
   36|       |
   37|  12.3k|  sentencepiece::SentencePieceProcessor processor;
   38|       |
   39|       |  // Try loading fuzz data as a serialized model proto
   40|  12.3k|  auto status = processor.LoadFromSerializedProto(model_data);
   41|  12.3k|  if (!status.ok())
  ------------------
  |  Branch (41:7): [True: 5.58k, False: 6.81k]
  ------------------
   42|  5.58k|    return 0;
   43|       |
   44|       |  // Model loaded successfully - exercise all major operations
   45|       |
   46|       |  // Basic encoding
   47|  6.81k|  std::vector<std::string> pieces;
   48|  6.81k|  processor.Encode(test_text, &pieces);
   49|       |
   50|       |  // Encode to IDs
   51|  6.81k|  std::vector<int> ids;
   52|  6.81k|  processor.Encode(test_text, &ids);
   53|       |
   54|       |  // Decode from pieces
   55|  6.81k|  if (!pieces.empty()) {
  ------------------
  |  Branch (55:7): [True: 5.30k, False: 1.50k]
  ------------------
   56|  5.30k|    std::string decoded;
   57|  5.30k|    processor.Decode(pieces, &decoded);
   58|  5.30k|  }
   59|       |
   60|       |  // Decode from IDs
   61|  6.81k|  if (!ids.empty()) {
  ------------------
  |  Branch (61:7): [True: 5.30k, False: 1.50k]
  ------------------
   62|  5.30k|    std::string decoded;
   63|  5.30k|    processor.Decode(ids, &decoded);
   64|  5.30k|  }
   65|       |
   66|       |  // Normalization
   67|  6.81k|  std::string normalized;
   68|  6.81k|  processor.Normalize(test_text, &normalized);
   69|       |
   70|       |  // Vocabulary operations
   71|  6.81k|  int vocab_size = processor.GetPieceSize();
   72|  6.81k|  if (vocab_size > 0) {
  ------------------
  |  Branch (72:7): [True: 6.81k, False: 0]
  ------------------
   73|       |    // PieceToId / IdToPiece round-trip
   74|  34.9k|    for (int i = 0; i < vocab_size && i < 10; i++) {
  ------------------
  |  Branch (74:21): [True: 29.1k, False: 5.76k]
  |  Branch (74:39): [True: 28.1k, False: 1.04k]
  ------------------
   75|  28.1k|      std::string piece = processor.IdToPiece(i);
   76|  28.1k|      processor.PieceToId(piece);
   77|  28.1k|      processor.GetScore(i);
   78|  28.1k|      processor.IsUnknown(i);
   79|  28.1k|      processor.IsControl(i);
   80|  28.1k|      processor.IsUnused(i);
   81|  28.1k|      processor.IsByte(i);
   82|  28.1k|    }
   83|       |
   84|       |    // Try lookup with test_text as a piece
   85|  6.81k|    processor.PieceToId(test_text);
   86|  6.81k|  }
   87|       |
   88|       |  // Special token IDs
   89|  6.81k|  processor.unk_id();
   90|  6.81k|  processor.bos_id();
   91|  6.81k|  processor.eos_id();
   92|  6.81k|  processor.pad_id();
   93|       |
   94|       |  // NBest encoding (with small nbest_size to avoid slowness)
   95|  6.81k|  std::vector<std::vector<std::string>> nbest_pieces;
   96|  6.81k|  processor.NBestEncode(test_text, 2, &nbest_pieces);
   97|       |
   98|       |  // Sample encoding
   99|  6.81k|  std::vector<std::string> sampled;
  100|  6.81k|  processor.SampleEncode(test_text, 1, 0.5, &sampled);
  101|       |
  102|       |  // Upstream dropped EncodeAsSerializedProto/SampleEncodeAsSerializedProto.
  103|       |  // The piece-returning overloads reach the same encode paths; they are
  104|       |  // [[nodiscard]], so keep the results alive.
  105|  6.81k|  const auto encoded_pieces = processor.EncodeAsPieces(test_text);
  106|  6.81k|  const auto sampled_pieces = processor.SampleEncodeAsPieces(test_text, 1, 0.5);
  107|  6.81k|  (void)encoded_pieces.size();
  108|  6.81k|  (void)sampled_pieces.size();
  109|       |
  110|       |  // Get serialized model
  111|  6.81k|  processor.serialized_model_proto();
  112|       |
  113|  6.81k|  return 0;
  114|  12.3k|}

_ZN4absl12lts_202608176c_copyINS0_4SpanIKjEEPjEENSt3__19enable_ifIXaasr28container_algorithm_internal10IsIteratorIu14__remove_cvrefIT0_EEE5valuentsr28container_algorithm_internal23IsMultidimensionalArrayIu20__remove_reference_tIT_EEE5valueEu7__decayIS8_EE4typeERKSA_OS8_:
  616|      8|c_copy(const InputSequence& input, OutputIterator&& output) {
  617|      8|  return std::copy(container_algorithm_internal::c_begin(input),
  618|      8|                   container_algorithm_internal::c_end(input),
  619|      8|                   std::forward<OutputIterator>(output));
  620|      8|}
_ZN4absl12lts_2026081728container_algorithm_internal7c_beginIKNS0_4SpanIKjEEEEDTcl5beginclsr3stdE7declvalIRT_EEEES8_:
  111|      8|constexpr ContainerIter<C> c_begin(C& c) {
  112|      8|  return begin(c);
  113|      8|}
_ZN4absl12lts_2026081728container_algorithm_internal5c_endIKNS0_4SpanIKjEEEEDTcl5beginclsr3stdE7declvalIRT_EEEES8_:
  116|      8|constexpr ContainerIter<C> c_end(C& c) {
  117|      8|  return end(c);
  118|      8|}

_ZN4absl12lts_2026081713base_internal16SchedulingHelperC2ENS1_14SchedulingModeE:
  118|      2|  explicit SchedulingHelper(base_internal::SchedulingMode mode) : mode_(mode) {
  119|      2|    if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) {
  ------------------
  |  Branch (119:9): [True: 0, False: 2]
  ------------------
  120|      0|      guard_result_ = base_internal::SchedulingGuard::DisableRescheduling();
  121|      0|    }
  122|      2|  }
_ZN4absl12lts_2026081713base_internal16SchedulingHelperD2Ev:
  124|      2|  ~SchedulingHelper() {
  125|      2|    if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) {
  ------------------
  |  Branch (125:9): [True: 0, False: 2]
  ------------------
  126|      0|      base_internal::SchedulingGuard::EnableRescheduling(guard_result_);
  127|      0|    }
  128|      2|  }
_ZN4absl12lts_2026081713base_internal11ControlWordEPNS0_9once_flagE:
  195|  5.60k|    once_flag* absl_nonnull flag) {
  196|  5.60k|  return &flag->control_;
  197|  5.60k|}
_ZN4absl12lts_202608179call_onceIRFvvEJEEEvRNS0_9once_flagEOT_DpOT0_:
  215|      1|    call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) {
  216|      1|  std::atomic<uint32_t>* once = base_internal::ControlWord(&flag);
  217|      1|  uint32_t s = once->load(std::memory_order_acquire);
  218|      1|  if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) {
  ------------------
  |  |  190|      1|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 1]
  |  |  |  Branch (190:58): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  219|      1|    base_internal::CallOnceImpl(
  220|      1|        once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL,
  221|      1|        std::forward<Callable>(fn), std::forward<Args>(args)...);
  222|      1|  }
  223|      1|}
_ZN4absl12lts_2026081713base_internal12CallOnceImplIRFvvEJEEEvPNSt3__16atomicIjEENS1_14SchedulingModeEOT_DpOT0_:
  155|      1|                 Args&&... args) {
  156|       |#ifndef NDEBUG
  157|       |  {
  158|       |    uint32_t old_control = control->load(std::memory_order_relaxed);
  159|       |    if (old_control != kOnceInit &&
  160|       |        old_control != kOnceRunning &&
  161|       |        old_control != kOnceWaiter &&
  162|       |        old_control != kOnceDone) {
  163|       |      // Memory corruption may cause this error.
  164|       |      ABSL_RAW_LOG(FATAL, "Unexpected value for control word: 0x%lx",
  165|       |                   static_cast<unsigned long>(old_control));  // NOLINT
  166|       |    }
  167|       |  }
  168|       |#endif  // NDEBUG
  169|      1|  static const base_internal::SpinLockWaitTransition trans[] = {
  170|      1|      {kOnceInit, kOnceRunning, true},
  171|      1|      {kOnceRunning, kOnceWaiter, false},
  172|      1|      {kOnceDone, kOnceDone, true}};
  173|       |
  174|       |  // Must do this before potentially modifying control word's state.
  175|      1|  base_internal::SchedulingHelper maybe_disable_scheduling(scheduling_mode);
  176|       |  // Short circuit the simplest case to avoid procedure call overhead.
  177|       |  // The base_internal::SpinLockWait() call returns either kOnceInit or
  178|       |  // kOnceDone. If it returns kOnceDone, it must have loaded the control word
  179|       |  // with std::memory_order_acquire and seen a value of kOnceDone.
  180|      1|  uint32_t old_control = kOnceInit;
  181|      1|  if (control->compare_exchange_strong(old_control, kOnceRunning,
  ------------------
  |  Branch (181:7): [True: 1, False: 0]
  ------------------
  182|      1|                                       std::memory_order_relaxed) ||
  183|      0|      base_internal::SpinLockWait(control, std::size(trans), trans,
  ------------------
  |  Branch (183:7): [True: 0, False: 0]
  ------------------
  184|      1|                                  scheduling_mode) == kOnceInit) {
  185|      1|    std::invoke(std::forward<Callable>(fn), std::forward<Args>(args)...);
  186|      1|    old_control =
  187|      1|        control->exchange(base_internal::kOnceDone, std::memory_order_release);
  188|      1|    if (old_control == base_internal::kOnceWaiter) {
  ------------------
  |  Branch (188:9): [True: 0, False: 1]
  ------------------
  189|      0|      base_internal::SpinLockWake(control, true);
  190|      0|    }
  191|      1|  }  // else *control is already kOnceDone
  192|      1|}
log_sink_set.cc:_ZN4absl12lts_202608179call_onceIZNS0_12log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryEEUlvE_JEEEvRNS0_9once_flagEOT_DpOT0_:
  215|  5.60k|    call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) {
  216|  5.60k|  std::atomic<uint32_t>* once = base_internal::ControlWord(&flag);
  217|  5.60k|  uint32_t s = once->load(std::memory_order_acquire);
  218|  5.60k|  if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) {
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 1, False: 5.60k]
  |  |  ------------------
  ------------------
  219|      1|    base_internal::CallOnceImpl(
  220|      1|        once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL,
  221|      1|        std::forward<Callable>(fn), std::forward<Args>(args)...);
  222|      1|  }
  223|  5.60k|}
log_sink_set.cc:_ZN4absl12lts_2026081713base_internal12CallOnceImplIZNS0_12log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryEEUlvE_JEEEvPNSt3__16atomicIjEENS1_14SchedulingModeEOT_DpOT0_:
  155|      1|                 Args&&... args) {
  156|       |#ifndef NDEBUG
  157|       |  {
  158|       |    uint32_t old_control = control->load(std::memory_order_relaxed);
  159|       |    if (old_control != kOnceInit &&
  160|       |        old_control != kOnceRunning &&
  161|       |        old_control != kOnceWaiter &&
  162|       |        old_control != kOnceDone) {
  163|       |      // Memory corruption may cause this error.
  164|       |      ABSL_RAW_LOG(FATAL, "Unexpected value for control word: 0x%lx",
  165|       |                   static_cast<unsigned long>(old_control));  // NOLINT
  166|       |    }
  167|       |  }
  168|       |#endif  // NDEBUG
  169|      1|  static const base_internal::SpinLockWaitTransition trans[] = {
  170|      1|      {kOnceInit, kOnceRunning, true},
  171|      1|      {kOnceRunning, kOnceWaiter, false},
  172|      1|      {kOnceDone, kOnceDone, true}};
  173|       |
  174|       |  // Must do this before potentially modifying control word's state.
  175|      1|  base_internal::SchedulingHelper maybe_disable_scheduling(scheduling_mode);
  176|       |  // Short circuit the simplest case to avoid procedure call overhead.
  177|       |  // The base_internal::SpinLockWait() call returns either kOnceInit or
  178|       |  // kOnceDone. If it returns kOnceDone, it must have loaded the control word
  179|       |  // with std::memory_order_acquire and seen a value of kOnceDone.
  180|      1|  uint32_t old_control = kOnceInit;
  181|      1|  if (control->compare_exchange_strong(old_control, kOnceRunning,
  ------------------
  |  Branch (181:7): [True: 1, False: 0]
  ------------------
  182|      1|                                       std::memory_order_relaxed) ||
  183|      0|      base_internal::SpinLockWait(control, std::size(trans), trans,
  ------------------
  |  Branch (183:7): [True: 0, False: 0]
  ------------------
  184|      1|                                  scheduling_mode) == kOnceInit) {
  185|      1|    std::invoke(std::forward<Callable>(fn), std::forward<Args>(args)...);
  186|      1|    old_control =
  187|      1|        control->exchange(base_internal::kOnceDone, std::memory_order_release);
  188|      1|    if (old_control == base_internal::kOnceWaiter) {
  ------------------
  |  Branch (188:9): [True: 0, False: 1]
  ------------------
  189|      0|      base_internal::SpinLockWake(control, true);
  190|      0|    }
  191|      1|  }  // else *control is already kOnceDone
  192|      1|}

_ZN4absl12lts_2026081713little_endian10FromHost16Et:
  103|  5.60k|inline uint16_t FromHost16(uint16_t x) { return x; }
_ZN4absl12lts_2026081713little_endian10FromHost64Em:
  109|   555k|inline uint64_t FromHost64(uint64_t x) { return x; }
_ZN4absl12lts_2026081713little_endian8ToHost64Em:
  110|  7.30M|inline uint64_t ToHost64(uint64_t x) { return x; }
_ZN4absl12lts_2026081713little_endian6ToHostEm:
  136|  6.79M|inline uint64_t ToHost(uint64_t x) { return ToHost64(x); }
_ZN4absl12lts_2026081713little_endian7Store16EPvt:
  164|  5.60k|inline void Store16(void* absl_nonnull p, uint16_t v) {
  165|  5.60k|  ABSL_INTERNAL_UNALIGNED_STORE16(p, FromHost16(v));
  ------------------
  |  |   81|  5.60k|  (absl::base_internal::UnalignedStore16(_p, _val))
  ------------------
  166|  5.60k|}
_ZN4absl12lts_2026081713little_endian6Load64EPKv:
  176|   511k|inline uint64_t Load64(const void* absl_nonnull p) {
  177|   511k|  return ToHost64(ABSL_INTERNAL_UNALIGNED_LOAD64(p));
  ------------------
  |  |   78|   511k|  (absl::base_internal::UnalignedLoad64(_p))
  ------------------
  178|   511k|}
_ZN4absl12lts_2026081713little_endian7Store64EPvm:
  180|   555k|inline void Store64(void* absl_nonnull p, uint64_t v) {
  181|   555k|  ABSL_INTERNAL_UNALIGNED_STORE64(p, FromHost64(v));
  ------------------
  |  |   85|   555k|  (absl::base_internal::UnalignedStore64(_p, _val))
  ------------------
  182|   555k|}

_ZN4absl12lts_2026081713base_internal10ErrnoSaverC2Ev:
   31|  5.60k|  ErrnoSaver() : saved_errno_(errno) {}
_ZN4absl12lts_2026081713base_internal10ErrnoSaverD2Ev:
   32|  5.60k|  ~ErrnoSaver() { errno = saved_errno_; }

_ZN4absl12lts_2026081713base_internal17HardeningAssertLTImmEEvT_T0_:
   92|   611M|constexpr void HardeningAssertLT(T1 val1, T2 val2) {
   93|   611M|  ABSL_ASSERT(val1 < val2);
  ------------------
  |  |  131|   611M|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  ------------------
  |  |  |  |   87|   611M|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  ------------------
  ------------------
   94|       |#if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG)
   95|       |  if (!ABSL_PREDICT_TRUE(val1 < val2)) {
   96|       |    ABSL_INTERNAL_HARDENING_ABORT();
   97|       |  }
   98|       |#endif
   99|   611M|}
_ZN4absl12lts_2026081713base_internal17HardeningAssertLEImmEEvT_T0_:
  102|  58.7M|constexpr void HardeningAssertLE(T1 val1, T2 val2) {
  103|  58.7M|  ABSL_ASSERT(val1 <= val2);
  ------------------
  |  |  131|  58.7M|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  ------------------
  |  |  |  |   87|  58.7M|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  ------------------
  ------------------
  104|       |#if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG)
  105|       |  if (!ABSL_PREDICT_TRUE(val1 <= val2)) {
  106|       |    ABSL_INTERNAL_HARDENING_ABORT();
  107|       |  }
  108|       |#endif
  109|  58.7M|}
_ZN4absl12lts_2026081713base_internal17HardeningAssertGEImmEEvT_T0_:
   82|  59.3M|constexpr void HardeningAssertGE(T1 val1, T2 val2) {
   83|  59.3M|  ABSL_ASSERT(val1 >= val2);
  ------------------
  |  |  131|  59.3M|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  ------------------
  |  |  |  |   87|  59.3M|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  ------------------
  ------------------
   84|       |#if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG)
   85|       |  if (!ABSL_PREDICT_TRUE(val1 >= val2)) {
   86|       |    ABSL_INTERNAL_HARDENING_ABORT();
   87|       |  }
   88|       |#endif
   89|  59.3M|}

_ZN4absl12lts_2026081713base_internal8SpinLockC2Ev:
   62|      8|  constexpr SpinLock() : lockword_(kSpinLockCooperative) { RegisterWithTsan(); }
_ZN4absl12lts_2026081713base_internal8SpinLock16RegisterWithTsanEv:
  221|      8|  constexpr void RegisterWithTsan() {
  222|      8|#if ABSL_HAVE_BUILTIN(__builtin_is_constant_evaluated)
  223|      8|    if (!__builtin_is_constant_evaluated()) {
  ------------------
  |  Branch (223:9): [True: 8, Folded]
  ------------------
  224|      8|      ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
  225|      8|    }
  226|      8|#endif
  227|      8|  }
_ZN4absl12lts_2026081713base_internal14SpinLockHolderC2ERNS1_8SpinLockE:
  257|      9|      : std::lock_guard<SpinLock>(l) {}
_ZN4absl12lts_2026081713base_internal8SpinLock4lockEv:
   98|      9|  inline void lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() {
   99|      9|    ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
  100|      9|    if (!TryLockImpl()) {
  ------------------
  |  Branch (100:9): [True: 0, False: 9]
  ------------------
  101|      0|      SlowLock();
  102|      0|    }
  103|      9|    ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
  104|      9|  }
_ZN4absl12lts_2026081713base_internal8SpinLock11TryLockImplEv:
  238|      9|  inline bool TryLockImpl() {
  239|      9|    uint32_t lock_value = lockword_.load(std::memory_order_relaxed);
  240|      9|    return (TryLockInternal(lock_value, 0) & kSpinLockHeld) == 0;
  241|      9|  }
_ZN4absl12lts_2026081713base_internal8SpinLock15TryLockInternalEjj:
  282|      9|                                          uint32_t wait_cycles) {
  283|      9|  if ((lock_value & kSpinLockHeld) != 0) {
  ------------------
  |  Branch (283:7): [True: 0, False: 9]
  ------------------
  284|      0|    return lock_value;
  285|      0|  }
  286|       |
  287|      9|  uint32_t sched_disabled_bit = 0;
  288|      9|  if ((lock_value & kSpinLockCooperative) == 0) {
  ------------------
  |  Branch (288:7): [True: 0, False: 9]
  ------------------
  289|       |    // For non-cooperative locks we must make sure we mark ourselves as
  290|       |    // non-reschedulable before we attempt to CompareAndSwap.
  291|      0|    if (SchedulingGuard::DisableRescheduling()) {
  ------------------
  |  Branch (291:9): [True: 0, False: 0]
  ------------------
  292|      0|      sched_disabled_bit = kSpinLockDisabledScheduling;
  293|      0|    }
  294|      0|  }
  295|       |
  296|      9|  if (!lockword_.compare_exchange_strong(
  ------------------
  |  Branch (296:7): [True: 0, False: 9]
  ------------------
  297|      9|          lock_value,
  298|      9|          kSpinLockHeld | lock_value | wait_cycles | sched_disabled_bit,
  299|      9|          std::memory_order_acquire, std::memory_order_relaxed)) {
  300|      0|    SchedulingGuard::EnableRescheduling(sched_disabled_bit != 0);
  301|      0|  }
  302|       |
  303|      9|  return lock_value;
  304|      9|}
_ZN4absl12lts_2026081713base_internal8SpinLock6unlockEv:
  128|      9|  inline void unlock() ABSL_UNLOCK_FUNCTION() {
  129|      9|    ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
  130|      9|    uint32_t lock_value = lockword_.load(std::memory_order_relaxed);
  131|      9|    lock_value = lockword_.exchange(lock_value & kSpinLockCooperative,
  132|      9|                                    std::memory_order_release);
  133|       |
  134|      9|    if ((lock_value & kSpinLockDisabledScheduling) != 0) {
  ------------------
  |  Branch (134:9): [True: 0, False: 9]
  ------------------
  135|      0|      SchedulingGuard::EnableRescheduling(true);
  136|      0|    }
  137|      9|    if ((lock_value & kWaitTimeMask) != 0) {
  ------------------
  |  Branch (137:9): [True: 0, False: 9]
  ------------------
  138|       |      // Collect contentionz profile info, and speed the wakeup of any waiter.
  139|       |      // The wait_cycles value indicates how long this thread spent waiting
  140|       |      // for the lock.
  141|      0|      SlowUnlock(lock_value);
  142|      0|    }
  143|      9|    ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
  144|      9|  }

_ZN4absl12lts_2026081713base_internal6GetTIDEv:
  407|      1|pid_t GetTID() { return static_cast<pid_t>(syscall(SYS_gettid)); }
_ZN4absl12lts_2026081713base_internal12GetCachedTIDEv:
  489|  5.60k|pid_t GetCachedTID() {
  490|       |#ifdef __ANDROID__
  491|       |// NDK defaults to emulated TLS for API < 29, and native ELF TLS for API >= 29.
  492|       |// Emulated TLS is slower than bionic's internal caching.
  493|       |#if __ANDROID_API__ < 29
  494|       |#define ABSL_INTERNAL_USING_EMULATED_TLS 1
  495|       |#endif
  496|       |#endif
  497|       |
  498|  5.60k|#if defined(ABSL_HAVE_THREAD_LOCAL) && \
  499|  5.60k|    !defined(ABSL_INTERNAL_USING_EMULATED_TLS)
  500|  5.60k|  static thread_local pid_t thread_id = GetTID();
  501|  5.60k|  return thread_id;
  502|       |#else
  503|       |  return GetTID();
  504|       |#endif  // defined(ABSL_HAVE_THREAD_LOCAL) &&
  505|       |        // !defined(ABSL_INTERNAL_USING_EMULATED_TLS)
  506|  5.60k|#undef ABSL_INTERNAL_USING_EMULATED_TLS
  507|  5.60k|}

_ZN4absl12lts_2026081713base_internal15UnalignedLoad32EPKv:
   45|   275M|inline uint32_t UnalignedLoad32(const void* absl_nonnull p) {
   46|   275M|  uint32_t t;
   47|   275M|  memcpy(&t, p, sizeof t);
   48|   275M|  return t;
   49|   275M|}
_ZN4absl12lts_2026081713base_internal15UnalignedLoad64EPKv:
   51|   631M|inline uint64_t UnalignedLoad64(const void* absl_nonnull p) {
   52|   631M|  uint64_t t;
   53|   631M|  memcpy(&t, p, sizeof t);
   54|   631M|  return t;
   55|   631M|}
_ZN4absl12lts_2026081713base_internal16UnalignedStore16EPvt:
   57|  5.60k|inline void UnalignedStore16(void* absl_nonnull p, uint16_t v) {
   58|  5.60k|  memcpy(p, &v, sizeof v);
   59|  5.60k|}
_ZN4absl12lts_2026081713base_internal16UnalignedStore64EPvm:
   65|   555k|inline void UnalignedStore64(void* absl_nonnull p, uint64_t v) {
   66|   555k|  memcpy(p, &v, sizeof v);
   67|   555k|}

_ZN4absl12lts_2026081715LogSeverityNameENS0_11LogSeverityE:
  101|  5.60k|constexpr const char* LogSeverityName(absl::LogSeverity s) {
  102|  5.60k|  switch (s) {
  ------------------
  |  Branch (102:11): [True: 5.60k, False: 0]
  ------------------
  103|      0|    case absl::LogSeverity::kInfo: return "INFO";
  ------------------
  |  Branch (103:5): [True: 0, False: 5.60k]
  ------------------
  104|  5.60k|    case absl::LogSeverity::kWarning: return "WARNING";
  ------------------
  |  Branch (104:5): [True: 5.60k, False: 0]
  ------------------
  105|      0|    case absl::LogSeverity::kError: return "ERROR";
  ------------------
  |  Branch (105:5): [True: 0, False: 5.60k]
  ------------------
  106|      0|    case absl::LogSeverity::kFatal: return "FATAL";
  ------------------
  |  Branch (106:5): [True: 0, False: 5.60k]
  ------------------
  107|  5.60k|  }
  108|      0|  return "UNKNOWN";
  109|  5.60k|}
_ZN4absl12lts_2026081720NormalizeLogSeverityENS0_11LogSeverityE:
  115|  5.60k|constexpr absl::LogSeverity NormalizeLogSeverity(absl::LogSeverity s) {
  116|  5.60k|  absl::LogSeverity n = s;
  117|  5.60k|  if (n < absl::LogSeverity::kInfo) n = absl::LogSeverity::kInfo;
  ------------------
  |  Branch (117:7): [True: 0, False: 5.60k]
  ------------------
  118|  5.60k|  if (n > absl::LogSeverity::kFatal) n = absl::LogSeverity::kError;
  ------------------
  |  Branch (118:7): [True: 0, False: 5.60k]
  ------------------
  119|  5.60k|  return n;
  120|  5.60k|}
_ZN4absl12lts_20260817ltENS0_11LogSeverityENS0_18LogSeverityAtLeastE:
  165|  11.2k|  constexpr bool operator op2(absl::LogSeverity lhs, absl::T rhs) { \
  166|  11.2k|    return lhs op2 static_cast<absl::LogSeverity>(rhs);             \
  167|  11.2k|  }

_ZN4absl12lts_2026081712NoDestructorINSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEEEC2EOSB_:
  129|      1|      : impl_(std::move(x)) {}
_ZN4absl12lts_2026081712NoDestructorINSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEEE13PlacementImplC2IJSB_EEEDpOT_:
  160|      1|    explicit PlacementImpl(Args&&... args) {
  161|      1|      new (&space_) T(std::forward<Args>(args)...);
  162|      1|    }
_ZN4absl12lts_2026081712NoDestructorINS0_13flat_hash_mapINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhNS0_18container_internal10StringHashENS8_8StringEqENS3_9allocatorINS3_4pairIKS7_hEEEEEEEC2EOSG_:
  129|      1|      : impl_(std::move(x)) {}
_ZN4absl12lts_2026081712NoDestructorINS0_13flat_hash_mapINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhNS0_18container_internal10StringHashENS8_8StringEqENS3_9allocatorINS3_4pairIKS7_hEEEEEEE13PlacementImplC2IJSG_EEEDpOT_:
  160|      1|    explicit PlacementImpl(Args&&... args) {
  161|      1|      new (&space_) T(std::forward<Args>(args)...);
  162|      1|    }
_ZNK4absl12lts_2026081712NoDestructorINSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEEEdeEv:
  140|  94.6M|  const T& operator*() const { return *get(); }
_ZNK4absl12lts_2026081712NoDestructorINSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEEE3getEv:
  142|  94.6M|  const T* absl_nonnull get() const { return impl_.get(); }
_ZNK4absl12lts_2026081712NoDestructorINSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEEE13PlacementImpl3getEv:
  163|  94.6M|    const T* absl_nonnull get() const {
  164|  94.6M|      return std::launder(reinterpret_cast<const T*>(&space_));
  165|  94.6M|    }
_ZNK4absl12lts_2026081712NoDestructorINS0_13flat_hash_mapINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhNS0_18container_internal10StringHashENS8_8StringEqENS3_9allocatorINS3_4pairIKS7_hEEEEEEEptEv:
  141|  58.5M|  const T* absl_nonnull operator->() const { return get(); }
_ZNK4absl12lts_2026081712NoDestructorINS0_13flat_hash_mapINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhNS0_18container_internal10StringHashENS8_8StringEqENS3_9allocatorINS3_4pairIKS7_hEEEEEEE3getEv:
  142|  58.5M|  const T* absl_nonnull get() const { return impl_.get(); }
_ZNK4absl12lts_2026081712NoDestructorINS0_13flat_hash_mapINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhNS0_18container_internal10StringHashENS8_8StringEqENS3_9allocatorINS3_4pairIKS7_hEEEEEEE13PlacementImpl3getEv:
  163|  58.5M|    const T* absl_nonnull get() const {
  164|  58.5M|      return std::launder(reinterpret_cast<const T*>(&space_));
  165|  58.5M|    }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEEC2IJETnNSt3__19enable_ifIXntsr3stdE9is_same_vIFvDpRu7__decayIT_EEFvRS5_EEEiE4typeELi0EEEDpOS9_:
  122|      1|      : impl_(std::forward<Ts>(args)...) {}
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE13PlacementImplC2IJEEEDpOT_:
  160|      1|    explicit PlacementImpl(Args&&... args) {
  161|      1|      new (&space_) T(std::forward<Args>(args)...);
  162|      1|    }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEEC2IJETnNSt3__19enable_ifIXntsr3stdE9is_same_vIFvDpRu7__decayIT_EEFvRS5_EEEiE4typeELi0EEEDpOS9_:
  122|      1|      : impl_(std::forward<Ts>(args)...) {}
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE13PlacementImplC2IJEEEDpOT_:
  160|      1|    explicit PlacementImpl(Args&&... args) {
  161|      1|      new (&space_) T(std::forward<Args>(args)...);
  162|      1|    }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE3getEv:
  139|      1|  T* absl_nonnull get() { return impl_.get(); }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE13PlacementImpl3getEv:
  166|      1|    T* absl_nonnull get() {
  167|      1|      return std::launder(reinterpret_cast<T*>(&space_));
  168|      1|    }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEEdeEv:
  137|  5.60k|  T& operator*() { return *get(); }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE3getEv:
  139|  5.60k|  T* absl_nonnull get() { return impl_.get(); }
log_sink_set.cc:_ZN4absl12lts_2026081712NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE13PlacementImpl3getEv:
  166|  5.60k|    T* absl_nonnull get() {
  167|  5.60k|      return std::launder(reinterpret_cast<T*>(&space_));
  168|  5.60k|    }

_ZN4absl12lts_2026081720PrefetchToLocalCacheEPKv:
  146|   638M|    const void* addr) {
  147|   638M|  __builtin_prefetch(addr, 0, 3);
  148|   638M|}
_ZN4absl12lts_2026081723PrefetchToLocalCacheNtaEPKv:
  151|  3.60M|    const void* addr) {
  152|  3.60M|  __builtin_prefetch(addr, 0, 0);
  153|  3.60M|}
_ZN4absl12lts_2026081728PrefetchToLocalCacheForWriteEPKv:
  156|   112M|    const void* addr) {
  157|       |  // [x86] gcc/clang don't generate PREFETCHW for __builtin_prefetch(.., 1)
  158|       |  // unless -march=broadwell or newer; this is not generally the default, so we
  159|       |  // manually emit prefetchw. PREFETCHW is recognized as a no-op on older Intel
  160|       |  // processors and has been present on AMD processors since the K6-2.
  161|   112M|#if defined(__x86_64__) && !defined(__PRFCHW__)
  162|   112M|  asm("prefetchw %0" : : "m"(*reinterpret_cast<const char*>(addr)));
  163|       |#else
  164|       |  __builtin_prefetch(addr, 1, 3);
  165|       |#endif
  166|   112M|}

log_sink_set.cc:_ZN4absl12lts_2026081711MakeCleanupIJEZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_EENS0_7CleanupINS0_16cleanup_internal3TagET0_EESG_:
  130|  5.60k|absl::Cleanup<cleanup_internal::Tag, Callback> MakeCleanup(Callback callback) {
  131|  5.60k|  static_assert(cleanup_internal::WasDeduced<cleanup_internal::Tag, Args...>(),
  132|  5.60k|                "Explicit template parameters are not supported.");
  133|       |
  134|  5.60k|  static_assert(cleanup_internal::ReturnsVoid<Callback>(),
  135|  5.60k|                "Callbacks that return values are not supported.");
  136|       |
  137|  5.60k|  return {std::move(callback)};
  138|  5.60k|}
log_sink_set.cc:_ZN4absl12lts_202608177CleanupINS0_16cleanup_internal3TagEZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_EC2ESE_:
   94|  5.60k|  Cleanup(Callback callback) : storage_(std::move(callback)) {}  // NOLINT
log_sink_set.cc:_ZN4absl12lts_202608177CleanupINS0_16cleanup_internal3TagEZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_ED2Ev:
  109|  5.60k|  ~Cleanup() {
  110|  5.60k|    if (storage_.IsCallbackEngaged()) {
  ------------------
  |  Branch (110:9): [True: 5.60k, False: 0]
  ------------------
  111|  5.60k|      storage_.InvokeCallback();
  112|  5.60k|      storage_.DestroyCallback();
  113|  5.60k|    }
  114|  5.60k|  }

log_sink_set.cc:_ZN4absl12lts_2026081716cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_EC2ESD_:
   49|  5.60k|  explicit Storage(Callback callback) {
   50|       |    // Placement-new into a character buffer is used for eager destruction when
   51|       |    // the cleanup is invoked or cancelled. To ensure this optimizes well, the
   52|       |    // behavior is implemented locally instead of using a std::optional.
   53|  5.60k|    ::new (GetCallbackBuffer()) Callback(std::move(callback));
   54|  5.60k|    is_callback_engaged_ = true;
   55|  5.60k|  }
log_sink_set.cc:_ZN4absl12lts_2026081716cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E17GetCallbackBufferEv:
   72|  16.8k|  void* GetCallbackBuffer() { return static_cast<void*>(callback_buffer_); }
log_sink_set.cc:_ZNK4absl12lts_2026081716cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E17IsCallbackEngagedEv:
   78|  5.60k|  bool IsCallbackEngaged() const { return is_callback_engaged_; }
log_sink_set.cc:_ZN4absl12lts_2026081716cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E14InvokeCallbackEv:
   85|  5.60k|  void InvokeCallback() ABSL_NO_THREAD_SAFETY_ANALYSIS {
   86|  5.60k|    std::move(GetCallback())();
   87|  5.60k|  }
log_sink_set.cc:_ZN4absl12lts_2026081716cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E11GetCallbackEv:
   74|  11.2k|  Callback& GetCallback() {
   75|  11.2k|    return *reinterpret_cast<Callback*>(GetCallbackBuffer());
   76|  11.2k|  }
log_sink_set.cc:_ZN4absl12lts_2026081716cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E15DestroyCallbackEv:
   80|  5.60k|  void DestroyCallback() {
   81|  5.60k|    is_callback_engaged_ = false;
   82|  5.60k|    GetCallback().~Callback();
   83|  5.60k|  }

_ZNK4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE4dataEv:
  210|  5.30k|  const_pointer data() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  211|  5.30k|    return AsValueType(storage_.begin());
  212|  5.30k|  }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE11AsValueTypeEPS6_:
  428|  6.45k|  static pointer AsValueType(pointer ptr) { return ptr; }
_ZNK4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7Storage5beginEv:
  487|  36.0M|    StorageElement* begin() const { return data_; }
_ZNK4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE4sizeEv:
  185|  5.30k|  size_type size() const { return storage_.size(); }
_ZNK4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7Storage4sizeEv:
  486|  36.0M|    size_type size() const { return size_alloc_.template get<0>(); }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEEC2IPKNS2_12basic_stringIcS5_NS7_IcEEEETnPNS2_9enable_ifIXsr13base_internal22IsAtLeastInputIteratorIT_EE5valueEvE4typeELPv0EEESH_SH_RKS8_:
  167|  5.30k|      : storage_(std::distance(first, last), a) {
  168|  5.30k|    memory_internal::CopyRange(storage_.alloc(), storage_.begin(), first, last);
  169|  5.30k|  }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7StorageC2EmRKS8_:
  476|  5.30k|        : size_alloc_(n, a), data_(InitializeData()) {}
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7Storage14InitializeDataEv:
  502|  5.30k|    StorageElement* InitializeData() {
  503|  5.30k|      if (UsingInlinedStorage(size())) {
  ------------------
  |  Branch (503:11): [True: 4.15k, False: 1.15k]
  ------------------
  504|  4.15k|        InlinedStorage::AnnotateConstruct(size());
  505|  4.15k|        return InlinedStorage::data();
  506|  4.15k|      } else {
  507|  1.15k|        return reinterpret_cast<StorageElement*>(
  508|  1.15k|            AllocatorTraits::allocate(alloc(), size()));
  509|  1.15k|      }
  510|  5.30k|    }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7Storage19UsingInlinedStorageEm:
  495|  10.6k|    static bool UsingInlinedStorage(size_type n) {
  496|  10.6k|      return n <= inline_elements;
  497|  10.6k|    }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE22NonEmptyInlinedStorage17AnnotateConstructEm:
  522|  4.15k|    typename FixedArray<T, N, A>::size_type n) {
  523|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  524|       |  if (!n) return;
  525|       |  ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(data(), RedzoneEnd(), RedzoneEnd(),
  526|       |                                     data() + n);
  527|       |  ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(RedzoneBegin(), data(), data(),
  528|       |                                     RedzoneBegin());
  529|       |#endif  // ABSL_HAVE_ADDRESS_SANITIZER
  530|  4.15k|  static_cast<void>(n);  // Mark used when not in asan mode
  531|  4.15k|}
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE22NonEmptyInlinedStorage4dataEv:
  438|  4.15k|    StorageElement* data() { return reinterpret_cast<StorageElement*>(buff_); }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7Storage5allocEv:
  489|  36.0M|    allocator_type& alloc() { return size_alloc_.template get<1>(); }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7StorageD2Ev:
  478|  5.30k|    ~Storage() noexcept {
  479|  5.30k|      if (UsingInlinedStorage(size())) {
  ------------------
  |  Branch (479:11): [True: 4.15k, False: 1.15k]
  ------------------
  480|  4.15k|        InlinedStorage::AnnotateDestruct(size());
  481|  4.15k|      } else {
  482|  1.15k|        AllocatorTraits::deallocate(alloc(), AsValueType(begin()), size());
  483|  1.15k|      }
  484|  5.30k|    }
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE22NonEmptyInlinedStorage16AnnotateDestructEm:
  535|  4.15k|    typename FixedArray<T, N, A>::size_type n) {
  536|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  537|       |  if (!n) return;
  538|       |  ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(data(), RedzoneEnd(), data() + n,
  539|       |                                     RedzoneEnd());
  540|       |  ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(RedzoneBegin(), data(), RedzoneBegin(),
  541|       |                                     data());
  542|       |#endif  // ABSL_HAVE_ADDRESS_SANITIZER
  543|  4.15k|  static_cast<void>(n);  // Mark used when not in asan mode
  544|  4.15k|}
_ZN4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEED2Ev:
  171|  5.30k|  ~FixedArray() noexcept {
  172|  36.0M|    for (auto* cur = storage_.begin(); cur != storage_.end(); ++cur) {
  ------------------
  |  Branch (172:40): [True: 36.0M, False: 5.30k]
  ------------------
  173|  36.0M|      AllocatorTraits::destroy(storage_.alloc(), cur);
  174|  36.0M|    }
  175|  5.30k|  }
_ZNK4absl12lts_2026081710FixedArrayINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEELm128ENS2_9allocatorIS6_EEE7Storage3endEv:
  488|  36.0M|    StorageElement* end() const { return begin() + size(); }

_ZN4absl12lts_2026081713flat_hash_mapINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEhNS0_18container_internal10StringHashENS7_8StringEqENS2_9allocatorINS2_4pairIKS6_hEEEEEC2Ev:
  205|      1|  flat_hash_map() {}
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE5valueEPNS3_4pairIKS7_hEE:
  705|    256|  static V& value(std::pair<const K, V>* kv) { return kv->second; }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE7elementEPNS1_13map_slot_typeIS7_hEE:
  703|  58.5M|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE5applyINS1_12EqualElementINS3_12basic_stringIcS6_NS3_9allocatorIcEEEENS1_8StringEqEEEJRNS3_4pairIKS7_hEEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSL_DpOSM_:
  689|     31|  apply(F&& f, Args&&... args) {
  690|     31|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|     31|                                                   std::forward<Args>(args)...);
  692|     31|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE5applyINS1_11HashElementINS1_10StringHashELb1EEEJRNS3_4pairIKS7_hEEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSH_DpOSI_:
  689|    442|  apply(F&& f, Args&&... args) {
  690|    442|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|    442|                                                   std::forward<Args>(args)...);
  692|    442|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE8transferINS3_9allocatorINS3_4pairIKS7_hEEEEEEDaPT_PNS1_13map_slot_typeIS7_hEESJ_:
  682|    434|                       slot_type* old_slot) {
  683|    434|    return slot_policy::transfer(alloc, new_slot, old_slot);
  684|    434|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE9constructINS3_9allocatorINS3_4pairIKS7_hEEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRKNS3_12basic_stringIcS6_NSA_IcEEEEEEENSI_IJEEEEEEvPT_PNS1_13map_slot_typeIS7_hEEDpOT0_:
  670|    256|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  671|    256|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  672|    256|  }
_ZN4absl12lts_2026081713flat_hash_mapINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEiNS0_18container_internal10StringHashENS7_8StringEqENS2_9allocatorINS2_4pairIKS6_iEEEEEC2Ev:
  205|  15.4k|  flat_hash_map() {}
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE5applyINS1_12EqualElementIS7_NS1_8StringEqEEEJRNS3_4pairIKS7_iEEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSH_DpOSI_:
  689|   201M|  apply(F&& f, Args&&... args) {
  690|   201M|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|   201M|                                                   std::forward<Args>(args)...);
  692|   201M|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE7elementEPNS1_13map_slot_typeIS7_iEE:
  703|   362M|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE5applyINS1_12raw_hash_setIS8_JEE19EmplaceDecomposableEJRKNS3_12basic_stringIcS6_NS3_9allocatorIcEEEERiEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  689|   128k|  apply(F&& f, Args&&... args) {
  690|   128k|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|   128k|                                                   std::forward<Args>(args)...);
  692|   128k|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE5applyINS1_12EqualElementINS3_12basic_stringIcS6_NS3_9allocatorIcEEEENS1_8StringEqEEEJRNS3_4pairIKS7_iEEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSL_DpOSM_:
  689|  3.48k|  apply(F&& f, Args&&... args) {
  690|  3.48k|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|  3.48k|                                                   std::forward<Args>(args)...);
  692|  3.48k|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE9constructINS3_9allocatorINS3_4pairIKS7_iEEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRKNS3_12basic_stringIcS6_NSA_IcEEEEEEENSI_IJRiEEEEEEvPT_PNS1_13map_slot_typeIS7_iEEDpOT0_:
  670|   128k|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  671|   128k|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  672|   128k|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE5applyINS1_12EqualElementIS7_NS1_8StringEqEEEJRNS3_4pairIKS7_hEEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSH_DpOSI_:
  689|  29.2M|  apply(F&& f, Args&&... args) {
  690|  29.2M|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|  29.2M|                                                   std::forward<Args>(args)...);
  692|  29.2M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E5applyINS1_12EqualElementIS8_NS1_6HashEqIS8_vE2EqEEEJRNSt3__14pairIKS8_S9_EEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  689|  11.5M|  apply(F&& f, Args&&... args) {
  690|  11.5M|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|  11.5M|                                                   std::forward<Args>(args)...);
  692|  11.5M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E7elementEPNS1_13map_slot_typeIS8_S9_EE:
  703|   105M|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E5applyINS1_12raw_hash_setISA_JEE19EmplaceDecomposableEJNSt3__14pairIS8_S9_EEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
  689|  64.0M|  apply(F&& f, Args&&... args) {
  690|  64.0M|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|  64.0M|                                                   std::forward<Args>(args)...);
  692|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E5applyINS1_11HashElementINS1_6HashEqIS8_vE4HashELb0EEEJRNSt3__14pairIKS8_S9_EEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  689|  94.3M|  apply(F&& f, Args&&... args) {
  690|  94.3M|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|  94.3M|                                                   std::forward<Args>(args)...);
  692|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E8transferINSt3__19allocatorINSC_4pairIKS8_S9_EEEEEEDaPT_PNS1_13map_slot_typeIS8_S9_EESM_:
  682|  94.3M|                       slot_type* old_slot) {
  683|  94.3M|    return slot_policy::transfer(alloc, new_slot, old_slot);
  684|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E9constructINSt3__19allocatorINSC_4pairIKS8_S9_EEEEJRKNSC_21piecewise_construct_tENSC_5tupleIJOS8_EEENSL_IJOS9_EEEEEEvPT_PNS1_13map_slot_typeIS8_S9_EEDpOT0_:
  670|  64.0M|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  671|  64.0M|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  672|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081713flat_hash_mapIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS5_NS0_18container_internal6HashEqIS7_vE4HashENSB_2EqENSt3__19allocatorINSE_4pairIKS7_S8_EEEEEC2Ev:
  205|  2.51k|  flat_hash_map() {}
_ZN4absl12lts_2026081713flat_hash_mapINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEENS2_4pairIS6_S6_EENS0_18container_internal10StringHashENS9_8StringEqENS2_9allocatorINS7_IKS6_S8_EEEEEC2Ev:
  205|  10.1k|  flat_hash_map() {}
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE5valueEPNS8_IKS7_S9_EE:
  705|  47.7k|  static V& value(std::pair<const K, V>* kv) { return kv->second; }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE7elementEPNS1_13map_slot_typeIS7_S9_EE:
  703|   230k|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE5applyINS1_12EqualElementIS7_NS1_8StringEqEEEJRNS8_IKS7_S9_EEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
  689|   105k|  apply(F&& f, Args&&... args) {
  690|   105k|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  691|   105k|                                                   std::forward<Args>(args)...);
  692|   105k|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE8transferINS3_9allocatorINS8_IKS7_S9_EEEEEEDaPT_PNS1_13map_slot_typeIS7_S9_EESK_:
  682|  1.05k|                       slot_type* old_slot) {
  683|  1.05k|    return slot_policy::transfer(alloc, new_slot, old_slot);
  684|  1.05k|  }
_ZN4absl12lts_2026081718container_internal17FlatHashMapPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE9constructINS3_9allocatorINS8_IKS7_S9_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRSD_EEENSJ_IJEEEEEEvPT_PNS1_13map_slot_typeIS7_S9_EEDpOT0_:
  670|  2.23k|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  671|  2.23k|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  672|  2.23k|  }

_ZN4absl12lts_2026081713InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEE4dataEv:
  357|  5.60k|  pointer data() noexcept ABSL_ATTRIBUTE_LIFETIME_BOUND {
  358|  5.60k|    return storage_.GetIsAllocated() ? storage_.GetAllocatedData()
  ------------------
  |  Branch (358:12): [True: 0, False: 5.60k]
  ------------------
  359|  5.60k|                                     : storage_.GetInlinedData();
  360|  5.60k|  }
_ZNK4absl12lts_2026081713InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEE4sizeEv:
  323|  5.60k|  size_type size() const noexcept { return storage_.GetSize(); }
_ZN4absl12lts_2026081713InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEEC2Ev:
  128|  5.60k|  InlinedVector() noexcept(noexcept(allocator_type())) : storage_() {}
_ZN4absl12lts_2026081713InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEED2Ev:
  309|  5.60k|  ~InlinedVector() {}
_ZN4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEED2Ev:
  309|  12.5k|  ~InlinedVector() {}
_ZNK4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEE4dataEv:
  367|    928|  const_pointer data() const noexcept ABSL_ATTRIBUTE_LIFETIME_BOUND {
  368|    928|    return storage_.GetIsAllocated() ? storage_.GetAllocatedData()
  ------------------
  |  Branch (368:12): [True: 0, False: 928]
  ------------------
  369|    928|                                     : storage_.GetInlinedData();
  370|    928|  }
_ZNK4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEE4sizeEv:
  323|  20.2k|  size_type size() const noexcept { return storage_.GetSize(); }
_ZN4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEEC2Ev:
  128|  12.5k|  InlinedVector() noexcept(noexcept(allocator_type())) : storage_() {}
_ZN4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEE9push_backERKS3_:
  783|  19.3k|  void push_back(const_reference v) { static_cast<void>(emplace_back(v)); }
_ZN4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEE12emplace_backIJRKS3_EEERS3_DpOT_:
  773|  19.3k|  reference emplace_back(Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
  774|  19.3k|    if (ABSL_PREDICT_FALSE(size() == max_size())) {
  ------------------
  |  |  190|  19.3k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 19.3k]
  |  |  |  Branch (190:49): [Folded, False: 19.3k]
  |  |  |  Branch (190:58): [True: 0, False: 19.3k]
  |  |  ------------------
  ------------------
  775|      0|      ThrowStdLengthError("InlinedVector::emplace_back failed length check");
  776|      0|    }
  777|  19.3k|    return storage_.EmplaceBack(std::forward<Args>(args)...);
  778|  19.3k|  }
_ZNK4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEE8max_sizeEv:
  328|  20.2k|  size_type max_size() const noexcept {
  329|       |    // One bit of the size storage is used to indicate whether the inlined
  330|       |    // vector contains allocated memory. As a result, the maximum size that the
  331|       |    // inlined vector can express is the minimum of the limit of how many
  332|       |    // objects we can allocate and std::numeric_limits<size_type>::max() / 2.
  333|  20.2k|    return (std::min)(AllocatorTraits<A>::max_size(storage_.GetAllocator()),
  334|  20.2k|                      (std::numeric_limits<size_type>::max)() / 2);
  335|  20.2k|  }
_ZN4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEEaSERKS6_:
  543|    928|  InlinedVector& operator=(const InlinedVector& other) {
  544|    928|    if (ABSL_PREDICT_TRUE(this != std::addressof(other))) {
  ------------------
  |  |  191|    928|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 928, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 928]
  |  |  |  Branch (191:57): [True: 928, False: 0]
  |  |  ------------------
  ------------------
  545|    928|      const_pointer other_data = other.data();
  546|    928|      assign(other_data, other_data + other.size());
  547|    928|    }
  548|       |
  549|    928|    return *this;
  550|    928|  }
_ZN4absl12lts_2026081713InlinedVectorINSt3__115source_locationELm1ENS2_9allocatorIS3_EEE6assignIPKS3_TnNS2_9enable_ifIXsr13base_internal24IsAtLeastForwardIteratorIT_EE5valueEiE4typeELi0EEEvSB_SB_:
  587|    928|  void assign(ForwardIterator first, ForwardIterator last) {
  588|    928|    const size_type s = static_cast<size_type>(std::distance(first, last));
  589|    928|    if (ABSL_PREDICT_FALSE(s > max_size())) {
  ------------------
  |  |  190|    928|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 928]
  |  |  |  Branch (190:49): [Folded, False: 928]
  |  |  |  Branch (190:58): [True: 0, False: 928]
  |  |  ------------------
  ------------------
  590|      0|      ThrowStdLengthError("InlinedVector::assign failed length check");
  591|      0|    }
  592|    928|    storage_.Assign(IteratorValueAdapter<A, ForwardIterator>(first), s);
  593|    928|  }

_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE7elementIS9_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeIS8_hEE:
   85|  58.5M|      -> decltype(P::element(slot)) {
   86|  58.5M|    return P::element(slot);
   87|  58.5M|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE8transferINS4_9allocatorINS4_4pairIKS8_hEEEEEEvPT_PNS1_13map_slot_typeIS8_hEESL_:
   75|    434|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   76|    434|    transfer_impl(alloc, new_slot, old_slot, Rank2{});
   77|    434|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE13transfer_implINS4_9allocatorINS4_4pairIKS8_hEEEES9_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeIS8_hEESN_NSA_5Rank2E:
  119|    434|                                                           old_slot)) {
  120|    434|    return P::transfer(alloc, new_slot, old_slot);
  121|    434|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE9constructINS4_9allocatorINS4_4pairIKS8_hEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NSC_IcEEEEEEENSK_IJEEEEEEvPT_PNS1_13map_slot_typeIS8_hEEDpOT0_:
   51|    256|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   52|    256|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   53|    256|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE20transfer_uses_memcpyEv:
   93|      1|  static constexpr bool transfer_uses_memcpy() {
   94|      1|    return std::is_same_v<decltype(transfer_impl<std::allocator<char>>(
   95|      1|                              nullptr, nullptr, nullptr, Rank2{})),
   96|      1|                          std::true_type>;
   97|      1|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEvE7elementIS9_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeIS8_iEE:
   85|   362M|      -> decltype(P::element(slot)) {
   86|   362M|    return P::element(slot);
   87|   362M|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEvE9constructINS4_9allocatorINS4_4pairIKS8_iEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NSC_IcEEEEEEENSK_IJRiEEEEEEvPT_PNS1_13map_slot_typeIS8_iEEDpOT0_:
   51|   128k|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   52|   128k|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   53|   128k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE7elementISB_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeIS9_SA_EE:
   85|   105M|      -> decltype(P::element(slot)) {
   86|   105M|    return P::element(slot);
   87|   105M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE8transferINSt3__19allocatorINSE_4pairIKS9_SA_EEEEEEvPT_PNS1_13map_slot_typeIS9_SA_EESO_:
   75|  94.3M|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   76|  94.3M|    transfer_impl(alloc, new_slot, old_slot, Rank2{});
   77|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE13transfer_implINSt3__19allocatorINSE_4pairIKS9_SA_EEEESB_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeIS9_SA_EESQ_NSC_5Rank2E:
  119|  94.3M|                                                           old_slot)) {
  120|  94.3M|    return P::transfer(alloc, new_slot, old_slot);
  121|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE9constructINSt3__19allocatorINSE_4pairIKS9_SA_EEEEJRKNSE_21piecewise_construct_tENSE_5tupleIJOS9_EEENSN_IJOSA_EEEEEEvPT_PNS1_13map_slot_typeIS9_SA_EEDpOT0_:
   51|  64.0M|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   52|  64.0M|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   53|  64.0M|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEvE7elementISB_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeIS8_SA_EE:
   85|   230k|      -> decltype(P::element(slot)) {
   86|   230k|    return P::element(slot);
   87|   230k|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEvE8transferINS4_9allocatorINS9_IKS8_SA_EEEEEEvPT_PNS1_13map_slot_typeIS8_SA_EESM_:
   75|  1.05k|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   76|  1.05k|    transfer_impl(alloc, new_slot, old_slot, Rank2{});
   77|  1.05k|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEvE13transfer_implINS4_9allocatorINS9_IKS8_SA_EEEESB_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeIS8_SA_EESO_NSC_5Rank2E:
  119|  1.05k|                                                           old_slot)) {
  120|  1.05k|    return P::transfer(alloc, new_slot, old_slot);
  121|  1.05k|  }
_ZN4absl12lts_2026081718container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEvE9constructINS4_9allocatorINS9_IKS8_SA_EEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJRSF_EEENSL_IJEEEEEEvPT_PNS1_13map_slot_typeIS8_SA_EEDpOT0_:
   51|  2.23k|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   52|  2.23k|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   53|  2.23k|  }

_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm1ENS2_10StorageTagIJNSt3__19allocatorINS5_15source_locationEEEmEEELb0EE3getEv:
   91|  33.7k|  constexpr T& get() & { return value; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEmEE3getILi1EEERNS1_25internal_compressed_tuple4ElemIS7_XT_EE4typeEv:
  240|  33.7k|  constexpr ElemT<I>& get() & {
  241|  33.7k|    return StorageT<I>::get();
  242|  33.7k|  }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm1ENS2_10StorageTagIJNSt3__19allocatorINS5_15source_locationEEEmEEELb0EE3getEv:
   90|  78.0k|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEmEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemIS7_XT_EE4typeEv:
  245|  78.0k|  constexpr const ElemT<I>& get() const& {
  246|  78.0k|    return StorageT<I>::get();
  247|  78.0k|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_15source_locationEEELm0ENS2_10StorageTagIJS7_mEEELb1EE3getEv:
  104|  25.8k|  constexpr T& get() & { return *this; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEmEE3getILi0EEERNS1_25internal_compressed_tuple4ElemIS7_XT_EE4typeEv:
  240|  25.8k|  constexpr ElemT<I>& get() & {
  241|  25.8k|    return StorageT<I>::get();
  242|  25.8k|  }
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJmNSt3__19allocatorINS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  245|  36.0M|  constexpr const ElemT<I>& get() const& {
  246|  36.0M|    return StorageT<I>::get();
  247|  36.0M|  }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm0ENS2_10StorageTagIJmNSt3__19allocatorINS5_17basic_string_viewIcNS5_11char_traitsIcEEEEEEEEELb0EE3getEv:
   90|  36.0M|  constexpr const T& get() const& { return value; }
_ZN4absl12lts_2026081718container_internal15CompressedTupleIJmNSt3__19allocatorINS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEEC2IRmJRKS9_ETnNS3_9enable_ifIXsr3stdE13conjunction_vINS3_8negationINS3_7is_sameIFvSA_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISA_JSJ_DpT0_EEEEEbE4typeELb1EEEOSJ_DpOSQ_:
  235|  5.30k|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|  5.30k|                                             std::forward<First>(first),
  237|  5.30k|                                             std::forward<Vs>(base)...) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJmNSt3__19allocatorINS5_17basic_string_viewIcNS5_11char_traitsIcEEEEEEEEENS5_16integer_sequenceImJLm0ELm1EEEELb1EEC2IJRmRKSB_EEENS5_10in_place_tEDpOT_:
  125|  10.6k|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|  10.6k|                                          std::forward<Vs>(args))... {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm0ENS2_10StorageTagIJmNSt3__19allocatorINS5_17basic_string_viewIcNS5_11char_traitsIcEEEEEEEEELb0EEC2IRmEENS5_10in_place_tEOT_:
   89|  5.30k|      : value(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEELm1ENS2_10StorageTagIJmSA_EEELb1EEC2IRKSA_EENS4_10in_place_tEOT_:
  101|  5.30k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJmNSt3__19allocatorINS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISA_XT_EE4typeEv:
  240|  36.0M|  constexpr ElemT<I>& get() & {
  241|  36.0M|    return StorageT<I>::get();
  242|  36.0M|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEELm1ENS2_10StorageTagIJmSA_EEELb1EE3getEv:
  104|  36.0M|  constexpr T& get() & { return *this; }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ENS2_10StorageTagIJS4_NS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEELb0EE3getEv:
   90|  2.93G|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  245|  2.93G|  constexpr const ElemT<I>& get() const& {
  246|  2.93G|    return StorageT<I>::get();
  247|  2.93G|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ENS2_10StorageTagIJS4_NS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEELb0EE3getEv:
   91|  1.73G|  constexpr T& get() & { return value; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  240|  1.73G|  constexpr ElemT<I>& get() & {
  241|  1.73G|    return StorageT<I>::get();
  242|  1.73G|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIcEELm3ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqES6_EEELb1EE3getEv:
  104|   163k|  constexpr T& get() & { return *this; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  240|   163k|  constexpr ElemT<I>& get() & {
  241|   163k|    return StorageT<I>::get();
  242|   163k|  }
_ZN4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEC2IS3_JS4_S5_S8_ETnNS6_9enable_ifIXsr3stdE13conjunction_vINS6_8negationINS6_7is_sameIFvS9_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleIS9_JSF_DpT0_EEEEEbE4typeELb1EEEOSF_DpOSM_:
  235|  25.6k|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|  25.6k|                                             std::forward<First>(first),
  237|  25.6k|                                             std::forward<Vs>(base)...) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SA_EEENS8_10in_place_tEDpOT_:
  125|   102k|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|   102k|                                          std::forward<Vs>(args))... {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ENS2_10StorageTagIJS4_NS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEELb0EEC2IS4_EENS8_10in_place_tEOT_:
   89|  25.6k|      : value(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ENS2_10StorageTagIJNS1_12CommonFieldsES4_NS1_8StringEqENSt3__19allocatorIcEEEEELb1EEC2IS4_EENS8_10in_place_tEOT_:
  101|  25.6k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashES4_NSt3__19allocatorIcEEEEELb1EEC2IS4_EENS8_10in_place_tEOT_:
  101|  25.6k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIcEELm3ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqES6_EEELb1EEC2IS6_EENS4_10in_place_tEOT_:
  101|  25.6k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi2EEERKNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  245|   230M|  constexpr const ElemT<I>& get() const& {
  246|   230M|    return StorageT<I>::get();
  247|   230M|  }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashES4_NSt3__19allocatorIcEEEEELb1EE3getEv:
  103|   230M|  constexpr const T& get() const& { return *this; }
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  245|   394M|  constexpr const ElemT<I>& get() const& {
  246|   394M|    return StorageT<I>::get();
  247|   394M|  }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ENS2_10StorageTagIJNS1_12CommonFieldsES4_NS1_8StringEqENSt3__19allocatorIcEEEEELb1EE3getEv:
  103|   394M|  constexpr const T& get() const& { return *this; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  240|  7.17k|  constexpr ElemT<I>& get() & {
  241|  7.17k|    return StorageT<I>::get();
  242|  7.17k|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ENS2_10StorageTagIJNS1_12CommonFieldsES4_NS1_8StringEqENSt3__19allocatorIcEEEEELb1EE3getEv:
  104|  7.17k|  constexpr T& get() & { return *this; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemIS9_XT_EE4typeEv:
  240|      1|  constexpr ElemT<I>& get() & {
  241|      1|    return StorageT<I>::get();
  242|      1|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashES4_NSt3__19allocatorIcEEEEELb1EE3getEv:
  104|      1|  constexpr T& get() & { return *this; }
_ZN4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEC2IS3_JRS4_RS5_RS8_ETnNS6_9enable_ifIXsr3stdE13conjunction_vINS6_8negationINS6_7is_sameIFvS9_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleIS9_JSI_DpT0_EEEEEbE4typeELb1EEEOSI_DpOSP_:
  235|      1|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|      1|                                             std::forward<First>(first),
  237|      1|                                             std::forward<Vs>(base)...) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorIcEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_RS6_RS7_RSA_EEENS8_10in_place_tEDpOT_:
  125|      4|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|      4|                                          std::forward<Vs>(args))... {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ENS2_10StorageTagIJNS1_12CommonFieldsES4_NS1_8StringEqENSt3__19allocatorIcEEEEELb1EEC2IRS4_EENS8_10in_place_tEOT_:
  101|      1|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashES4_NSt3__19allocatorIcEEEEELb1EEC2IRS4_EENS8_10in_place_tEOT_:
  101|      1|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIcEELm3ENS2_10StorageTagIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqES6_EEELb1EEC2IRS6_EENS4_10in_place_tEOT_:
  101|      1|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
unigram_model.cc:_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  245|   927M|  constexpr const ElemT<I>& get() const& {
  246|   927M|    return StorageT<I>::get();
  247|   927M|  }
unigram_model.cc:_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ENS2_10StorageTagIJS4_NS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSD_2EqENSt3__19allocatorIcEEEEELb0EE3getEv:
   90|   927M|  constexpr const T& get() const& { return value; }
unigram_model.cc:_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEE3getILi2EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  245|  11.5M|  constexpr const ElemT<I>& get() const& {
  246|  11.5M|    return StorageT<I>::get();
  247|  11.5M|  }
unigram_model.cc:_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE2EqELm2ENS2_10StorageTagIJNS1_12CommonFieldsENSB_4HashESC_NSt3__19allocatorIcEEEEELb1EE3getEv:
  103|  11.5M|  constexpr const T& get() const& { return *this; }
unigram_model.cc:_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  240|   606M|  constexpr ElemT<I>& get() & {
  241|   606M|    return StorageT<I>::get();
  242|   606M|  }
unigram_model.cc:_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ENS2_10StorageTagIJS4_NS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSD_2EqENSt3__19allocatorIcEEEEELb0EE3getEv:
   91|   606M|  constexpr T& get() & { return value; }
unigram_model.cc:_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  245|   222M|  constexpr const ElemT<I>& get() const& {
  246|   222M|    return StorageT<I>::get();
  247|   222M|  }
unigram_model.cc:_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELm1ENS2_10StorageTagIJNS1_12CommonFieldsESC_NSB_2EqENSt3__19allocatorIcEEEEELb1EE3getEv:
  103|   222M|  constexpr const T& get() const& { return *this; }
unigram_model.cc:_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  240|   158M|  constexpr ElemT<I>& get() & {
  241|   158M|    return StorageT<I>::get();
  242|   158M|  }
unigram_model.cc:_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIcEELm3ENS2_10StorageTagIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSG_2EqES6_EEELb1EE3getEv:
  104|   158M|  constexpr T& get() & { return *this; }
unigram_model.cc:_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  240|  5.03k|  constexpr ElemT<I>& get() & {
  241|  5.03k|    return StorageT<I>::get();
  242|  5.03k|  }
unigram_model.cc:_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELm1ENS2_10StorageTagIJNS1_12CommonFieldsESC_NSB_2EqENSt3__19allocatorIcEEEEELb1EE3getEv:
  104|  5.03k|  constexpr T& get() & { return *this; }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSB_2EqENSt3__19allocatorIcEEEEC2IS3_JSC_SD_SG_ETnNSE_9enable_ifIXsr3stdE13conjunction_vINSE_8negationINSE_7is_sameIFvSH_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSN_DpT0_EEEEEbE4typeELb1EEEOSN_DpOSU_:
  235|  2.51k|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|  2.51k|                                             std::forward<First>(first),
  237|  2.51k|                                             std::forward<Vs>(base)...) {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSD_2EqENSt3__19allocatorIcEEEEENSG_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SE_SF_SI_EEENSG_10in_place_tEDpOT_:
  125|  10.0k|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|  10.0k|                                          std::forward<Vs>(args))... {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ENS2_10StorageTagIJS4_NS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSD_2EqENSt3__19allocatorIcEEEEELb0EEC2IS4_EENSG_10in_place_tEOT_:
   89|  2.51k|      : value(std::forward<V>(v)) {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELm1ENS2_10StorageTagIJNS1_12CommonFieldsESC_NSB_2EqENSt3__19allocatorIcEEEEELb1EEC2ISC_EENSG_10in_place_tEOT_:
  101|  2.51k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE2EqELm2ENS2_10StorageTagIJNS1_12CommonFieldsENSB_4HashESC_NSt3__19allocatorIcEEEEELb1EEC2ISC_EENSG_10in_place_tEOT_:
  101|  2.51k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIcEELm3ENS2_10StorageTagIJNS1_12CommonFieldsENS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashENSG_2EqES6_EEELb1EEC2IS6_EENS4_10in_place_tEOT_:
  101|  2.51k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemIS8_XT_EE4typeEv:
  245|  11.2k|  constexpr const ElemT<I>& get() const& {
  246|  11.2k|    return StorageT<I>::get();
  247|  11.2k|  }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm1ENS2_10StorageTagIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEELb0EE3getEv:
   90|  11.2k|  constexpr const T& get() const& { return value; }
_ZN4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEC2IS7_JjETnNS3_9enable_ifIXsr3stdE13conjunction_vINS3_8negationINS3_7is_sameIFvS8_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleIS8_JSE_DpT0_EEEEEbE4typeELb1EEEOSE_DpOSL_:
  235|  5.60k|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|  5.60k|                                             std::forward<First>(first),
  237|  5.60k|                                             std::forward<Vs>(base)...) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEENS5_16integer_sequenceImJLm0ELm1EEEELb1EEC2IJS9_jEEENS5_10in_place_tEDpOT_:
  125|  11.2k|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|  11.2k|                                          std::forward<Vs>(args))... {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPNS0_7LogSinkEEELm0ENS2_10StorageTagIJS8_mEEELb1EEC2IS8_EENS4_10in_place_tEOT_:
  101|  5.60k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm1ENS2_10StorageTagIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEELb0EEC2IjEENS5_10in_place_tEOT_:
   89|  5.60k|      : value(std::forward<V>(v)) {}
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEE3getILi1EEERNS1_25internal_compressed_tuple4ElemIS8_XT_EE4typeEv:
  240|  5.60k|  constexpr ElemT<I>& get() & {
  241|  5.60k|    return StorageT<I>::get();
  242|  5.60k|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm1ENS2_10StorageTagIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEELb0EE3getEv:
   91|  5.60k|  constexpr T& get() & { return value; }
_ZN4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEmEEC2IS6_JjETnNS3_9enable_ifIXsr3stdE13conjunction_vINS3_8negationINS3_7is_sameIFvS7_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleIS7_JSD_DpT0_EEEEEbE4typeELb1EEEOSD_DpOSK_:
  235|  12.5k|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|  12.5k|                                             std::forward<First>(first),
  237|  12.5k|                                             std::forward<Vs>(base)...) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNSt3__19allocatorINS5_15source_locationEEEmEEENS5_16integer_sequenceImJLm0ELm1EEEELb1EEC2IJS8_jEEENS5_10in_place_tEDpOT_:
  125|  25.0k|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|  25.0k|                                          std::forward<Vs>(args))... {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_15source_locationEEELm0ENS2_10StorageTagIJS7_mEEELb1EEC2IS7_EENS4_10in_place_tEOT_:
  101|  12.5k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageImLm1ENS2_10StorageTagIJNSt3__19allocatorINS5_15source_locationEEEmEEELb0EEC2IjEENS5_10in_place_tEOT_:
   89|  12.5k|      : value(std::forward<V>(v)) {}
_ZNKR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEmEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemIS7_XT_EE4typeEv:
  245|  20.2k|  constexpr const ElemT<I>& get() const& {
  246|  20.2k|    return StorageT<I>::get();
  247|  20.2k|  }
_ZNKR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_15source_locationEEELm0ENS2_10StorageTagIJS7_mEEELb1EE3getEv:
  103|  20.2k|  constexpr const T& get() const& { return *this; }
_ZN4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEPS5_EEC2IRS6_JDnETnNS3_9enable_ifIXsr3stdE13conjunction_vINS3_8negationINS3_7is_sameIFvS8_EFvu7__decayIT_EEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleIS8_JSF_DpT0_EEEEEbE4typeELb1EEEOSF_DpOSM_:
  235|  1.85k|      : CompressedTuple::CompressedTupleImpl(std::in_place,
  236|  1.85k|                                             std::forward<First>(first),
  237|  1.85k|                                             std::forward<Vs>(base)...) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNSt3__19allocatorINS5_15source_locationEEEPS7_EEENS5_16integer_sequenceImJLm0ELm1EEEELb1EEC2IJRS8_DnEEENS5_10in_place_tEDpOT_:
  125|  3.71k|      : Storage<Ts, I, StorageTag<Ts...>>(std::in_place,
  126|  3.71k|                                          std::forward<Vs>(args))... {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_15source_locationEEELm0ENS2_10StorageTagIJS7_PS6_EEELb1EEC2IRS7_EENS4_10in_place_tEOT_:
  101|  1.85k|  explicit constexpr Storage(std::in_place_t, V&& v) : T(std::forward<V>(v)) {}
_ZN4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageIPNSt3__115source_locationELm1ENS2_10StorageTagIJNS4_9allocatorIS5_EES6_EEELb0EEC2IDnEENS4_10in_place_tEOT_:
   89|  1.85k|      : value(std::forward<V>(v)) {}
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEPS5_EE3getILi0EEERNS1_25internal_compressed_tuple4ElemIS8_XT_EE4typeEv:
  240|    928|  constexpr ElemT<I>& get() & {
  241|    928|    return StorageT<I>::get();
  242|    928|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_15source_locationEEELm0ENS2_10StorageTagIJS7_PS6_EEELb1EE3getEv:
  104|    928|  constexpr T& get() & { return *this; }
_ZNR4absl12lts_2026081718container_internal15CompressedTupleIJNSt3__19allocatorINS3_15source_locationEEEPS5_EE3getILi1EEERNS1_25internal_compressed_tuple4ElemIS8_XT_EE4typeEv:
  240|  6.49k|  constexpr ElemT<I>& get() & {
  241|  6.49k|    return StorageT<I>::get();
  242|  6.49k|  }
_ZNR4absl12lts_2026081718container_internal25internal_compressed_tuple7StorageIPNSt3__115source_locationELm1ENS2_10StorageTagIJNS4_9allocatorIS5_EES6_EEELb0EE3getEv:
   91|  6.49k|  constexpr T& get() & { return value; }

_ZN4absl12lts_2026081718container_internal27SanitizerPoisonMemoryRegionEPKvm:
  236|  94.3M|inline void SanitizerPoisonMemoryRegion(const void* m, size_t s) {
  237|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  238|       |  ASAN_POISON_MEMORY_REGION(m, s);
  239|       |#endif
  240|       |#ifdef ABSL_HAVE_MEMORY_SANITIZER
  241|       |  __msan_poison(m, s);
  242|       |#endif
  243|  94.3M|  (void)m;
  244|  94.3M|  (void)s;
  245|  94.3M|}
_ZN4absl12lts_2026081718container_internal29SanitizerUnpoisonMemoryRegionEPKvm:
  247|   158M|inline void SanitizerUnpoisonMemoryRegion(const void* m, size_t s) {
  248|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  249|       |  ASAN_UNPOISON_MEMORY_REGION(m, s);
  250|       |#endif
  251|       |#ifdef ABSL_HAVE_MEMORY_SANITIZER
  252|       |  __msan_unpoison(m, s);
  253|       |#endif
  254|   158M|  (void)m;
  255|   158M|  (void)s;
  256|   158M|}
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12EqualElementINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS1_8StringEqEEEJRNS4_4pairIKNS4_17basic_string_viewIcS7_EEhEEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSJ_DpOSK_:
  222|     31|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|     31|  return memory_internal::DecomposePairImpl(
  224|     31|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|     31|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12EqualElementINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS1_8StringEqEEERKNS5_17basic_string_viewIcS8_EENS5_5tupleIJRKhEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS5_19piecewise_constructEEclsr3stdE7declvalINSI_IJSN_EEEEEclsr3stdE7declvalIT1_EEEEOSM_NS5_4pairISQ_SR_EE:
  156|     31|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|     31|  const auto& key = std::get<0>(p.first);
  158|     31|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|     31|                            std::move(p.second));
  160|     31|}
_ZNK4absl12lts_2026081718container_internal12EqualElementINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS1_8StringEqEEclINS3_17basic_string_viewIcS6_EEJRKNS3_21piecewise_construct_tENS3_5tupleIJRKSE_EEENSI_IJRKhEEEEEEbRKT_DpOT0_:
  525|     31|  bool operator()(const K2& lhs, Args&&...) const {
  526|     31|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
  ------------------
  |  |  484|     31|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
  527|     31|  }
_ZN4absl12lts_2026081718container_internal8PairArgsIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhEENS3_4pairINS3_5tupleIJRKT_EEENSA_IJRKT0_EEEEERKNS9_ISB_SF_EE:
  203|  29.2M|    const std::pair<F, S>& p) {
  204|  29.2M|  return PairArgs(p.first, p.second);
  205|  29.2M|}
_ZN4absl12lts_2026081718container_internal8PairArgsIRKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEERKhEENS3_4pairINS3_5tupleIJOT_EEENSD_IJOT0_EEEEESF_SI_:
  197|  29.2M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  198|  29.2M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  199|  29.2M|          std::forward_as_tuple(std::forward<S>(s))};
  200|  29.2M|}
_ZN4absl12lts_2026081718container_internal23TypeErasedApplyToSlotFnINS1_10StringHashENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEELb1EEEmPKvPvm:
  538|    559|size_t TypeErasedApplyToSlotFn(const void* fn, void* slot, size_t seed) {
  539|    559|  const auto* f = static_cast<const Fn*>(fn);
  540|    559|  return HashElement<Fn, kIsDefault>{*f, seed}(*static_cast<const T*>(slot));
  541|    559|}
_ZN4absl12lts_2026081718container_internal11HashElementINS1_10StringHashELb1EEC2ERKS3_m:
  491|   394M|  HashElement(const Hash& h, size_t s) : hash(h), seed(s) {}
_ZNK4absl12lts_2026081718container_internal11HashElementINS1_10StringHashELb1EEclINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEJEEEmRKT_DpOT0_:
  494|   394M|  size_t operator()(const K& key, Args&&...) const {
  495|   394M|    if constexpr (kIsDefault) {
  496|       |      // TODO(b/384509507): resolve `no header providing
  497|       |      // "absl::hash_internal::SupportsHashWithSeed" is directly included`.
  498|       |      // Maybe we should make "internal/hash.h" be a separate library.
  499|   394M|      return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
  500|   394M|    }
  501|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  502|      0|    return hash(key) ^ seed;
  503|   394M|  }
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_11HashElementINS1_10StringHashELb1EEEJRNSt3__14pairIKNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEhEEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSF_DpOSG_:
  222|    442|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|    442|  return memory_internal::DecomposePairImpl(
  224|    442|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|    442|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_11HashElementINS1_10StringHashELb1EEERKNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEENS7_5tupleIJRKhEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS7_19piecewise_constructEEclsr3stdE7declvalINSE_IJSJ_EEEEEclsr3stdE7declvalIT1_EEEEOSI_NS7_4pairISM_SN_EE:
  156|    442|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|    442|  const auto& key = std::get<0>(p.first);
  158|    442|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|    442|                            std::move(p.second));
  160|    442|}
_ZNK4absl12lts_2026081718container_internal11HashElementINS1_10StringHashELb1EEclINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEJRKNS6_21piecewise_construct_tENS6_5tupleIJRKSA_EEENSE_IJRKhEEEEEEmRKT_DpOT0_:
  494|    442|  size_t operator()(const K& key, Args&&...) const {
  495|    442|    if constexpr (kIsDefault) {
  496|       |      // TODO(b/384509507): resolve `no header providing
  497|       |      // "absl::hash_internal::SupportsHashWithSeed" is directly included`.
  498|       |      // Maybe we should make "internal/hash.h" be a separate library.
  499|    442|      return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
  500|    442|    }
  501|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  502|      0|    return hash(key) ^ seed;
  503|    442|  }
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE8transferINS3_9allocatorINS3_4pairIKS7_hEEEEEEDaPT_PNS1_13map_slot_typeIS7_hEESJ_:
  438|    434|                       slot_type* old_slot) {
  439|       |    // This should really just be
  440|       |    // typename absl::is_trivially_relocatable<value_type>::type()
  441|       |    // but std::pair is not trivially copyable in C++23 in some standard
  442|       |    // library versions.
  443|       |    // See https://github.com/llvm/llvm-project/pull/95444 for instance.
  444|    434|    auto is_relocatable = typename std::conjunction<
  445|    434|        absl::is_trivially_relocatable<typename value_type::first_type>,
  446|    434|        absl::is_trivially_relocatable<typename value_type::second_type>>::
  447|    434|        type();
  448|       |
  449|    434|    emplace(new_slot);
  450|    434|    if (is_relocatable) {
  ------------------
  |  Branch (450:9): [True: 434, Folded]
  ------------------
  451|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  452|    434|      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  453|    434|                  static_cast<const void*>(&old_slot->value),
  454|    434|                  sizeof(value_type));
  455|    434|      return is_relocatable;
  456|    434|    }
  457|       |
  458|      0|    if (kMutableKeys::value) {
  ------------------
  |  Branch (458:9): [True: 0, Folded]
  ------------------
  459|      0|      std::allocator_traits<Allocator>::construct(
  460|      0|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  461|      0|    } else {
  462|      0|      std::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  463|      0|                                                  std::move(old_slot->value));
  464|      0|    }
  465|      0|    destroy(alloc, old_slot);
  466|      0|    return is_relocatable;
  467|    434|  }
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE7emplaceEPNS1_13map_slot_typeIS7_hEE:
  364|    690|  static void emplace(slot_type* slot) {
  365|       |    // The construction of union doesn't do anything at runtime but it allows us
  366|       |    // to access its members without violating aliasing rules.
  367|    690|    new (slot) slot_type;
  368|    690|  }
_ZN4absl12lts_2026081718container_internal13map_slot_typeINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhEC2Ev:
  345|    690|  map_slot_type() {}
_ZN4absl12lts_2026081718container_internal7HashKeyINS1_10StringHashENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEELb1EEC2ERKS3_RKSA_:
  511|  5.37k|  HashKey(const Hash& h, const Key& k) : hash(h), key(k) {}
_ZNK4absl12lts_2026081718container_internal7HashKeyINS1_10StringHashENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEELb1EEclEm:
  513|      1|  size_t operator()(size_t seed) const {
  514|      1|    return HashElement<Hash, kIsDefault>{hash, seed}(key);
  515|      1|  }
_ZNK4absl12lts_2026081718container_internal11HashElementINS1_10StringHashELb1EEclINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEJEEEmRKT_DpOT0_:
  494|   123k|  size_t operator()(const K& key, Args&&...) const {
  495|   123k|    if constexpr (kIsDefault) {
  496|       |      // TODO(b/384509507): resolve `no header providing
  497|       |      // "absl::hash_internal::SupportsHashWithSeed" is directly included`.
  498|       |      // Maybe we should make "internal/hash.h" be a separate library.
  499|   123k|      return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
  500|   123k|    }
  501|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  502|      0|    return hash(key) ^ seed;
  503|   123k|  }
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEhE9constructINS3_9allocatorINS3_4pairIKS7_hEEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRKNS3_12basic_stringIcS6_NSA_IcEEEEEEENSI_IJEEEEEEvPT_PNS1_13map_slot_typeIS7_hEEDpOT0_:
  393|    256|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  394|    256|    emplace(slot);
  395|    256|    if (kMutableKeys::value) {
  ------------------
  |  Branch (395:9): [True: 256, Folded]
  ------------------
  396|    256|      std::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  397|    256|                                                  std::forward<Args>(args)...);
  398|    256|    } else {
  399|      0|      std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  400|      0|                                                  std::forward<Args>(args)...);
  401|      0|    }
  402|    256|  }
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12EqualElementINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS1_8StringEqEEEJRNS4_4pairIKS8_iEEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSF_DpOSG_:
  222|   201M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|   201M|  return memory_internal::DecomposePairImpl(
  224|   201M|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|   201M|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12EqualElementINSt3__117basic_string_viewIcNS5_11char_traitsIcEEEENS1_8StringEqEEERKS9_NS5_5tupleIJRKiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS5_19piecewise_constructEEclsr3stdE7declvalINSE_IJSJ_EEEEEclsr3stdE7declvalIT1_EEEEOSI_NS5_4pairISM_SN_EE:
  156|   201M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|   201M|  const auto& key = std::get<0>(p.first);
  158|   201M|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|   201M|                            std::move(p.second));
  160|   201M|}
_ZNK4absl12lts_2026081718container_internal12EqualElementINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS1_8StringEqEEclIS7_JRKNS3_21piecewise_construct_tENS3_5tupleIJRKS7_EEENSE_IJRKiEEEEEEbRKT_DpOT0_:
  525|   201M|  bool operator()(const K2& lhs, Args&&...) const {
  526|   201M|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
  ------------------
  |  |  484|   201M|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
  527|   201M|  }
_ZN4absl12lts_2026081718container_internal8PairArgsIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiEENS3_4pairINS3_5tupleIJRKT_EEENSA_IJRKT0_EEEEERKNS9_ISB_SF_EE:
  203|   201M|    const std::pair<F, S>& p) {
  204|   201M|  return PairArgs(p.first, p.second);
  205|   201M|}
_ZN4absl12lts_2026081718container_internal8PairArgsIRKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEERKiEENS3_4pairINS3_5tupleIJOT_EEENSD_IJOT0_EEEEESF_SI_:
  197|   201M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  198|   201M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  199|   201M|          std::forward_as_tuple(std::forward<S>(s))};
  200|   201M|}
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE7emplaceEPNS1_13map_slot_typeIS7_iEE:
  364|   128k|  static void emplace(slot_type* slot) {
  365|       |    // The construction of union doesn't do anything at runtime but it allows us
  366|       |    // to access its members without violating aliasing rules.
  367|   128k|    new (slot) slot_type;
  368|   128k|  }
_ZN4absl12lts_2026081718container_internal13map_slot_typeINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiEC2Ev:
  345|   128k|  map_slot_type() {}
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEiEEJEE19EmplaceDecomposableEJRKNS5_12basic_stringIcS8_NS5_9allocatorIcEEEERiEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSK_DpOSL_:
  222|   128k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|   128k|  return memory_internal::DecomposePairImpl(
  224|   128k|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|   128k|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEiEEJEE19EmplaceDecomposableERKNS6_12basic_stringIcS9_NS6_9allocatorIcEEEENS6_5tupleIJRiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_19piecewise_constructEEclsr3stdE7declvalINSK_IJSO_EEEEEclsr3stdE7declvalIT1_EEEEOSN_NS6_4pairISR_SS_EE:
  156|   128k|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|   128k|  const auto& key = std::get<0>(p.first);
  158|   128k|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|   128k|                            std::move(p.second));
  160|   128k|}
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12EqualElementINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS1_8StringEqEEEJRNS4_4pairIKNS4_17basic_string_viewIcS7_EEiEEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSJ_DpOSK_:
  222|  3.48k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|  3.48k|  return memory_internal::DecomposePairImpl(
  224|  3.48k|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|  3.48k|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12EqualElementINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS1_8StringEqEEERKNS5_17basic_string_viewIcS8_EENS5_5tupleIJRKiEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS5_19piecewise_constructEEclsr3stdE7declvalINSI_IJSN_EEEEEclsr3stdE7declvalIT1_EEEEOSM_NS5_4pairISQ_SR_EE:
  156|  3.48k|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|  3.48k|  const auto& key = std::get<0>(p.first);
  158|  3.48k|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|  3.48k|                            std::move(p.second));
  160|  3.48k|}
_ZNK4absl12lts_2026081718container_internal12EqualElementINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS1_8StringEqEEclINS3_17basic_string_viewIcS6_EEJRKNS3_21piecewise_construct_tENS3_5tupleIJRKSE_EEENSI_IJRKiEEEEEEbRKT_DpOT0_:
  525|  3.48k|  bool operator()(const K2& lhs, Args&&...) const {
  526|  3.48k|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
  ------------------
  |  |  484|  3.48k|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
  527|  3.48k|  }
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiE9constructINS3_9allocatorINS3_4pairIKS7_iEEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRKNS3_12basic_stringIcS6_NSA_IcEEEEEEENSI_IJRiEEEEEEvPT_PNS1_13map_slot_typeIS7_iEEDpOT0_:
  393|   128k|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  394|   128k|    emplace(slot);
  395|   128k|    if (kMutableKeys::value) {
  ------------------
  |  Branch (395:9): [True: 128k, Folded]
  ------------------
  396|   128k|      std::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  397|   128k|                                                  std::forward<Args>(args)...);
  398|   128k|    } else {
  399|      0|      std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  400|      0|                                                  std::forward<Args>(args)...);
  401|      0|    }
  402|   128k|  }
_ZN4absl12lts_2026081718container_internal8PairArgsIRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERiEENS3_4pairINS3_5tupleIJOT_EEENSE_IJOT0_EEEEESG_SJ_:
  197|   128k|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  198|   128k|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  199|   128k|          std::forward_as_tuple(std::forward<S>(s))};
  200|   128k|}
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12EqualElementINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS1_8StringEqEEEJRNS4_4pairIKS8_hEEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSF_DpOSG_:
  222|  29.2M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|  29.2M|  return memory_internal::DecomposePairImpl(
  224|  29.2M|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|  29.2M|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12EqualElementINSt3__117basic_string_viewIcNS5_11char_traitsIcEEEENS1_8StringEqEEERKS9_NS5_5tupleIJRKhEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS5_19piecewise_constructEEclsr3stdE7declvalINSE_IJSJ_EEEEEclsr3stdE7declvalIT1_EEEEOSI_NS5_4pairISM_SN_EE:
  156|  29.2M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|  29.2M|  const auto& key = std::get<0>(p.first);
  158|  29.2M|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|  29.2M|                            std::move(p.second));
  160|  29.2M|}
_ZNK4absl12lts_2026081718container_internal12EqualElementINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS1_8StringEqEEclIS7_JRKNS3_21piecewise_construct_tENS3_5tupleIJRKS7_EEENSE_IJRKhEEEEEEbRKT_DpOT0_:
  525|  29.2M|  bool operator()(const K2& lhs, Args&&...) const {
  526|  29.2M|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
  ------------------
  |  |  484|  29.2M|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
  527|  29.2M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12EqualElementIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisENS1_6HashEqIS9_vE2EqEEEJRNSt3__14pairIKS9_PS7_EEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSK_DpOSL_:
  222|  11.5M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|  11.5M|  return memory_internal::DecomposePairImpl(
  224|  11.5M|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|  11.5M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12EqualElementIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisENS1_6HashEqISA_vE2EqEEERKSA_NSt3__15tupleIJRKPS8_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSH_19piecewise_constructEEclsr3stdE7declvalINSI_IJSO_EEEEEclsr3stdE7declvalIT1_EEEEOSN_NSH_4pairISR_SS_EE:
  156|  11.5M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|  11.5M|  const auto& key = std::get<0>(p.first);
  158|  11.5M|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|  11.5M|                            std::move(p.second));
  160|  11.5M|}
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12EqualElementIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisENS1_6HashEqIS8_vE2EqEEclIS8_JRKNSt3__121piecewise_construct_tENSE_5tupleIJRKS8_EEENSI_IJRKPS6_EEEEEEbRKT_DpOT0_:
  525|  11.5M|  bool operator()(const K2& lhs, Args&&...) const {
  526|  11.5M|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
  ------------------
  |  |  484|  11.5M|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
  527|  11.5M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal8PairArgsIKPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_EENSt3__14pairINSB_5tupleIJRKT_EEENSD_IJRKT0_EEEEERKNSC_ISE_SI_EE:
  203|   105M|    const std::pair<F, S>& p) {
  204|   105M|  return PairArgs(p.first, p.second);
  205|   105M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal8PairArgsIRKPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisERKPS6_EENSt3__14pairINSE_5tupleIJOT_EEENSG_IJOT0_EEEEESI_SL_:
  197|   105M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  198|   105M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  199|   105M|          std::forward_as_tuple(std::forward<S>(s))};
  200|   105M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal11HashElementINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELb0EEC2ERKSB_m:
  491|   222M|  HashElement(const Hash& h, size_t s) : hash(h), seed(s) {}
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal11HashElementINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELb0EEclIS9_JEEEmRKT_DpOT0_:
  494|   128M|  size_t operator()(const K& key, Args&&...) const {
  495|       |    if constexpr (kIsDefault) {
  496|       |      // TODO(b/384509507): resolve `no header providing
  497|       |      // "absl::hash_internal::SupportsHashWithSeed" is directly included`.
  498|       |      // Maybe we should make "internal/hash.h" be a separate library.
  499|       |      return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
  500|       |    }
  501|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  502|   128M|    return hash(key) ^ seed;
  503|   128M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS8_EEJEE19EmplaceDecomposableEJNSt3__14pairISA_SB_EEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSI_DpOSJ_:
  222|  64.0M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|  64.0M|  return memory_internal::DecomposePairImpl(
  224|  64.0M|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|  64.0M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS9_EEJEE19EmplaceDecomposableEOSB_NSt3__15tupleIJOSC_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSH_19piecewise_constructEEclsr3stdE7declvalINSI_IJSM_EEEEEclsr3stdE7declvalIT1_EEEEOSL_NSH_4pairISP_SQ_EE:
  156|  64.0M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|  64.0M|  const auto& key = std::get<0>(p.first);
  158|  64.0M|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|  64.0M|                            std::move(p.second));
  160|  64.0M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal23TypeErasedApplyToSlotFnINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashES9_Lb0EEEmPKvPvm:
  538|  2.51k|size_t TypeErasedApplyToSlotFn(const void* fn, void* slot, size_t seed) {
  539|  2.51k|  const auto* f = static_cast<const Fn*>(fn);
  540|  2.51k|  return HashElement<Fn, kIsDefault>{*f, seed}(*static_cast<const T*>(slot));
  541|  2.51k|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_11HashElementINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELb0EEEJRNSt3__14pairIKSA_PS8_EEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSK_DpOSL_:
  222|  94.3M|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|  94.3M|  return memory_internal::DecomposePairImpl(
  224|  94.3M|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|  94.3M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_11HashElementINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELb0EEERKSB_NSt3__15tupleIJRKPS9_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSH_19piecewise_constructEEclsr3stdE7declvalINSI_IJSO_EEEEEclsr3stdE7declvalIT1_EEEEOSN_NSH_4pairISR_SS_EE:
  156|  94.3M|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|  94.3M|  const auto& key = std::get<0>(p.first);
  158|  94.3M|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|  94.3M|                            std::move(p.second));
  160|  94.3M|}
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal11HashElementINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashELb0EEclIS9_JRKNSt3__121piecewise_construct_tENSE_5tupleIJRKS9_EEENSI_IJRKPS7_EEEEEEmRKT_DpOT0_:
  494|  94.3M|  size_t operator()(const K& key, Args&&...) const {
  495|       |    if constexpr (kIsDefault) {
  496|       |      // TODO(b/384509507): resolve `no header providing
  497|       |      // "absl::hash_internal::SupportsHashWithSeed" is directly included`.
  498|       |      // Maybe we should make "internal/hash.h" be a separate library.
  499|       |      return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
  500|       |    }
  501|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  502|  94.3M|    return hash(key) ^ seed;
  503|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15map_slot_policyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E8transferINSt3__19allocatorINSC_4pairIKS8_S9_EEEEEEDaPT_PNS1_13map_slot_typeIS8_S9_EESM_:
  438|  94.3M|                       slot_type* old_slot) {
  439|       |    // This should really just be
  440|       |    // typename absl::is_trivially_relocatable<value_type>::type()
  441|       |    // but std::pair is not trivially copyable in C++23 in some standard
  442|       |    // library versions.
  443|       |    // See https://github.com/llvm/llvm-project/pull/95444 for instance.
  444|  94.3M|    auto is_relocatable = typename std::conjunction<
  445|  94.3M|        absl::is_trivially_relocatable<typename value_type::first_type>,
  446|  94.3M|        absl::is_trivially_relocatable<typename value_type::second_type>>::
  447|  94.3M|        type();
  448|       |
  449|  94.3M|    emplace(new_slot);
  450|  94.3M|    if (is_relocatable) {
  ------------------
  |  Branch (450:9): [True: 94.3M, Folded]
  ------------------
  451|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  452|  94.3M|      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  453|  94.3M|                  static_cast<const void*>(&old_slot->value),
  454|  94.3M|                  sizeof(value_type));
  455|  94.3M|      return is_relocatable;
  456|  94.3M|    }
  457|       |
  458|      0|    if (kMutableKeys::value) {
  ------------------
  |  Branch (458:9): [True: 0, Folded]
  ------------------
  459|      0|      std::allocator_traits<Allocator>::construct(
  460|      0|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  461|      0|    } else {
  462|      0|      std::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  463|      0|                                                  std::move(old_slot->value));
  464|      0|    }
  465|      0|    destroy(alloc, old_slot);
  466|      0|    return is_relocatable;
  467|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15map_slot_policyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E7emplaceEPNS1_13map_slot_typeIS8_S9_EE:
  364|   158M|  static void emplace(slot_type* slot) {
  365|       |    // The construction of union doesn't do anything at runtime but it allows us
  366|       |    // to access its members without violating aliasing rules.
  367|   158M|    new (slot) slot_type;
  368|   158M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal13map_slot_typeIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_EC2Ev:
  345|   158M|  map_slot_type() {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal7HashKeyINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashES9_Lb0EEC2ERKSB_RKS9_:
  511|  5.03k|  HashKey(const Hash& h, const Key& k) : hash(h), key(k) {}
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal7HashKeyINS1_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashES9_Lb0EEclEm:
  513|  2.51k|  size_t operator()(size_t seed) const {
  514|  2.51k|    return HashElement<Hash, kIsDefault>{hash, seed}(key);
  515|  2.51k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal15map_slot_policyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_E9constructINSt3__19allocatorINSC_4pairIKS8_S9_EEEEJRKNSC_21piecewise_construct_tENSC_5tupleIJOS8_EEENSL_IJOS9_EEEEEEvPT_PNS1_13map_slot_typeIS8_S9_EEDpOT0_:
  393|  64.0M|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  394|  64.0M|    emplace(slot);
  395|  64.0M|    if (kMutableKeys::value) {
  ------------------
  |  Branch (395:9): [True: 64.0M, Folded]
  ------------------
  396|  64.0M|      std::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  397|  64.0M|                                                  std::forward<Args>(args)...);
  398|  64.0M|    } else {
  399|      0|      std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  400|      0|                                                  std::forward<Args>(args)...);
  401|      0|    }
  402|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal8PairArgsIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_EENSt3__14pairINSA_5tupleIJOT_EEENSC_IJOT0_EEEEEONSB_ISD_SG_EE:
  207|  64.0M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(std::pair<F, S>&& p) {
  208|  64.0M|  return PairArgs(std::forward<F>(p.first), std::forward<S>(p.second));
  209|  64.0M|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal8PairArgsIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS6_EENSt3__14pairINSA_5tupleIJOT_EEENSC_IJOT0_EEEEESE_SH_:
  197|  64.0M|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  198|  64.0M|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  199|  64.0M|          std::forward_as_tuple(std::forward<S>(s))};
  200|  64.0M|}
_ZN4absl12lts_2026081718container_internal13DecomposePairINS1_12EqualElementINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS1_8StringEqEEEJRNS4_4pairIKS8_NSB_IS8_S8_EEEEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSG_DpOSH_:
  222|   105k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  223|   105k|  return memory_internal::DecomposePairImpl(
  224|   105k|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  225|   105k|}
_ZN4absl12lts_2026081718container_internal15memory_internal17DecomposePairImplINS1_12EqualElementINSt3__117basic_string_viewIcNS5_11char_traitsIcEEEENS1_8StringEqEEERKS9_NS5_5tupleIJRKNS5_4pairIS9_S9_EEEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS5_19piecewise_constructEEclsr3stdE7declvalINSE_IJSL_EEEEEclsr3stdE7declvalIT1_EEEEOSK_NSF_ISO_SP_EE:
  156|   105k|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  157|   105k|  const auto& key = std::get<0>(p.first);
  158|   105k|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  159|   105k|                            std::move(p.second));
  160|   105k|}
_ZNK4absl12lts_2026081718container_internal12EqualElementINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS1_8StringEqEEclIS7_JRKNS3_21piecewise_construct_tENS3_5tupleIJRKS7_EEENSE_IJRKNS3_4pairIS7_S7_EEEEEEEEbRKT_DpOT0_:
  525|   105k|  bool operator()(const K2& lhs, Args&&...) const {
  526|   105k|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
  ------------------
  |  |  484|   105k|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
  527|   105k|  }
_ZN4absl12lts_2026081718container_internal8PairArgsIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEEENS9_INS3_5tupleIJRKT_EEENSB_IJRKT0_EEEEERKNS9_ISC_SG_EE:
  203|   105k|    const std::pair<F, S>& p) {
  204|   105k|  return PairArgs(p.first, p.second);
  205|   105k|}
_ZN4absl12lts_2026081718container_internal8PairArgsIRKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEERKNS3_4pairIS7_S7_EEEENSA_INS3_5tupleIJOT_EEENSE_IJOT0_EEEEESG_SJ_:
  197|   105k|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  198|   105k|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  199|   105k|          std::forward_as_tuple(std::forward<S>(s))};
  200|   105k|}
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE8transferINS3_9allocatorINS8_IKS7_S9_EEEEEEDaPT_PNS1_13map_slot_typeIS7_S9_EESK_:
  438|  1.05k|                       slot_type* old_slot) {
  439|       |    // This should really just be
  440|       |    // typename absl::is_trivially_relocatable<value_type>::type()
  441|       |    // but std::pair is not trivially copyable in C++23 in some standard
  442|       |    // library versions.
  443|       |    // See https://github.com/llvm/llvm-project/pull/95444 for instance.
  444|  1.05k|    auto is_relocatable = typename std::conjunction<
  445|  1.05k|        absl::is_trivially_relocatable<typename value_type::first_type>,
  446|  1.05k|        absl::is_trivially_relocatable<typename value_type::second_type>>::
  447|  1.05k|        type();
  448|       |
  449|  1.05k|    emplace(new_slot);
  450|  1.05k|    if (is_relocatable) {
  ------------------
  |  Branch (450:9): [Folded, False: 1.05k]
  ------------------
  451|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  452|      0|      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  453|      0|                  static_cast<const void*>(&old_slot->value),
  454|      0|                  sizeof(value_type));
  455|      0|      return is_relocatable;
  456|      0|    }
  457|       |
  458|  1.05k|    if (kMutableKeys::value) {
  ------------------
  |  Branch (458:9): [True: 1.05k, Folded]
  ------------------
  459|  1.05k|      std::allocator_traits<Allocator>::construct(
  460|  1.05k|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  461|  1.05k|    } else {
  462|      0|      std::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  463|      0|                                                  std::move(old_slot->value));
  464|      0|    }
  465|  1.05k|    destroy(alloc, old_slot);
  466|  1.05k|    return is_relocatable;
  467|  1.05k|  }
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE7emplaceEPNS1_13map_slot_typeIS7_S9_EE:
  364|  3.28k|  static void emplace(slot_type* slot) {
  365|       |    // The construction of union doesn't do anything at runtime but it allows us
  366|       |    // to access its members without violating aliasing rules.
  367|  3.28k|    new (slot) slot_type;
  368|  3.28k|  }
_ZN4absl12lts_2026081718container_internal13map_slot_typeINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEEC2Ev:
  345|  3.28k|  map_slot_type() {}
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE7destroyINS3_9allocatorINS8_IKS7_S9_EEEEEEDaPT_PNS1_13map_slot_typeIS7_S9_EE:
  427|  1.05k|  static auto destroy(Allocator* alloc, slot_type* slot) {
  428|  1.05k|    if (kMutableKeys::value) {
  ------------------
  |  Branch (428:9): [True: 1.05k, Folded]
  ------------------
  429|  1.05k|      std::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
  430|  1.05k|    } else {
  431|      0|      std::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
  432|      0|    }
  433|  1.05k|    return IsDestructionTrivial<Allocator, value_type>();
  434|  1.05k|  }
_ZN4absl12lts_2026081718container_internal20IsDestructionTrivialINSt3__19allocatorINS3_4pairIKNS3_17basic_string_viewIcNS3_11char_traitsIcEEEENS5_IS9_S9_EEEEEESC_EEDav:
   81|  1.05k|constexpr auto IsDestructionTrivial() {
   82|  1.05k|  constexpr bool result =
   83|  1.05k|      std::is_trivially_destructible_v<ValueType> &&
  ------------------
  |  Branch (83:7): [True: 0, Folded]
  ------------------
   84|      0|      std::is_same_v<typename std::allocator_traits<
  ------------------
  |  Branch (84:7): [True: 0, Folded]
  ------------------
   85|      0|                         Allocator>::template rebind_alloc<char>,
   86|      0|                     std::allocator<char>>;
   87|  1.05k|  return std::bool_constant<result>();
   88|  1.05k|}
_ZN4absl12lts_2026081718container_internal7HashKeyINS1_10StringHashENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEELb1EEC2ERKS3_RKS8_:
  511|  1.80k|  HashKey(const Hash& h, const Key& k) : hash(h), key(k) {}
_ZNK4absl12lts_2026081718container_internal7HashKeyINS1_10StringHashENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEELb1EEclEm:
  513|    558|  size_t operator()(size_t seed) const {
  514|    558|    return HashElement<Hash, kIsDefault>{hash, seed}(key);
  515|    558|  }
_ZN4absl12lts_2026081718container_internal15map_slot_policyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_4pairIS7_S7_EEE9constructINS3_9allocatorINS8_IKS7_S9_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRSD_EEENSJ_IJEEEEEEvPT_PNS1_13map_slot_typeIS7_S9_EEDpOT0_:
  393|  2.23k|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  394|  2.23k|    emplace(slot);
  395|  2.23k|    if (kMutableKeys::value) {
  ------------------
  |  Branch (395:9): [True: 2.23k, Folded]
  ------------------
  396|  2.23k|      std::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  397|  2.23k|                                                  std::forward<Args>(args)...);
  398|  2.23k|    } else {
  399|      0|      std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  400|      0|                                                  std::forward<Args>(args)...);
  401|      0|    }
  402|  2.23k|  }
_ZN4absl12lts_2026081718container_internal8AllocateILm8ENSt3__19allocatorIcEEEEPvPT0_m:
   62|  44.0k|void* Allocate(Alloc* alloc, size_t n) {
   63|  44.0k|  static_assert(Alignment > 0, "");
   64|  44.0k|  assert(n && "n must be positive");
   65|  44.0k|  using M = AlignedType<Alignment>;
   66|  44.0k|  using A = typename std::allocator_traits<Alloc>::template rebind_alloc<M>;
   67|  44.0k|  using AT = typename std::allocator_traits<Alloc>::template rebind_traits<M>;
   68|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   69|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   70|       |  // with the "foo(bar)" syntax.
   71|  44.0k|  A my_mem_alloc(*alloc);
   72|  44.0k|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   73|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   74|  44.0k|         "allocator does not respect alignment");
   75|  44.0k|  return p;
   76|  44.0k|}
_ZN4absl12lts_2026081718container_internal10DeallocateILm8ENSt3__19allocatorIcEEEEvPT0_Pvm:
   93|  44.0k|void Deallocate(Alloc* alloc, void* p, size_t n) {
   94|  44.0k|  static_assert(Alignment > 0, "");
   95|  44.0k|  assert(n && "n must be positive");
   96|  44.0k|  using M = AlignedType<Alignment>;
   97|  44.0k|  using A = typename std::allocator_traits<Alloc>::template rebind_alloc<M>;
   98|  44.0k|  using AT = typename std::allocator_traits<Alloc>::template rebind_traits<M>;
   99|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
  100|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
  101|       |  // with the "foo(bar)" syntax.
  102|  44.0k|  A my_mem_alloc(*alloc);
  103|  44.0k|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
  104|  44.0k|                 (n + sizeof(M) - 1) / sizeof(M));
  105|  44.0k|}

_ZNK4absl12lts_2026081718container_internal10StringHash14hash_with_seedENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEm:
   86|   394M|  size_t hash_with_seed(absl::string_view v, size_t seed) const {
   87|   394M|    return absl::hash_internal::HashWithSeed().hash(
   88|   394M|        absl::Hash<absl::string_view>{}, v, seed);
   89|   394M|  }
_ZNK4absl12lts_2026081718container_internal8StringEqclENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEES7_:
   98|   230M|  bool operator()(absl::string_view lhs, absl::string_view rhs) const {
   99|   230M|    return lhs == rhs;
  100|   230M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE2EqclIS8_S8_EEbRKT_RKT0_:
  182|  11.5M|    bool operator()(const A& a, const B& b) const {
  183|  11.5M|      return HashEq::ToPtr(a) == HashEq::ToPtr(b);
  184|  11.5M|    }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE5ToPtrES8_:
  188|   245M|  static const T* ToPtr(const T* ptr) { return ptr; }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashclIS8_EEmRKT_:
  175|   222M|    size_t operator()(const U& ptr) const {
  176|   222M|      return absl::Hash<const T*>{}(HashEq::ToPtr(ptr));
  177|   222M|    }

_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE5applyINS1_12EqualElementINS4_12basic_stringIcS7_NS4_9allocatorIcEEEENS1_8StringEqEEEJRNS4_4pairIKS8_hEEES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSO_DpOSP_:
  130|     31|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|     31|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|     31|  }
_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE5applyINS1_11HashElementINS1_10StringHashELb1EEEJRNS4_4pairIKS8_hEEES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSL_:
  130|    442|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|    442|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|    442|  }
_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEvE5applyINS1_12EqualElementIS8_NS1_8StringEqEEEJRNS4_4pairIKS8_iEEES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSL_:
  130|   201M|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|   201M|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|   201M|  }
_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEvE5applyINS1_12raw_hash_setIS9_JEE19EmplaceDecomposableEJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEERiES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  130|   128k|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|   128k|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|   128k|  }
_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEvE5applyINS1_12EqualElementINS4_12basic_stringIcS7_NS4_9allocatorIcEEEENS1_8StringEqEEEJRNS4_4pairIKS8_iEEES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSO_DpOSP_:
  130|  3.48k|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|  3.48k|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|  3.48k|  }
_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEvE5applyINS1_12EqualElementIS8_NS1_8StringEqEEEJRNS4_4pairIKS8_hEEES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSL_:
  130|  29.2M|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|  29.2M|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|  29.2M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE5applyINS1_12EqualElementIS9_NS1_6HashEqIS9_vE2EqEEEJRNSt3__14pairIKS9_SA_EEESB_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  130|  11.5M|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|  11.5M|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|  11.5M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE5applyINS1_12raw_hash_setISB_JEE19EmplaceDecomposableEJNSt3__14pairIS9_SA_EEESB_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  130|  64.0M|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|  64.0M|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEvE5applyINS1_11HashElementINS1_6HashEqIS9_vE4HashELb0EEEJRNSt3__14pairIKS9_SA_EEESB_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  130|  94.3M|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|  94.3M|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|  94.3M|  }
_ZN4absl12lts_2026081718container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEvE5applyINS1_12EqualElementIS8_NS1_8StringEqEEEJRNS9_IKS8_SA_EEESB_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  130|   105k|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  131|   105k|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  132|   105k|  }

_ZN4absl12lts_2026081718container_internal13GroupSse2ImplC2EPKNS1_6ctrl_tE:
  286|   552M|  explicit GroupSse2Impl(const ctrl_t* pos) {
  287|   552M|    ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
  288|   552M|  }
_ZNK4absl12lts_2026081718container_internal13GroupSse2Impl5MatchEh:
  291|   541M|  BitMaskType Match(h2_t hash) const {
  292|   541M|    auto match = _mm_set1_epi8(static_cast<char>(hash));
  293|   541M|    return BitMaskType(MoveMask(_mm_cmpeq_epi8(match, ctrl)));
  294|   541M|  }
_ZNK4absl12lts_2026081718container_internal13GroupSse2Impl9MaskEmptyEv:
  297|   356M|  NonIterableBitMaskType MaskEmpty() const {
  298|       |#ifdef ABSL_INTERNAL_HAVE_SSSE3
  299|       |    // This only works because ctrl_t::kEmpty is -128.
  300|       |    return NonIterableBitMaskType(MoveMask(_mm_sign_epi8(ctrl, ctrl)));
  301|       |#else
  302|   356M|    auto match = _mm_set1_epi8(static_cast<char>(ctrl_t::kEmpty));
  303|   356M|    return NonIterableBitMaskType(MoveMask(_mm_cmpeq_epi8(match, ctrl)));
  304|   356M|#endif
  305|   356M|  }
_ZNK4absl12lts_2026081718container_internal13GroupSse2Impl8MaskFullEv:
  310|  6.73M|  BitMaskType MaskFull() const { return BitMaskType(MoveMask(ctrl) ^ 0xffff); }
_ZNK4absl12lts_2026081718container_internal13GroupSse2Impl11MaskNonFullEv:
  315|  4.08M|  auto MaskNonFull() const { return BitMaskType(MoveMask(ctrl)); }
_ZNK4absl12lts_2026081718container_internal13GroupSse2Impl18MaskEmptyOrDeletedEv:
  318|   393k|  NonIterableBitMaskType MaskEmptyOrDeleted() const {
  319|   393k|    auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel));
  320|   393k|    return NonIterableBitMaskType(
  321|   393k|        MoveMask(_mm_cmpgt_epi8_fixed(special, ctrl)));
  322|   393k|  }
_ZN4absl12lts_2026081718container_internal13GroupSse2Impl8MoveMaskEDv2_x:
  346|   909M|  static MaskInt MoveMask(__m128i xmm) {
  347|   909M|    auto mask = static_cast<MaskInt>(_mm_movemask_epi8(xmm));
  348|   909M|#ifdef __clang__
  349|       |    // TODO(b/472522597): Without the inline asm, clang ends up generating an
  350|       |    // unnecessary movzx to zero the upper bits of the output, but those bits
  351|       |    // are already zero. See https://godbolt.org/z/G6xW1Ecbx.
  352|   909M|    asm("" : "+r"(mask));  // NOLINT
  353|   909M|#endif
  354|   909M|    return mask;
  355|   909M|  }
_ZN4absl12lts_2026081718container_internal7IsEmptyENS1_6ctrl_tE:
  222|   495k|inline bool IsEmpty(ctrl_t c) { return c == ctrl_t::kEmpty; }
_ZN4absl12lts_2026081718container_internal6IsFullENS1_6ctrl_tE:
  223|  64.2M|inline bool IsFull(ctrl_t c) {
  224|       |  // Cast `c` to the underlying type instead of casting `0` to `ctrl_t` as `0`
  225|       |  // is not a value in the enum. Both ways are equivalent, but this way makes
  226|       |  // linters happier.
  227|  64.2M|  return static_cast<std::underlying_type_t<ctrl_t>>(c) >= 0;
  228|  64.2M|}
_ZN4absl12lts_2026081718container_internal16IsEmptyOrDeletedENS1_6ctrl_tE:
  230|  2.62M|inline bool IsEmptyOrDeleted(ctrl_t c) { return c < ctrl_t::kSentinel; }
_ZN4absl12lts_2026081718container_internal20_mm_cmpgt_epi8_fixedEDv2_xS2_:
  266|   393k|inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
  267|       |#if defined(__GNUC__) && !defined(__clang__)
  268|       |  if (std::is_unsigned_v<char>) {
  269|       |    const __m128i mask = _mm_set1_epi8(0x80);
  270|       |    const __m128i diff = _mm_subs_epi8(b, a);
  271|       |    return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask);
  272|       |  }
  273|       |#endif
  274|   393k|  return _mm_cmpgt_epi8(a, b);
  275|   393k|}
_ZN4absl12lts_2026081718container_internal13TrailingZerosImEEjT_:
   63|  72.2k|uint32_t TrailingZeros(T x) {
   64|  72.2k|  ABSL_ASSUME(x != 0);
  ------------------
  |  |  272|  72.2k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
   65|  72.2k|  return static_cast<uint32_t>(countr_zero(x));
   66|  72.2k|}
_ZN4absl12lts_2026081718container_internal7BitMaskIjLi16ELi0ELb0EEC2Ej:
  133|  1.10G|  explicit BitMask(T mask) : Base(mask) {
  134|  1.10G|    if (Shift == 3 && !NullifyBitsOnIteration) {
  ------------------
  |  Branch (134:9): [Folded, False: 1.10G]
  |  Branch (134:23): [True: 0, Folded]
  ------------------
  135|       |      ABSL_SWISSTABLE_ASSERT(this->mask_ == (this->mask_ & kMsbs8Bytes));
  ------------------
  |  |   58|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  136|      0|    }
  137|  1.10G|  }
_ZN4absl12lts_2026081718container_internal18NonIterableBitMaskIjLi16ELi0EEC2Ej:
   85|  1.45G|  explicit NonIterableBitMask(T mask) : mask_(mask) {}
_ZNK4absl12lts_2026081718container_internal7BitMaskIjLi16ELi0ELb0EE5beginEv:
  153|   548M|  BitMask begin() const { return *this; }
_ZNK4absl12lts_2026081718container_internal7BitMaskIjLi16ELi0ELb0EE3endEv:
  154|   548M|  BitMask end() const { return BitMask(0); }
_ZN4absl12lts_2026081718container_internalneERKNS1_7BitMaskIjLi16ELi0ELb0EEES5_:
  160|   666M|  friend bool operator!=(const BitMask& a, const BitMask& b) {
  161|   666M|    return a.mask_ != b.mask_;
  162|   666M|  }
_ZNK4absl12lts_2026081718container_internal7BitMaskIjLi16ELi0ELb0EEdeEv:
  151|   303M|  uint32_t operator*() const { return Base::LowestBitSet(); }
_ZNK4absl12lts_2026081718container_internal18NonIterableBitMaskIjLi16ELi0EE12LowestBitSetEv:
   90|   371M|  uint32_t LowestBitSet() const {
   91|   371M|    return container_internal::TrailingZeros(mask_) >> Shift;
   92|   371M|  }
_ZN4absl12lts_2026081718container_internal13TrailingZerosIjEEjT_:
   63|   371M|uint32_t TrailingZeros(T x) {
   64|   371M|  ABSL_ASSUME(x != 0);
  ------------------
  |  |  272|   371M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
   65|   371M|  return static_cast<uint32_t>(countr_zero(x));
   66|   371M|}
_ZNK4absl12lts_2026081718container_internal18NonIterableBitMaskIjLi16ELi0EEcvbEv:
   87|   360M|  explicit operator bool() const { return mask_ != 0; }
_ZN4absl12lts_2026081718container_internal7BitMaskIjLi16ELi0ELb0EEppEv:
  143|   118M|  BitMask& operator++() {
  144|   118M|    if (Shift == 3 && NullifyBitsOnIteration) {
  ------------------
  |  Branch (144:9): [Folded, False: 118M]
  |  Branch (144:23): [Folded, False: 0]
  ------------------
  145|      0|      this->mask_ &= kMsbs8Bytes;
  146|      0|    }
  147|   118M|    this->mask_ &= (this->mask_ - 1);
  148|   118M|    return *this;
  149|   118M|  }

_ZN4absl12lts_2026081718container_internal20HashtablezInfoHandle10UnregisterEv:
  203|  15.3k|  inline void Unregister() {}
_ZNK4absl12lts_2026081718container_internal20HashtablezInfoHandle9IsSampledEv:
  204|  44.0k|  inline bool IsSampled() const { return false; }
_ZN4absl12lts_2026081718container_internal20HashtablezInfoHandle20RecordStorageChangedEmm:
  205|  3.43k|  inline void RecordStorageChanged(size_t /*size*/, size_t /*capacity*/) {}
_ZN4absl12lts_2026081718container_internal20HashtablezInfoHandle17RecordReservationEm:
  207|  11.5k|  inline void RecordReservation(size_t /*target_capacity*/) {}
_ZN4absl12lts_2026081718container_internal20HashtablezInfoHandle16RecordInsertMissEmm:
  210|  64.1M|                               size_t /*distance_from_desired*/) {}
_ZN4absl12lts_2026081718container_internal21ShouldSampleNextTableEv:
  226|  15.3k|inline bool ShouldSampleNextTable() {
  227|       |#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
  228|       |  if (ABSL_PREDICT_TRUE(--global_next_sample.next_sample > 0)) {
  229|       |    return false;
  230|       |  }
  231|       |  return true;
  232|       |#else
  233|  15.3k|  return false;
  234|  15.3k|#endif  // ABSL_INTERNAL_HASHTABLEZ_SAMPLE
  235|  15.3k|}

_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE21GetSizeAndIsAllocatedEv:
  364|  33.7k|  SizeType<A>& GetSizeAndIsAllocated() { return metadata_.template get<1>(); }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE21DeallocateIfAllocatedEv:
  520|  13.4k|  void DeallocateIfAllocated() {
  521|  13.4k|    if (GetIsAllocated()) {
  ------------------
  |  Branch (521:9): [True: 928, False: 12.5k]
  ------------------
  522|    928|      MallocAdapter<A>::Deallocate(GetAllocator(), GetAllocatedData(),
  523|    928|                                   GetAllocatedCapacity());
  524|    928|    }
  525|  13.4k|  }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE14GetIsAllocatedEv:
  372|  36.5k|  bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE21GetSizeAndIsAllocatedEv:
  366|  78.0k|  const SizeType<A>& GetSizeAndIsAllocated() const {
  367|  78.0k|    return metadata_.template get<1>();
  368|  78.0k|  }
_ZN4absl12lts_2026081723inlined_vector_internal13MallocAdapterINSt3__19allocatorINS3_15source_locationEEELb0EE10DeallocateERS6_PS5_m:
  123|    928|                         SizeType<A> capacity) {
  124|    928|    AllocatorTraits<A>::deallocate(allocator, pointer, capacity);
  125|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE12GetAllocatorEv:
  419|  25.8k|  A& GetAllocator() { return metadata_.template get<0>(); }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE16GetAllocatedDataEv:
  374|    928|  Pointer<A> GetAllocatedData() {
  375|       |    // GCC 12 has a false-positive -Wmaybe-uninitialized warning here.
  376|       |#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(12, 0)
  377|       |#pragma GCC diagnostic push
  378|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  379|       |#endif
  380|    928|    return data_.allocated.allocated_data;
  381|       |#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(12, 0)
  382|       |#pragma GCC diagnostic pop
  383|       |#endif
  384|    928|  }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE20GetAllocatedCapacityEv:
  404|    928|  SizeType<A> GetAllocatedCapacity() const {
  405|    928|    return data_.allocated.allocated_capacity;
  406|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE14GetInlinedDataEv:
  396|  21.2k|  ABSL_ATTRIBUTE_NO_SANITIZE_CFI Pointer<A> GetInlinedData() {
  397|  21.2k|    return reinterpret_cast<Pointer<A>>(data_.inlined.inlined_data);
  398|  21.2k|  }
_ZN4absl12lts_2026081723inlined_vector_internal14DestroyAdapterINSt3__19allocatorINS3_15source_locationEEELb1EE15DestroyElementsERS6_PS5_m:
  100|  1.85k|                              SizeType<A> destroy_size) {
  101|  1.85k|    static_cast<void>(allocator);
  102|  1.85k|    static_cast<void>(destroy_first);
  103|  1.85k|    static_cast<void>(destroy_size);
  104|  1.85k|  }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE7GetSizeEv:
  370|  41.5k|  SizeType<A> GetSize() const { return GetSizeAndIsAllocated() >> 1; }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE14GetIsAllocatedEv:
  372|  5.60k|  bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE21GetSizeAndIsAllocatedEv:
  366|  11.2k|  const SizeType<A>& GetSizeAndIsAllocated() const {
  367|  11.2k|    return metadata_.template get<1>();
  368|  11.2k|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE14GetInlinedDataEv:
  396|  5.60k|  ABSL_ATTRIBUTE_NO_SANITIZE_CFI Pointer<A> GetInlinedData() {
  397|  5.60k|    return reinterpret_cast<Pointer<A>>(data_.inlined.inlined_data);
  398|  5.60k|  }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE7GetSizeEv:
  370|  5.60k|  SizeType<A> GetSize() const { return GetSizeAndIsAllocated() >> 1; }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEEC2Ev:
  337|  5.60k|  Storage() : metadata_(A(), /* size and is_allocated */ 0u) {}
_ZN4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEED2Ev:
  342|  5.60k|  ~Storage() {
  343|       |    // Fast path: if we are empty and not allocated, there's nothing to do.
  344|  5.60k|    if (GetSizeAndIsAllocated() == 0) {
  ------------------
  |  Branch (344:9): [True: 5.60k, False: 0]
  ------------------
  345|  5.60k|      return;
  346|  5.60k|    }
  347|       |
  348|       |    // Fast path: if no destructors need to be run and we know the allocator
  349|       |    // doesn't do anything fancy, then all we need to do is deallocate (and
  350|       |    // maybe not even that).
  351|      0|    if (std::is_trivially_destructible_v<ValueType<A>> &&
  ------------------
  |  Branch (351:9): [True: 0, Folded]
  ------------------
  352|      0|        std::is_same_v<A, std::allocator<ValueType<A>>>) {
  ------------------
  |  Branch (352:9): [True: 0, Folded]
  ------------------
  353|      0|      DeallocateIfAllocated();
  354|      0|      return;
  355|      0|    }
  356|       |
  357|      0|    DestroyContents();
  358|      0|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE21GetSizeAndIsAllocatedEv:
  364|  5.60k|  SizeType<A>& GetSizeAndIsAllocated() { return metadata_.template get<1>(); }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEED2Ev:
  342|  12.5k|  ~Storage() {
  343|       |    // Fast path: if we are empty and not allocated, there's nothing to do.
  344|  12.5k|    if (GetSizeAndIsAllocated() == 0) {
  ------------------
  |  Branch (344:9): [True: 0, False: 12.5k]
  ------------------
  345|      0|      return;
  346|      0|    }
  347|       |
  348|       |    // Fast path: if no destructors need to be run and we know the allocator
  349|       |    // doesn't do anything fancy, then all we need to do is deallocate (and
  350|       |    // maybe not even that).
  351|  12.5k|    if (std::is_trivially_destructible_v<ValueType<A>> &&
  ------------------
  |  Branch (351:9): [True: 0, Folded]
  ------------------
  352|  12.5k|        std::is_same_v<A, std::allocator<ValueType<A>>>) {
  ------------------
  |  Branch (352:9): [True: 0, Folded]
  ------------------
  353|  12.5k|      DeallocateIfAllocated();
  354|  12.5k|      return;
  355|  12.5k|    }
  356|       |
  357|      0|    DestroyContents();
  358|      0|  }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE14GetInlinedDataEv:
  400|    928|  ABSL_ATTRIBUTE_NO_SANITIZE_CFI ConstPointer<A> GetInlinedData() const {
  401|    928|    return reinterpret_cast<ConstPointer<A>>(data_.inlined.inlined_data);
  402|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEEC2Ev:
  337|  12.5k|  Storage() : metadata_(A(), /* size and is_allocated */ 0u) {}
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE12GetAllocatorEv:
  421|  20.2k|  const A& GetAllocator() const { return metadata_.template get<0>(); }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE11EmplaceBackIJRKS4_EEERS4_DpOT_:
  816|  19.3k|auto Storage<T, N, A>::EmplaceBack(Args&&... args) -> Reference<A> {
  817|  19.3k|  StorageView<A> storage_view = MakeStorageView();
  818|  19.3k|  const SizeType<A> n = storage_view.size;
  819|  19.3k|  if (ABSL_PREDICT_TRUE(n != storage_view.capacity)) {
  ------------------
  |  |  191|  19.3k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 18.4k, False: 928]
  |  |  |  Branch (191:48): [Folded, False: 19.3k]
  |  |  |  Branch (191:57): [True: 18.4k, False: 928]
  |  |  ------------------
  ------------------
  820|       |    // Fast path; new element fits.
  821|  18.4k|    Pointer<A> last_ptr = storage_view.data + n;
  822|  18.4k|    AllocatorTraits<A>::construct(GetAllocator(), last_ptr,
  823|  18.4k|                                  std::forward<Args>(args)...);
  824|  18.4k|    AddSize(1);
  825|  18.4k|    return *last_ptr;
  826|  18.4k|  }
  827|       |  // TODO(b/173712035): Annotate with musttail attribute to prevent regression.
  828|    928|  return EmplaceBackSlow(std::forward<Args>(args)...);
  829|  19.3k|}
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE15MakeStorageViewEv:
  412|  21.2k|  StorageView<A> MakeStorageView() {
  413|  21.2k|    return GetIsAllocated() ? StorageView<A>{GetAllocatedData(), GetSize(),
  ------------------
  |  Branch (413:12): [True: 0, False: 21.2k]
  ------------------
  414|      0|                                             GetAllocatedCapacity()}
  415|  21.2k|                            : StorageView<A>{GetInlinedData(), GetSize(),
  416|  21.2k|                                             GetInlinedCapacity()};
  417|  21.2k|  }
_ZNK4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE18GetInlinedCapacityEv:
  408|  21.2k|  SizeType<A> GetInlinedCapacity() const {
  409|  21.2k|    return static_cast<SizeType<A>>(kOptimalInlinedSize);
  410|  21.2k|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE7AddSizeEm:
  474|  19.3k|  void AddSize(SizeType<A> count) {
  475|  19.3k|    GetSizeAndIsAllocated() += count << static_cast<SizeType<A>>(1);
  476|  19.3k|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE15EmplaceBackSlowIJRKS4_EEERS4_DpOT_:
  833|    928|auto Storage<T, N, A>::EmplaceBackSlow(Args&&... args) -> Reference<A> {
  834|    928|  StorageView<A> storage_view = MakeStorageView();
  835|    928|  AllocationTransaction<A> allocation_tx(GetAllocator());
  836|    928|  IteratorValueAdapter<A, MoveIterator<A>> move_values(
  837|    928|      MoveIterator<A>(storage_view.data));
  838|    928|  SizeType<A> requested_capacity = NextCapacity(storage_view.capacity);
  839|    928|  Pointer<A> construct_data = allocation_tx.Allocate(requested_capacity);
  840|    928|  Pointer<A> last_ptr = construct_data + storage_view.size;
  841|       |
  842|       |  // Construct new element.
  843|    928|  AllocatorTraits<A>::construct(GetAllocator(), last_ptr,
  844|    928|                                std::forward<Args>(args)...);
  845|       |  // Move elements from old backing store to new backing store.
  846|    928|  ABSL_INTERNAL_TRY {
  ------------------
  |  |  192|    928|#define ABSL_INTERNAL_TRY try
  ------------------
  847|    928|    ConstructElements<A>(GetAllocator(), allocation_tx.GetData(), move_values,
  848|    928|                         storage_view.size);
  849|    928|  }
  850|    928|  ABSL_INTERNAL_CATCH_ANY {
  851|      0|    AllocatorTraits<A>::destroy(GetAllocator(), last_ptr);
  852|      0|    ABSL_INTERNAL_RETHROW;
  ------------------
  |  |  194|      0|#define ABSL_INTERNAL_RETHROW do { throw; } while (false)
  |  |  ------------------
  |  |  |  Branch (194:52): [Folded, False: 0]
  |  |  ------------------
  ------------------
  853|      0|  }
  854|       |  // Destroy elements in old backing store.
  855|    928|  DestroyAdapter<A>::DestroyElements(GetAllocator(), storage_view.data,
  856|    928|                                     storage_view.size);
  857|       |
  858|    928|  DeallocateIfAllocated();
  859|    928|  SetAllocation(std::move(allocation_tx).Release());
  860|    928|  SetIsAllocated();
  861|    928|  AddSize(1);
  862|    928|  return *last_ptr;
  863|    928|}
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEEC2ERS6_:
  206|  1.85k|      : allocator_data_(allocator, nullptr), capacity_(0) {}
_ZN4absl12lts_2026081723inlined_vector_internal20IteratorValueAdapterINSt3__19allocatorINS3_15source_locationEEENS3_13move_iteratorIPS5_EEEC2ERKS9_:
  159|    928|  explicit IteratorValueAdapter(const Iterator& it) : it_(it) {}
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE12NextCapacityEm:
  324|    928|  static SizeType<A> NextCapacity(SizeType<A> current_capacity) {
  325|    928|    return current_capacity * 2;
  326|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE8AllocateEm:
  223|    928|  Pointer<A> Allocate(SizeType<A> requested_capacity) {
  224|    928|    Allocation<A> result =
  225|    928|        MallocAdapter<A>::Allocate(GetAllocator(), requested_capacity);
  226|    928|    GetData() = result.data;
  227|    928|    GetCapacity() = result.capacity;
  228|    928|    return result.data;
  229|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal13MallocAdapterINSt3__19allocatorINS3_15source_locationEEELb0EE8AllocateERS6_m:
  117|    928|  static Allocation<A> Allocate(A& allocator, SizeType<A> requested_capacity) {
  118|    928|    return {AllocatorTraits<A>::allocate(allocator, requested_capacity),
  119|    928|            requested_capacity};
  120|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE12GetAllocatorEv:
  217|    928|  A& GetAllocator() { return allocator_data_.template get<0>(); }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE11GetCapacityEv:
  219|  2.78k|  SizeType<A>& GetCapacity() { return capacity_; }
_ZN4absl12lts_2026081723inlined_vector_internal17ConstructElementsINSt3__19allocatorINS3_15source_locationEEENS1_20IteratorValueAdapterIS6_NS3_13move_iteratorIPS5_EEEEEEvRNS3_13type_identityIT_E4typeENS3_16allocator_traitsISD_E7pointerERT0_NSI_9size_typeE:
  131|    928|                       SizeType<A> construct_size) {
  132|  2.78k|  for (SizeType<A> i = 0; i < construct_size; ++i) {
  ------------------
  |  Branch (132:27): [True: 1.85k, False: 928]
  ------------------
  133|  1.85k|    ABSL_INTERNAL_TRY { values.ConstructNext(allocator, construct_first + i); }
  ------------------
  |  |  192|  1.85k|#define ABSL_INTERNAL_TRY try
  ------------------
  134|  1.85k|    ABSL_INTERNAL_CATCH_ANY {
  135|      0|      DestroyAdapter<A>::DestroyElements(allocator, construct_first, i);
  136|      0|      ABSL_INTERNAL_RETHROW;
  ------------------
  |  |  194|      0|#define ABSL_INTERNAL_RETHROW do { throw; } while (false)
  |  |  ------------------
  |  |  |  Branch (194:52): [Folded, False: 0]
  |  |  ------------------
  ------------------
  137|      0|    }
  138|  1.85k|  }
  139|    928|}
_ZN4absl12lts_2026081723inlined_vector_internal20IteratorValueAdapterINSt3__19allocatorINS3_15source_locationEEENS3_13move_iteratorIPS5_EEE13ConstructNextERS6_S8_:
  161|  1.85k|  void ConstructNext(A& allocator, Pointer<A> construct_at) {
  162|  1.85k|    AllocatorTraits<A>::construct(allocator, construct_at, *it_);
  163|  1.85k|    ++it_;
  164|  1.85k|  }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE7GetDataEv:
  218|  6.49k|  Pointer<A>& GetData() { return allocator_data_.template get<1>(); }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE13SetAllocationENS1_10AllocationIS6_EE:
  484|    928|  void SetAllocation(Allocation<A> allocation) {
  485|    928|    data_.allocated.allocated_data = allocation.data;
  486|    928|    data_.allocated.allocated_capacity = allocation.capacity;
  487|    928|  }
_ZNO4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE7ReleaseEv:
  231|    928|  [[nodiscard]] Allocation<A> Release() && {
  232|    928|    Allocation<A> result = {GetData(), GetCapacity()};
  233|    928|    Reset();
  234|    928|    return result;
  235|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE5ResetEv:
  238|    928|  void Reset() {
  239|    928|    GetData() = nullptr;
  240|    928|    GetCapacity() = 0;
  241|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE14SetIsAllocatedEv:
  453|    928|  void SetIsAllocated() {
  454|    928|    GetSizeAndIsAllocated() |= static_cast<SizeType<A>>(1);
  455|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEED2Ev:
  208|  1.85k|  ~AllocationTransaction() {
  209|  1.85k|    if (DidAllocate()) {
  ------------------
  |  Branch (209:9): [True: 0, False: 1.85k]
  ------------------
  210|      0|      MallocAdapter<A>::Deallocate(GetAllocator(), GetData(), GetCapacity());
  211|      0|    }
  212|  1.85k|  }
_ZN4absl12lts_2026081723inlined_vector_internal21AllocationTransactionINSt3__19allocatorINS3_15source_locationEEEE11DidAllocateEv:
  221|  2.78k|  bool DidAllocate() { return GetData() != nullptr; }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE6AssignINS1_20IteratorValueAdapterIS6_PKS4_EEEEvT_m:
  645|    928|                              SizeType<A> new_size) -> void {
  646|    928|  StorageView<A> storage_view = MakeStorageView();
  647|       |
  648|    928|  AllocationTransaction<A> allocation_tx(GetAllocator());
  649|       |
  650|    928|  absl::Span<ValueType<A>> assign_loop;
  651|    928|  absl::Span<ValueType<A>> construct_loop;
  652|    928|  absl::Span<ValueType<A>> destroy_loop;
  653|       |
  654|    928|  if (new_size > storage_view.capacity) {
  ------------------
  |  Branch (654:7): [True: 0, False: 928]
  ------------------
  655|      0|    SizeType<A> requested_capacity =
  656|      0|        ComputeCapacity(storage_view.capacity, new_size);
  657|      0|    construct_loop = {allocation_tx.Allocate(requested_capacity), new_size};
  658|      0|    destroy_loop = {storage_view.data, storage_view.size};
  659|    928|  } else if (new_size > storage_view.size) {
  ------------------
  |  Branch (659:14): [True: 928, False: 0]
  ------------------
  660|    928|    assign_loop = {storage_view.data, storage_view.size};
  661|    928|    construct_loop = {storage_view.data + storage_view.size,
  662|    928|                      new_size - storage_view.size};
  663|    928|  } else {
  664|      0|    assign_loop = {storage_view.data, new_size};
  665|      0|    destroy_loop = {storage_view.data + new_size, storage_view.size - new_size};
  666|      0|  }
  667|       |
  668|    928|  AssignElements<A>(assign_loop.data(), values, assign_loop.size());
  669|       |
  670|    928|  ConstructElements<A>(GetAllocator(), construct_loop.data(), values,
  671|    928|                       construct_loop.size());
  672|       |
  673|    928|  DestroyAdapter<A>::DestroyElements(GetAllocator(), destroy_loop.data(),
  674|    928|                                     destroy_loop.size());
  675|       |
  676|    928|  if (allocation_tx.DidAllocate()) {
  ------------------
  |  Branch (676:7): [True: 0, False: 928]
  ------------------
  677|      0|    DeallocateIfAllocated();
  678|      0|    SetAllocation(std::move(allocation_tx).Release());
  679|      0|    SetIsAllocated();
  680|      0|  }
  681|       |
  682|    928|  SetSize(new_size);
  683|    928|}
_ZN4absl12lts_2026081723inlined_vector_internal14AssignElementsINSt3__19allocatorINS3_15source_locationEEENS1_20IteratorValueAdapterIS6_PKS5_EEEEvNS3_16allocator_traitsIT_E7pointerERT0_NSD_9size_typeE:
  143|    928|                    SizeType<A> assign_size) {
  144|    928|  for (SizeType<A> i = 0; i < assign_size; ++i) {
  ------------------
  |  Branch (144:27): [True: 0, False: 928]
  ------------------
  145|      0|    values.AssignNext(assign_first + i);
  146|      0|  }
  147|    928|}
_ZN4absl12lts_2026081723inlined_vector_internal17ConstructElementsINSt3__19allocatorINS3_15source_locationEEENS1_20IteratorValueAdapterIS6_PKS5_EEEEvRNS3_13type_identityIT_E4typeENS3_16allocator_traitsISC_E7pointerERT0_NSH_9size_typeE:
  131|    928|                       SizeType<A> construct_size) {
  132|  1.85k|  for (SizeType<A> i = 0; i < construct_size; ++i) {
  ------------------
  |  Branch (132:27): [True: 928, False: 928]
  ------------------
  133|    928|    ABSL_INTERNAL_TRY { values.ConstructNext(allocator, construct_first + i); }
  ------------------
  |  |  192|    928|#define ABSL_INTERNAL_TRY try
  ------------------
  134|    928|    ABSL_INTERNAL_CATCH_ANY {
  135|      0|      DestroyAdapter<A>::DestroyElements(allocator, construct_first, i);
  136|      0|      ABSL_INTERNAL_RETHROW;
  ------------------
  |  |  194|      0|#define ABSL_INTERNAL_RETHROW do { throw; } while (false)
  |  |  ------------------
  |  |  |  Branch (194:52): [Folded, False: 0]
  |  |  ------------------
  ------------------
  137|      0|    }
  138|    928|  }
  139|    928|}
_ZN4absl12lts_2026081723inlined_vector_internal20IteratorValueAdapterINSt3__19allocatorINS3_15source_locationEEEPKS5_E13ConstructNextERS6_PS5_:
  161|    928|  void ConstructNext(A& allocator, Pointer<A> construct_at) {
  162|    928|    AllocatorTraits<A>::construct(allocator, construct_at, *it_);
  163|    928|    ++it_;
  164|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal7StorageINSt3__115source_locationELm1ENS3_9allocatorIS4_EEE7SetSizeEm:
  461|    928|  void SetSize(SizeType<A> size) {
  462|    928|    GetSizeAndIsAllocated() =
  463|    928|        (size << 1) | static_cast<SizeType<A>>(GetIsAllocated());
  464|    928|  }
_ZN4absl12lts_2026081723inlined_vector_internal20IteratorValueAdapterINSt3__19allocatorINS3_15source_locationEEEPKS5_EC2ERKS8_:
  159|    928|  explicit IteratorValueAdapter(const Iterator& it) : it_(it) {}

_ZN4absl12lts_2026081718container_internal15internal_layout21LayoutWithStaticSizesINSt3__116integer_sequenceImJLm1EEEEJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSB_IPNS9_11SerialArenaEEEEE7PartialIJEEENS2_10LayoutImplINS4_5tupleIJSA_SD_SG_EEES6_18__make_integer_seqIS5_mXsZT_EESM_IS5_mXplsZT_clL_ZNS4_18__integer_sequenceImJLm1EEE4sizeB8ne220000EvEEEESM_IS5_mXclL_ZNS2_11adl_barrier3MinEmmEsZT1_plplsZT_clL_ZNSP_4sizeB8ne220000EvEELi1EEEEEEDpOT_:
  741|  40.8k|  static constexpr PartialType<sizeof...(Sizes)> Partial(Sizes&&... sizes) {
  742|  40.8k|    static_assert(sizeof...(Sizes) + StaticSizeSeq::size() <= sizeof...(Ts),
  743|  40.8k|                  "");
  744|  40.8k|    return PartialType<sizeof...(Sizes)>(
  745|  40.8k|        static_cast<size_t>(std::forward<Sizes>(sizes))...);
  746|  40.8k|  }
_ZN4absl12lts_2026081718container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJLm1EEEENSH_ImJEEENSH_ImJLm0EEEENSH_ImJLm0ELm1EEEEEC2Ev:
  401|  40.8k|      : size_{sizes...} {}
_ZNK4absl12lts_2026081718container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJLm1EEEENSH_ImJEEENSH_ImJLm0EEEENSH_ImJLm0ELm1EEEEE6OffsetILm0EEEmv:
  418|  40.8k|  constexpr size_t Offset() const {
  419|  40.8k|    if constexpr (N == 0) {
  420|  40.8k|      return 0;
  421|       |    } else {
  422|       |      static_assert(N < NumOffsets, "Index out of bounds");
  423|       |      return adl_barrier::Align(
  424|       |          Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * Size<N - 1>(),
  425|       |          ElementAlignment<N>::value);
  426|       |    }
  427|  40.8k|  }
_ZNK4absl12lts_2026081718container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJLm1EEEENSH_ImJEEENSH_ImJLm0EEEENSH_ImJLm0ELm1EEEEE7PointerILm0EKcEEPNS4_11conditionalIXsr3stdE10is_const_vIT0_EEKNS4_13tuple_elementIXT_ESG_E4typeEST_E4typeEPSQ_:
  496|  40.8k|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  497|  40.8k|    using C = std::remove_const_t<Char>;
  498|  40.8k|    static_assert(
  499|  40.8k|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  500|  40.8k|            std::is_same<C, signed char>(),
  501|  40.8k|        "The argument must be a pointer to [const] [signed|unsigned] char");
  502|  40.8k|    constexpr size_t alignment = Alignment();
  503|  40.8k|    (void)alignment;
  504|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  505|  40.8k|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  506|  40.8k|  }

_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEEC2Ev:
  107|      1|  raw_hash_map() {}
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEEixINS4_12basic_stringIcS7_NS4_9allocatorIcEEEES9_TpTnRiJETnNS4_9enable_ifIXsr14LifetimeBoundKIT_Lb1EPSI_EE5valueEiE4typeELi0EEEDTclsrT0_5valueclL_ZNS4_9addressofB8ne220000INS4_4pairIKS8_hEEEESJ_RSI_EclL_ZNS4_7declvalB8ne220000IRSQ_EEDTclsr3stdE9__declvalISI_ELi0EEEvEEEEERKSI_:
  339|    256|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  340|    256|    return this->template operator[]<K, P, 0>(key);
  341|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEEixINS4_12basic_stringIcS7_NS4_9allocatorIcEEEES9_Li0EEEDTclsrT0_5valueclL_ZNS4_9addressofB8ne220000INS4_4pairIKS8_hEEEEPT_RSL_EclL_ZNS4_7declvalB8ne220000IRSK_EEDTclsr3stdE9__declvalISL_ELi0EEEvEEEEERKSL_:
  329|    256|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  330|       |    // It is safe to use unchecked_deref here because try_emplace
  331|       |    // will always return an iterator pointing to a valid item in the table,
  332|       |    // since it inserts if nothing is found for the given key.
  333|    256|    return Policy::value(&this->unchecked_deref(try_emplace(key).first));
  334|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE11try_emplaceINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEJETnNS4_9enable_ifIXsr14LifetimeBoundKIT_Lb1EPSH_EE5valueEiE4typeELi0ETnNSG_IXntsr3stdE16is_convertible_vISH_NS1_12raw_hash_setIS9_JEE14const_iteratorEEEiE4typeELi0EEENS4_4pairINSM_8iteratorEbEERKSH_DpOT0_:
  253|    256|      Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
  254|    256|    return this->template try_emplace<K, 0>(k, std::forward<Args>(args)...);
  255|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE11try_emplaceINS4_12basic_stringIcS7_NS4_9allocatorIcEEEELi0EJETnNS4_9enable_ifIXntsr3stdE16is_convertible_vIT_NS1_12raw_hash_setIS9_JEE14const_iteratorEEEiE4typeELi0EEENS4_4pairINSJ_8iteratorEbEERKSH_DpOT1_:
  245|    256|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  246|    256|    return try_emplace_impl(k, std::forward<Args>(args)...);
  247|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE16try_emplace_implIRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEJEEENS4_4pairINS1_12raw_hash_setIS9_JEE8iteratorEbEEOT_DpOT0_:
  365|    256|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  366|    256|    auto res = this->find_or_prepare_insert(k);
  367|    256|    if (res.second) {
  ------------------
  |  Branch (367:9): [True: 256, False: 0]
  ------------------
  368|    256|      this->emplace_at(res.first, std::piecewise_construct,
  369|    256|                       std::forward_as_tuple(std::forward<K>(k)),
  370|    256|                       std::forward_as_tuple(std::forward<Args>(args)...));
  371|    256|    }
  372|    256|    return {this->non_iterable_iterator_at_slot(res.first), res.second};
  373|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEEC2Ev:
  107|  15.4k|  raw_hash_map() {}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEEC2Ev:
  107|  2.51k|  raw_hash_map() {}
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEEC2Ev:
  107|  10.1k|  raw_hash_map() {}
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEEixIS8_SB_Li0EEEDTclsrT0_5valueclL_ZNS4_9addressofB8ne220000INS9_IKS8_SA_EEEEPT_RSI_EclL_ZNS4_7declvalB8ne220000IRSH_EEDTclsr3stdE9__declvalISI_ELi0EEEvEEEEERKSI_:
  329|  47.7k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  330|       |    // It is safe to use unchecked_deref here because try_emplace
  331|       |    // will always return an iterator pointing to a valid item in the table,
  332|       |    // since it inserts if nothing is found for the given key.
  333|  47.7k|    return Policy::value(&this->unchecked_deref(try_emplace(key).first));
  334|  47.7k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE11try_emplaceIS8_Li0EJETnNS4_9enable_ifIXntsr3stdE16is_convertible_vIT_NS1_12raw_hash_setISB_JEE14const_iteratorEEEiE4typeELi0EEENS9_INSH_8iteratorEbEERKSF_DpOT1_:
  245|  47.7k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  246|  47.7k|    return try_emplace_impl(k, std::forward<Args>(args)...);
  247|  47.7k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE16try_emplace_implIRKS8_JEEENS9_INS1_12raw_hash_setISB_JEE8iteratorEbEEOT_DpOT0_:
  365|  47.7k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  366|  47.7k|    auto res = this->find_or_prepare_insert(k);
  367|  47.7k|    if (res.second) {
  ------------------
  |  Branch (367:9): [True: 2.23k, False: 45.4k]
  ------------------
  368|  2.23k|      this->emplace_at(res.first, std::piecewise_construct,
  369|  2.23k|                       std::forward_as_tuple(std::forward<K>(k)),
  370|  2.23k|                       std::forward_as_tuple(std::forward<Args>(args)...));
  371|  2.23k|    }
  372|  47.7k|    return {this->non_iterable_iterator_at_slot(res.first), res.second};
  373|  47.7k|  }

_ZN4absl12lts_2026081718container_internal5ClearILb0EEEvRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPFvPvS8_ES8_:
  929|  18.9k|           DestroySlotFn destroy_slot, void* alloc) {
  930|  18.9k|  if (SwisstableGenerationsEnabled() &&
  ------------------
  |  Branch (930:7): [Folded, False: 18.9k]
  |  Branch (930:7): [Folded, False: 18.9k]
  ------------------
  931|      0|      c.maybe_invalid_capacity().IsMovedFrom()) {
  ------------------
  |  Branch (931:7): [True: 0, False: 0]
  ------------------
  932|      0|    c.set_capacity(policy.soo_capacity());
  933|      0|  }
  934|  18.9k|  c.AssertNotDebugCapacity();
  935|  18.9k|  const size_t cap = c.capacity();
  936|       |  if constexpr (kSooEnabled) {
  937|       |    ABSL_ASSUME(cap > 0);
  938|       |  }
  939|  18.9k|  if (c.is_small()) {
  ------------------
  |  Branch (939:7): [True: 16.6k, False: 2.24k]
  ------------------
  940|  16.6k|    if (!c.empty()) {
  ------------------
  |  Branch (940:9): [True: 1.19k, False: 15.4k]
  ------------------
  941|  1.19k|      if (destroy_slot != nullptr) {
  ------------------
  |  Branch (941:11): [True: 0, False: 1.19k]
  ------------------
  942|      0|        destroy_slot(&c, SingleSlotAddress<kSooEnabled>(c));
  943|      0|      }
  944|  1.19k|      DecrementSmallSize<kSooEnabled>(c);
  945|  1.19k|      c.infoz().RecordStorageChanged(0, cap);
  946|  1.19k|    }
  947|  16.6k|  } else {
  948|  2.24k|    if (destroy_slot != nullptr) {
  ------------------
  |  Branch (948:9): [True: 0, False: 2.24k]
  ------------------
  949|      0|      DestroySlots(c, policy.slot_size, destroy_slot);
  950|      0|    }
  951|       |    // Iterating over this container is O(bucket_count()). When bucket_count()
  952|       |    // is much greater than size(), iteration becomes prohibitively expensive.
  953|       |    // For clear() it is more important to reuse the allocated array when the
  954|       |    // container is small because allocation takes comparatively long time
  955|       |    // compared to destruction of the elements of the container. So we pick the
  956|       |    // largest bucket_count() threshold for which iteration is still fast and
  957|       |    // past that we simply deallocate the array.
  958|  2.24k|    ClearBackingArray(c, policy, alloc, /*reuse=*/cap < 128);
  959|  2.24k|  }
  960|  18.9k|  c.set_reserved_growth(0);
  961|  18.9k|  c.set_reservation_size(0);
  962|  18.9k|}
_ZN4absl12lts_2026081718container_internal17NextHashTableSeedEv:
  144|  14.6k|uint8_t NextHashTableSeed() {
  145|  14.6k|  return static_cast<uint8_t>(RandomSeed());
  146|  14.6k|}
_ZN4absl12lts_2026081718container_internal18GrowthInfoAccessor23InitGrowthLeftNoDeletedEmm:
  361|  37.1k|                                                 size_t capacity) {
  362|  37.1k|  if (capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound) {
  ------------------
  |  Branch (362:7): [True: 23.7k, False: 13.3k]
  ------------------
  363|  23.7k|    *growth_info_lower_bound_ = static_cast<uint8_t>(growth_left);
  364|  23.7k|  } else {
  365|  13.3k|    uint64_t lower_bound =
  366|  13.3k|        (std::min)(uint64_t{growth_left},
  367|  13.3k|                   GrowthInfoLowerBound::kMaxGrowthLeftLowerBound);
  368|  13.3k|    little_endian::Store64(
  369|  13.3k|        full_growth_info_ptr(),
  370|  13.3k|        GetPackedIncrement(lower_bound, growth_left - lower_bound));
  371|  13.3k|  }
  372|  37.1k|}
_ZN4absl12lts_2026081718container_internal18GrowthInfoAccessor29RebalanceGrowthLeftLowerBoundEm:
  375|   521k|    size_t capacity) {
  376|   521k|  auto growth_left_lower_bound = GetGrowthInfoLowerBound();
  377|   521k|  if (capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound ||
  ------------------
  |  Branch (377:7): [True: 15.2k, False: 506k]
  ------------------
  378|       |      // For tables with deleted slots, we often call rebalance even if
  379|       |      // we have growth left in the lower bound.
  380|   506k|      growth_left_lower_bound.HasDeletedAndGrowthLeft()) {
  ------------------
  |  Branch (380:7): [True: 0, False: 506k]
  ------------------
  381|  15.2k|    return growth_left_lower_bound;
  382|   506k|  } else {
  383|   506k|    return RebalanceGrowthLeftLowerBoundLargeCapacity();
  384|   506k|  }
  385|   521k|}
_ZN4absl12lts_2026081718container_internal18GrowthInfoAccessor42RebalanceGrowthLeftLowerBoundLargeCapacityEv:
  397|   506k|GrowthInfoAccessor::RebalanceGrowthLeftLowerBoundLargeCapacity() {
  398|   506k|  void* full_growth_info = full_growth_info_ptr();
  399|   506k|  uint64_t packed_full_growth_info = little_endian::Load64(full_growth_info);
  400|   506k|  uint64_t overflow_growth_left =
  401|   506k|      GetOverflowGrowthLeftFromPacked(packed_full_growth_info);
  402|   506k|  uint64_t lower_bound_growth_left =
  403|   506k|      GetGrowthLeftLowerBoundFromPacked(packed_full_growth_info);
  404|   506k|  uint64_t overflow_to_lower_bound_size =
  405|   506k|      (std::min)(overflow_growth_left,
  406|   506k|                 GrowthInfoLowerBound::kMaxGrowthLeftLowerBound -
  407|   506k|                     lower_bound_growth_left);
  408|   506k|  packed_full_growth_info +=
  409|   506k|      GetRebalanceIncrement(overflow_to_lower_bound_size);
  410|   506k|  little_endian::Store64(full_growth_info, packed_full_growth_info);
  411|   506k|  auto result = GetGrowthInfoLowerBoundFromPacked(packed_full_growth_info);
  412|   506k|  ABSL_SWISSTABLE_ASSERT(result.HasNoDeleted() ==
  ------------------
  |  |   66|   506k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  413|   506k|                         GetGrowthInfoLowerBound().HasNoDeleted());
  414|       |  ABSL_SWISSTABLE_ASSERT(
  ------------------
  |  |   66|   506k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  415|   506k|      (result.GetGrowthLeft() > 0 ||
  416|   506k|       GetGrowthLeftTotalBigCapacity(full_growth_info_ptr()) == 0) &&
  417|   506k|      "rebalance may return 0 only if we have absolutely no growth left");
  418|   506k|  return result;
  419|   506k|}
_ZN4absl12lts_2026081718container_internal17ClearBackingArrayERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPvb:
  887|  2.24k|                       bool reuse) {
  888|  2.24k|  ABSL_SWISSTABLE_ASSERT(c.capacity() > kMaxSmallCapacity);
  ------------------
  |  |   66|  2.24k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  889|  2.24k|  if (reuse) {
  ------------------
  |  Branch (889:7): [True: 2.24k, False: 0]
  ------------------
  890|  2.24k|    const size_t blocked_element_count = c.blocked_element_count();
  891|  2.24k|    c.set_size_to_zero();
  892|  2.24k|    ABSL_SWISSTABLE_ASSERT(c.capacity() > policy.soo_capacity());
  ------------------
  |  |   66|  2.24k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  893|  2.24k|    ResetCtrl(c, policy.slot_size, blocked_element_count);
  894|  2.24k|    ResetGrowthLeft(c.growth_info(), c.capacity(), blocked_element_count);
  895|  2.24k|    ABSL_SWISSTABLE_ASSERT(c.blocked_element_count() == blocked_element_count);
  ------------------
  |  |   66|  2.24k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  896|  2.24k|    c.infoz().RecordStorageChanged(0, c.capacity());
  897|  2.24k|  } else {
  898|      0|    ClearBackingArrayNoReuse(c, policy, alloc);
  899|      0|  }
  900|  2.24k|}
_ZN4absl12lts_2026081718container_internal19DeallocBackingArrayERNS1_12CommonFieldsEmmPFvPvmPNS1_6ctrl_tEmmbmES4_:
  920|  15.3k|                         DeallocBackingArrayFn dealloc, void* alloc) {
  921|  15.3k|  const size_t cap = c.capacity();
  922|  15.3k|  c.infoz().Unregister();
  923|  15.3k|  dealloc(alloc, cap, c.control(), slot_size, slot_align, c.has_infoz(),
  924|  15.3k|          c.blocked_element_count());
  925|  15.3k|}
_ZN4absl12lts_2026081718container_internal14DestructNonSooERNS1_12CommonFieldsEmmPFvPvS4_EPFvS4_mPNS1_6ctrl_tEmmbmES4_:
  981|  15.3k|                    void* alloc) {
  982|  15.3k|  ABSL_SWISSTABLE_ASSERT(c.capacity() > 0);
  ------------------
  |  |   66|  15.3k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  983|  15.3k|  if (destroy_slot != nullptr) {
  ------------------
  |  Branch (983:7): [True: 0, False: 15.3k]
  ------------------
  984|      0|    if (c.is_small()) {
  ------------------
  |  Branch (984:9): [True: 0, False: 0]
  ------------------
  985|      0|      if (!c.empty()) {
  ------------------
  |  Branch (985:11): [True: 0, False: 0]
  ------------------
  986|      0|        static_assert(kMaxSmallCapacity == 1);
  987|      0|        destroy_slot(&c, c.slot_array(/*capacity=*/1));
  988|      0|      }
  989|      0|    } else {
  990|      0|      DestroySlots(c, slot_size, destroy_slot);
  991|      0|    }
  992|      0|  }
  993|  15.3k|  DeallocBackingArray(c, slot_size, slot_align, dealloc, alloc);
  994|  15.3k|}
_ZN4absl12lts_2026081718container_internal24PrepareInsertSmallNonSooERNS1_12CommonFieldsERKNS1_15PolicyFunctionsENS0_11FunctionRefIFmmEEE:
 1855|  12.2k|                               absl::FunctionRef<size_t(size_t)> get_hash) {
 1856|  12.2k|  ABSL_SWISSTABLE_ASSERT(common.is_small());
  ------------------
  |  |   66|  12.2k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1857|  12.2k|  ABSL_SWISSTABLE_ASSERT(!policy.soo_enabled);
  ------------------
  |  |   66|  12.2k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1858|  12.2k|  if (common.capacity() == 1) {
  ------------------
  |  Branch (1858:7): [True: 8.44k, False: 3.76k]
  ------------------
 1859|  8.44k|    if (common.empty()) {
  ------------------
  |  Branch (1859:9): [True: 5.37k, False: 3.07k]
  ------------------
 1860|  5.37k|      IncrementSmallSizeNonSoo(common, policy);
 1861|  5.37k|      if (common.has_infoz()) {
  ------------------
  |  Branch (1861:11): [True: 0, False: 5.37k]
  ------------------
 1862|      0|        common.infoz().RecordInsertMiss(get_hash(common.seed().seed()),
 1863|      0|                                        /*distance_from_desired=*/0);
 1864|      0|      }
 1865|  5.37k|      return common.slot_array(/*capacity=*/1);
 1866|  5.37k|    } else {
 1867|  3.07k|      return Grow1To3AndPrepareInsert(common, policy, get_hash);
 1868|  3.07k|    }
 1869|  8.44k|  }
 1870|       |
 1871|       |  // Growing from 0 to 1 capacity.
 1872|  3.76k|  ABSL_SWISSTABLE_ASSERT(common.capacity() == 0);
  ------------------
  |  |   66|  3.76k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1873|  3.76k|  constexpr size_t kNewCapacity = 1;
 1874|       |
 1875|  3.76k|  common.set_capacity(kNewCapacity);
 1876|  3.76k|  HashtablezInfoHandle infoz;
 1877|  3.76k|  const bool should_sample =
 1878|  3.76k|      policy.is_hashtablez_eligible && ShouldSampleNextTable();
  ------------------
  |  Branch (1878:7): [True: 3.76k, False: 0]
  |  Branch (1878:40): [True: 0, False: 3.76k]
  ------------------
 1879|  3.76k|  if (ABSL_PREDICT_FALSE(should_sample)) {
  ------------------
  |  |  190|  3.76k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 3.76k]
  |  |  |  Branch (190:49): [Folded, False: 3.76k]
  |  |  |  Branch (190:58): [True: 0, False: 3.76k]
  |  |  ------------------
  ------------------
 1880|      0|    infoz = ForcedTrySample(policy.slot_size, policy.key_size,
 1881|      0|                            policy.value_size, policy.soo_capacity());
 1882|      0|  }
 1883|  3.76k|  const bool has_infoz = infoz.IsSampled();
 1884|  3.76k|  void* alloc = policy.get_char_alloc(common);
 1885|       |
 1886|  3.76k|  const auto [new_ctrl, new_slots] =
 1887|  3.76k|      AllocBackingArray(common, policy, kNewCapacity, has_infoz, alloc,
 1888|  3.76k|                        /*blocked_element_count=*/0);
 1889|  3.76k|  common.set_control(new_ctrl);
 1890|       |
 1891|  3.76k|  static_assert(NextCapacity(0) == 1);
 1892|  3.76k|  PrepareInsertCommon(common);
 1893|       |
 1894|  3.76k|  if (ABSL_PREDICT_FALSE(has_infoz)) {
  ------------------
  |  |  190|  3.76k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 3.76k]
  |  |  |  Branch (190:49): [Folded, False: 3.76k]
  |  |  |  Branch (190:58): [True: 0, False: 3.76k]
  |  |  ------------------
  ------------------
 1895|      0|    common.generate_new_seed(/*has_infoz=*/true);
 1896|      0|    ReportSingleGroupTableGrowthToInfoz(common, infoz,
 1897|      0|                                        get_hash(common.seed().seed()));
 1898|      0|  }
 1899|  3.76k|  return new_slots;
 1900|  12.2k|}
_ZN4absl12lts_2026081718container_internal19GetRefForEmptyClassERNS1_12CommonFieldsE:
 2096|  47.1k|void* GetRefForEmptyClass(CommonFields& common) {
 2097|       |  // Empty base optimization typically make the empty base class address to be
 2098|       |  // the same as the first address of the derived class object.
 2099|       |  // But we generally assume that for empty classes we can return any valid
 2100|       |  // pointer.
 2101|  47.1k|  return &common;
 2102|  47.1k|}
_ZN4absl12lts_2026081718container_internal24ReserveTableToFitNewSizeERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEm:
 2346|  11.5k|                              size_t new_size) {
 2347|  11.5k|  new_size =
 2348|  11.5k|      std::min(new_size, MaxValidSize(policy.key_size, policy.slot_size));
 2349|  11.5k|  common.reset_reserved_growth(new_size);
 2350|  11.5k|  common.set_reservation_size(new_size);
 2351|  11.5k|  ABSL_SWISSTABLE_ASSERT(new_size > policy.soo_capacity());
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 2352|  11.5k|  const size_t cap = common.capacity();
 2353|  11.5k|  if (ABSL_PREDICT_TRUE(common.empty() && cap <= policy.soo_capacity())) {
  ------------------
  |  |  191|  23.0k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 11.5k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 11.5k]
  |  |  |  Branch (191:58): [True: 11.5k, False: 0]
  |  |  |  Branch (191:58): [True: 11.5k, False: 0]
  |  |  ------------------
  ------------------
 2354|  11.5k|    return ReserveEmptyNonAllocatedTableToFitNewSize(common, policy, new_size);
 2355|  11.5k|  }
 2356|       |
 2357|      0|  ABSL_SWISSTABLE_ASSERT(!common.empty() || cap > policy.soo_capacity());
  ------------------
  |  |   66|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 2358|      0|  ABSL_SWISSTABLE_ASSERT(cap > 0);
  ------------------
  |  |   66|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 2359|      0|  const size_t max_size_before_growth =
 2360|      0|      IsSmallCapacity(cap)
  ------------------
  |  Branch (2360:7): [True: 0, False: 0]
  ------------------
 2361|      0|          ? cap
 2362|      0|          : common.size() + common.growth_info().GetGrowthLeftTotalSlow(cap);
 2363|      0|  if (new_size <= max_size_before_growth) {
  ------------------
  |  Branch (2363:7): [True: 0, False: 0]
  ------------------
 2364|      0|    return;
 2365|      0|  }
 2366|      0|  ReserveAllocatedTable(common, policy, new_size);
 2367|      0|}
_ZN4absl12lts_2026081718container_internal18PrepareInsertLargeERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEmNS1_18NonIterableBitMaskIjLi16ELi0EEENS1_8FindInfoE:
 2400|  64.1M|                         FindInfo target_group) {
 2401|       |  // NOLINTNEXTLINE(misc-static-assert)
 2402|       |  ABSL_SWISSTABLE_ASSERT(!SwisstableGenerationsEnabled());
  ------------------
  |  |   66|  64.1M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 2403|  64.1M|  return PrepareInsertLargeImpl(common, policy, hash, mask_empty, target_group);
 2404|  64.1M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119Resize1To3NewOffsetEmNS1_12PerTableSeedE:
  113|  3.07k|size_t Resize1To3NewOffset(size_t hash, PerTableSeed seed) {
  114|       |  // After resize from capacity 1 to 3, we always have exactly the slot with
  115|       |  // index 1 occupied, so we need to insert either at index 0 or index 2.
  116|  3.07k|  static_assert(SooSlotIndex() == 1);
  117|  3.07k|  return SingleGroupTableH1(hash, seed) & 2;
  118|  3.07k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_118SingleGroupTableH1EmNS1_12PerTableSeedE:
  108|  8.28k|size_t SingleGroupTableH1(size_t hash, PerTableSeed seed) {
  109|  8.28k|  return hash ^ seed.seed();
  110|  8.28k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_111SlotAddressEPvmm:
  122|  64.2M|inline void* SlotAddress(void* slot_array, size_t slot, size_t slot_size) {
  123|  64.2M|  return static_cast<void*>(static_cast<char*>(slot_array) +
  124|  64.2M|                            (slot * slot_size));
  125|  64.2M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_110RandomSeedEv:
   81|  14.6k|inline size_t RandomSeed() {
   82|  14.6k|  constexpr size_t kIncrement = 0xad53;
   83|  14.6k|#ifdef ABSL_HAVE_THREAD_LOCAL
   84|  14.6k|  static thread_local size_t counter = 0;
   85|  14.6k|  counter += kIncrement;
   86|  14.6k|  size_t value = counter;
   87|       |#else   // ABSL_HAVE_THREAD_LOCAL
   88|       |  static std::atomic<size_t> counter(0);
   89|       |  size_t value = counter.fetch_add(kIncrement, std::memory_order_relaxed);
   90|       |#endif  // ABSL_HAVE_THREAD_LOCAL
   91|  14.6k|  return value ^ static_cast<size_t>(reinterpret_cast<uintptr_t>(&counter));
   92|  14.6k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GetPackedIncrementEmm:
  292|   519k|                                      uint64_t overflow_increment) {
  293|   519k|  return (lower_bound_increment << GrowthInfoAccessor::kLowerBoundShift) +
  294|   519k|         overflow_increment;
  295|   519k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_131GetOverflowGrowthLeftFromPackedEm:
  308|   506k|    uint64_t packed_full_growth_info) {
  309|   506k|  constexpr uint64_t kFullGrowthMask =
  310|   506k|      (uint64_t{1} << GrowthInfoAccessor::kLowerBoundShift) - 1;
  311|   506k|  return packed_full_growth_info & kFullGrowthMask;
  312|   506k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_133GetGrowthLeftLowerBoundFromPackedEm:
  324|   506k|    uint64_t packed_full_growth_info) {
  325|   506k|  return GetGrowthInfoLowerBoundFromPacked(packed_full_growth_info)
  326|   506k|      .GetGrowthLeft();
  327|   506k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_121GetRebalanceIncrementEm:
  301|   506k|    uint64_t overflow_to_lower_bound_size) {
  302|   506k|  return GetPackedIncrement(overflow_to_lower_bound_size,
  303|   506k|                            0u - overflow_to_lower_bound_size);
  304|   506k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_133GetGrowthInfoLowerBoundFromPackedEm:
  317|  1.01M|    uint64_t packed_full_growth_info) {
  318|  1.01M|  return GrowthInfoLowerBound(packed_full_growth_info >>
  319|  1.01M|                              GrowthInfoAccessor::kLowerBoundShift);
  320|  1.01M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119PrepareInsertCommonERNS1_12CommonFieldsE:
  500|  64.1M|void PrepareInsertCommon(CommonFields& common) {
  501|  64.1M|  common.increment_size();
  502|  64.1M|  common.maybe_increment_generation_on_insert();
  503|  64.1M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_135InitializeThreeElementsControlBytesEhhmPNS1_6ctrl_tE:
  759|  3.07k|    h2_t orig_h2, h2_t new_h2, size_t new_offset, ctrl_t* new_ctrl) {
  760|  3.07k|  static constexpr size_t kNewCapacity = NextCapacity(SooCapacity());
  761|  3.07k|  static_assert(kNewCapacity == 3);
  762|  3.07k|  static_assert(is_single_group(kNewCapacity));
  763|  3.07k|  static_assert(SooSlotIndex() == 1);
  764|  3.07k|  ABSL_SWISSTABLE_ASSERT(new_offset == 0 || new_offset == 2);
  ------------------
  |  |   66|  3.07k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  765|       |
  766|  3.07k|  static constexpr uint64_t kEmptyXorSentinel =
  767|  3.07k|      static_cast<uint8_t>(ctrl_t::kEmpty) ^
  768|  3.07k|      static_cast<uint8_t>(ctrl_t::kSentinel);
  769|  3.07k|  static constexpr uint64_t kEmpty64 = static_cast<uint8_t>(ctrl_t::kEmpty);
  770|  3.07k|  static constexpr size_t kMirroredSooSlotIndex =
  771|  3.07k|      SooSlotIndex() + kNewCapacity + 1;
  772|       |  // The first 8 bytes, where SOO slot original and mirrored positions are
  773|       |  // replaced with 0.
  774|       |  // Result will look like: E0ESE0EE
  775|  3.07k|  static constexpr uint64_t kFirstCtrlBytesWithZeroes =
  776|  3.07k|      k8EmptyBytes ^ (kEmpty64 << (8 * SooSlotIndex())) ^
  777|  3.07k|      (kEmptyXorSentinel << (8 * kNewCapacity)) ^
  778|  3.07k|      (kEmpty64 << (8 * kMirroredSooSlotIndex));
  779|       |
  780|  3.07k|  const uint64_t soo_h2 = static_cast<uint64_t>(orig_h2);
  781|  3.07k|  const uint64_t new_h2_xor_empty =
  782|  3.07k|      static_cast<uint64_t>(new_h2 ^ static_cast<uint8_t>(ctrl_t::kEmpty));
  783|       |  // Fill the original and mirrored bytes for SOO slot.
  784|       |  // Result will look like:
  785|       |  // EHESEHEE
  786|       |  // Where H = soo_h2, E = kEmpty, S = kSentinel.
  787|  3.07k|  uint64_t first_ctrl_bytes =
  788|  3.07k|      ((soo_h2 << (8 * SooSlotIndex())) | kFirstCtrlBytesWithZeroes) |
  789|  3.07k|      (soo_h2 << (8 * kMirroredSooSlotIndex));
  790|       |  // Replace original and mirrored empty bytes for the new position.
  791|       |  // Result for new_offset 0 will look like:
  792|       |  // NHESNHEE
  793|       |  // Where H = soo_h2, N = H2(new_hash), E = kEmpty, S = kSentinel.
  794|       |  // Result for new_offset 2 will look like:
  795|       |  // EHNSEHNE
  796|  3.07k|  first_ctrl_bytes ^= (new_h2_xor_empty << (8 * new_offset));
  797|  3.07k|  size_t new_mirrored_offset = new_offset + kNewCapacity + 1;
  798|  3.07k|  first_ctrl_bytes ^= (new_h2_xor_empty << (8 * new_mirrored_offset));
  799|       |
  800|       |  // Fill last bytes with kEmpty.
  801|  3.07k|  std::memset(new_ctrl + kNewCapacity, static_cast<int8_t>(ctrl_t::kEmpty),
  802|  3.07k|              Group::kWidth);
  803|       |  // Overwrite the first 8 bytes with first_ctrl_bytes.
  804|  3.07k|  absl::little_endian::Store64(new_ctrl, first_ctrl_bytes);
  805|       |
  806|       |  // Example for group size 16:
  807|       |  // new_ctrl after 1st memset =      ???EEEEEEEEEEEEEEEE
  808|       |  // new_offset 0:
  809|       |  // new_ctrl after 2nd store  =      NHESNHEEEEEEEEEEEEE
  810|       |  // new_offset 2:
  811|       |  // new_ctrl after 2nd store  =      EHNSEHNEEEEEEEEEEEE
  812|       |
  813|       |  // Example for group size 8:
  814|       |  // new_ctrl after 1st memset =      ???EEEEEEEE
  815|       |  // new_offset 0:
  816|       |  // new_ctrl after 2nd store  =      NHESNHEEEEE
  817|       |  // new_offset 2:
  818|       |  // new_ctrl after 2nd store  =      EHNSEHNEEEE
  819|  3.07k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_17SetCtrlERKNS1_12CommonFieldsEmNS1_6ctrl_tEm:
  532|  63.6M|                    size_t slot_size) {
  533|       |  ABSL_SWISSTABLE_ASSERT(!c.is_small());
  ------------------
  |  |   66|  63.6M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  534|  63.6M|  DoSanitizeOnSetCtrl(c, i, h, slot_size);
  535|  63.6M|  SetCtrlNoSanitizeImpl(c, i, h);
  536|  63.6M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119DoSanitizeOnSetCtrlERKNS1_12CommonFieldsEmNS1_6ctrl_tEm:
  507|  64.2M|                                size_t slot_size) {
  508|  64.2M|  const size_t cap = c.capacity();
  509|  64.2M|  ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  64.2M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  510|  64.2M|  ABSL_SWISSTABLE_ASSERT(i < cap);
  ------------------
  |  |   66|  64.2M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  511|  64.2M|  auto* slot_i = static_cast<const char*>(c.slot_array(cap)) + i * slot_size;
  512|  64.2M|  if (IsFull(h)) {
  ------------------
  |  Branch (512:7): [True: 64.2M, False: 0]
  ------------------
  513|  64.2M|    SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
  514|  64.2M|  } else {
  515|      0|    SanitizerPoisonMemoryRegion(slot_i, slot_size);
  516|      0|  }
  517|  64.2M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_121SetCtrlNoSanitizeImplERKNS1_12CommonFieldsEmNS1_6ctrl_tE:
  523|  63.6M|inline void SetCtrlNoSanitizeImpl(const CommonFields& c, size_t i, ctrl_t h) {
  524|       |  ABSL_SWISSTABLE_ASSERT(i < c.capacity());
  ------------------
  |  |   66|  63.6M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  525|  63.6M|  ctrl_t* ctrl = c.control();
  526|  63.6M|  const size_t cap = c.capacity();
  527|  63.6M|  ctrl[i] = h;
  528|  63.6M|  ctrl[((i - NumClonedBytes()) & cap) + (NumClonedBytes() & cap)] = h;
  529|  63.6M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119SetCtrlInLargeTableERKNS1_12CommonFieldsEmNS1_6ctrl_tEm:
  572|   544k|                                size_t slot_size) {
  573|       |  ABSL_SWISSTABLE_ASSERT(c.capacity() >= Group::kWidth - 1);
  ------------------
  |  |   66|   544k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  574|   544k|  DoSanitizeOnSetCtrl(c, i, h, slot_size);
  575|   544k|  ctrl_t* ctrl = c.control();
  576|   544k|  ctrl[i] = h;
  577|   544k|  ctrl[((i - NumClonedBytes()) & c.capacity()) + NumClonedBytes()] = h;
  578|   544k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_19ResetCtrlERNS1_12CommonFieldsEmm:
  730|  13.7k|               size_t blocked_element_count) {
  731|  13.7k|  ABSL_SWISSTABLE_ASSERT(IsCapacityValidForBlockedElements(common.capacity()) ||
  ------------------
  |  |   66|  13.7k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  732|  13.7k|                         blocked_element_count == 0);
  733|  13.7k|  const size_t capacity = common.capacity();
  734|  13.7k|  ctrl_t* ctrl = common.control();
  735|  13.7k|  static constexpr size_t kTwoGroupCapacity = 2 * Group::kWidth - 1;
  736|  13.7k|  if (ABSL_PREDICT_TRUE(capacity <= kTwoGroupCapacity)) {
  ------------------
  |  |  191|  13.7k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 12.5k, False: 1.20k]
  |  |  |  Branch (191:48): [Folded, False: 13.7k]
  |  |  |  Branch (191:57): [True: 12.5k, False: 1.20k]
  |  |  ------------------
  ------------------
  737|  12.5k|    if (IsSmallCapacity(capacity)) return;
  ------------------
  |  Branch (737:9): [True: 5.43k, False: 7.15k]
  ------------------
  738|  7.15k|    std::memset(ctrl, static_cast<int8_t>(ctrl_t::kEmpty), Group::kWidth);
  739|  7.15k|    std::memset(ctrl + capacity, static_cast<int8_t>(ctrl_t::kEmpty),
  740|  7.15k|                Group::kWidth);
  741|  7.15k|    if (capacity == kTwoGroupCapacity) {
  ------------------
  |  Branch (741:9): [True: 727, False: 6.42k]
  ------------------
  742|    727|      std::memset(ctrl + Group::kWidth, static_cast<int8_t>(ctrl_t::kEmpty),
  743|    727|                  Group::kWidth);
  744|    727|    }
  745|  7.15k|  } else {
  746|  1.20k|    std::memset(ctrl, static_cast<int8_t>(ctrl_t::kEmpty),
  747|  1.20k|                capacity + 1 + NumClonedBytes());
  748|  1.20k|  }
  749|  8.35k|  ctrl[capacity] = ctrl_t::kSentinel;
  750|  8.35k|  SanitizerPoisonMemoryRegion(common.slot_array(capacity),
  751|  8.35k|                              slot_size * (capacity - blocked_element_count));
  752|  8.35k|  BlockControlBytes(common, blocked_element_count);
  753|  8.35k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117BlockControlBytesERNS1_12CommonFieldsEm:
  585|  8.35k|void BlockControlBytes(CommonFields& common, size_t blocked_element_count) {
  586|  8.35k|  const size_t capacity = common.capacity();
  587|  25.6k|  while (blocked_element_count > 0) {
  ------------------
  |  Branch (587:10): [True: 17.3k, False: 8.35k]
  ------------------
  588|  17.3k|    BlockCtrl(common, capacity - blocked_element_count);
  589|  17.3k|    --blocked_element_count;
  590|  17.3k|  }
  591|  8.35k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_19BlockCtrlERKNS1_12CommonFieldsEm:
  546|  17.3k|inline void BlockCtrl(const CommonFields& c, size_t i) {
  547|       |  ABSL_SWISSTABLE_ASSERT(!c.is_small());
  ------------------
  |  |   66|  17.3k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  548|  17.3k|  SetCtrlNoSanitizeImpl(c, i, ctrl_t::kSentinel);
  549|  17.3k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_115ResetGrowthLeftENS1_18GrowthInfoAccessorEmm:
  470|  34.0k|                     size_t occupied_elements) {
  471|  34.0k|  growth_info.InitGrowthLeftNoDeleted(
  472|  34.0k|      CapacityToGrowth(capacity) - occupied_elements, capacity);
  473|  34.0k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117AllocBackingArrayERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEmbPvm:
 1085|  44.0k|                                   void* alloc, size_t blocked_element_count) {
 1086|  44.0k|  RawHashSetLayout layout(new_capacity, policy.slot_size, policy.slot_align,
 1087|  44.0k|                          has_infoz, blocked_element_count);
 1088|       |  // Perform a direct call in the common case to allow for profile-guided
 1089|       |  // heap optimization (PGHO) to understand which allocation function is used.
 1090|  44.0k|  constexpr size_t kDefaultAlignment = BackingArrayAlignment(alignof(size_t));
 1091|  44.0k|  char* mem = static_cast<char*>(
 1092|  44.0k|      ABSL_PREDICT_TRUE(
  ------------------
  |  |  191|  44.0k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 44.0k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 44.0k]
  |  |  |  Branch (191:57): [True: 44.0k, False: 0]
  |  |  ------------------
  ------------------
 1093|  44.0k|          policy.alloc ==
 1094|  44.0k|          (&AllocateBackingArray<kDefaultAlignment, std::allocator<char>>))
 1095|  44.0k|          ? AllocateBackingArray<kDefaultAlignment, std::allocator<char>>(
 1096|  44.0k|                alloc, layout.alloc_size())
 1097|  44.0k|          : policy.alloc(alloc, layout.alloc_size()));
 1098|  44.0k|  const GenerationType old_generation = common.generation();
 1099|  44.0k|  common.set_generation_ptr(
 1100|  44.0k|      reinterpret_cast<GenerationType*>(mem + layout.generation_offset()));
 1101|  44.0k|  common.set_generation(NextGeneration(old_generation));
 1102|       |
 1103|  44.0k|  return {reinterpret_cast<ctrl_t*>(mem + layout.control_offset()),
 1104|  44.0k|          mem + layout.slot_offset()};
 1105|  44.0k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_124IncrementSmallSizeNonSooERNS1_12CommonFieldsERKNS1_15PolicyFunctionsE:
 1698|  5.37k|                              const PolicyFunctions& __restrict policy) {
 1699|       |  ABSL_SWISSTABLE_ASSERT(common.is_small());
  ------------------
  |  |   66|  5.37k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1700|  5.37k|  common.increment_size();
 1701|  5.37k|  SanitizerUnpoisonMemoryRegion(
 1702|  5.37k|      SingleSlotAddress</*kSooEnabled=*/false>(common), policy.slot_size);
 1703|  5.37k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_124Grow1To3AndPrepareInsertERNS1_12CommonFieldsERKNS1_15PolicyFunctionsENS0_11FunctionRefIFmmEEE:
 1717|  3.07k|                               absl::FunctionRef<size_t(size_t)> get_hash) {
 1718|       |  // TODO(b/413062340): Refactor to reuse more code with
 1719|       |  // GrowSooTableToNextCapacityAndPrepareInsert.
 1720|  3.07k|  ABSL_SWISSTABLE_ASSERT(common.capacity() == 1);
  ------------------
  |  |   66|  3.07k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1721|  3.07k|  ABSL_SWISSTABLE_ASSERT(!common.empty());
  ------------------
  |  |   66|  3.07k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1722|  3.07k|  ABSL_SWISSTABLE_ASSERT(!policy.soo_enabled);
  ------------------
  |  |   66|  3.07k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1723|       |  // 1-element tables can't have any blocked elements.
 1724|  3.07k|  ABSL_SWISSTABLE_ASSERT(common.blocked_element_count() == 0);
  ------------------
  |  |   66|  3.07k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1725|  3.07k|  constexpr size_t kOldCapacity = 1;
 1726|  3.07k|  constexpr size_t kNewCapacity = NextCapacity(kOldCapacity);
 1727|  3.07k|  void* old_slots = common.slot_array(kOldCapacity);
 1728|       |
 1729|  3.07k|  const size_t slot_size = policy.slot_size;
 1730|  3.07k|  const size_t slot_align = policy.slot_align;
 1731|  3.07k|  void* alloc = policy.get_char_alloc(common);
 1732|  3.07k|  HashtablezInfoHandle infoz = common.infoz();
 1733|  3.07k|  const bool has_infoz = infoz.IsSampled();
 1734|  3.07k|  common.set_capacity(kNewCapacity);
 1735|       |
 1736|  3.07k|  const auto [new_ctrl, new_slots] =
 1737|  3.07k|      AllocBackingArray(common, policy, kNewCapacity, has_infoz, alloc,
 1738|  3.07k|                        /*blocked_element_count=*/0);
 1739|  3.07k|  common.set_control(new_ctrl);
 1740|  3.07k|  SanitizerPoisonMemoryRegion(new_slots, kNewCapacity * slot_size);
 1741|       |
 1742|  3.07k|  if (ABSL_PREDICT_TRUE(!has_infoz)) {
  ------------------
  |  |  191|  3.07k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 3.07k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 3.07k]
  |  |  |  Branch (191:57): [True: 3.07k, False: 0]
  |  |  ------------------
  ------------------
 1743|       |    // When we're sampled, we already have a seed.
 1744|  3.07k|    common.generate_new_seed(/*has_infoz=*/false);
 1745|  3.07k|  }
 1746|  3.07k|  const size_t new_hash = get_hash(common.seed().seed());
 1747|  3.07k|  h2_t new_h2 = H2(new_hash);
 1748|  3.07k|  size_t orig_hash =
 1749|  3.07k|      policy.hash_slot(policy.hash_fn(common), old_slots, common.seed().seed());
 1750|  3.07k|  size_t offset = Resize1To3NewOffset(new_hash, common.seed());
 1751|  3.07k|  InitializeThreeElementsControlBytes(H2(orig_hash), new_h2, offset, new_ctrl);
 1752|       |
 1753|  3.07k|  void* old_element_target = NextSlot(new_slots, slot_size);
 1754|  3.07k|  SanitizerUnpoisonMemoryRegion(old_element_target, slot_size);
 1755|  3.07k|  policy.transfer_n(&common, old_element_target, old_slots, 1);
 1756|       |
 1757|  3.07k|  void* new_element_target_slot = SlotAddress(new_slots, offset, slot_size);
 1758|  3.07k|  SanitizerUnpoisonMemoryRegion(new_element_target_slot, slot_size);
 1759|       |
 1760|  3.07k|  policy.dealloc(alloc, kOldCapacity,
 1761|       |                 // old_slots == old_ctrl in case of capacity == 1.
 1762|  3.07k|                 static_cast<ctrl_t*>(old_slots),
 1763|  3.07k|                 slot_size, slot_align, has_infoz,
 1764|  3.07k|                 /*blocked_element_count=*/0);
 1765|  3.07k|  PrepareInsertCommon(common);
 1766|  3.07k|  ABSL_SWISSTABLE_ASSERT(common.size() == 2);
  ------------------
  |  |   66|  3.07k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1767|  3.07k|  GetGrowthInfoFromControl(new_ctrl).InitGrowthLeftNoDeleted(kNewCapacity - 2,
 1768|  3.07k|                                                             kNewCapacity);
 1769|       |
 1770|  3.07k|  if (ABSL_PREDICT_FALSE(has_infoz)) {
  ------------------
  |  |  190|  3.07k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 3.07k]
  |  |  |  Branch (190:49): [Folded, False: 3.07k]
  |  |  |  Branch (190:58): [True: 0, False: 3.07k]
  |  |  ------------------
  ------------------
 1771|      0|    ReportSingleGroupTableGrowthToInfoz(common, infoz, new_hash);
 1772|      0|  }
 1773|  3.07k|  return new_element_target_slot;
 1774|  3.07k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_18NextSlotEPvmm:
  129|  8.28k|inline void* NextSlot(void* slot, size_t slot_size, size_t i = 1) {
  130|  8.28k|  return reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(slot) +
  131|  8.28k|                                 slot_size * i);
  132|  8.28k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_125SetCtrlInSingleGroupTableERKNS1_12CommonFieldsEmhm:
  565|  5.20k|                                      size_t slot_size) {
  566|  5.20k|  SetCtrlInSingleGroupTable(c, i, static_cast<ctrl_t>(h), slot_size);
  567|  5.20k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_125SetCtrlInSingleGroupTableERKNS1_12CommonFieldsEmNS1_6ctrl_tEm:
  554|  5.20k|                                      size_t slot_size) {
  555|  5.20k|  const size_t cap = c.capacity();
  556|  5.20k|  ABSL_SWISSTABLE_ASSERT(!c.is_small());
  ------------------
  |  |   66|  5.20k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  557|       |  ABSL_SWISSTABLE_ASSERT(is_single_group(cap));
  ------------------
  |  |   66|  5.20k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  558|  5.20k|  DoSanitizeOnSetCtrl(c, i, h, slot_size);
  559|  5.20k|  ctrl_t* ctrl = c.control();
  560|  5.20k|  ctrl[i] = h;
  561|  5.20k|  ctrl[i + cap + 1] = h;
  562|  5.20k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119find_first_non_fullERKNS1_12CommonFieldsEm:
  207|   516k|FindInfo find_first_non_full(const CommonFields& common, size_t hash) {
  208|   516k|  return find_first_non_full_from_h1(common.control(), H1(hash),
  209|   516k|                                     common.capacity_impl());
  210|   516k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_127find_first_non_full_from_h1EPKNS1_6ctrl_tEmNS1_21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EEE:
  190|   544k|                                     HashtableCapacity capacity) {
  191|   544k|  const size_t cap = capacity.capacity();
  192|   544k|  auto seq = probe_h1(ProbeCapacity{cap}, h1);
  193|   544k|  if (IsEmptyOrDeleted(ctrl[seq.offset()])) {
  ------------------
  |  Branch (193:7): [True: 208k, False: 336k]
  ------------------
  194|   208k|    return {seq.offset(), /*probe_length=*/0};
  195|   208k|  }
  196|   336k|  auto mask = probe_till_first_non_full_group(ctrl, seq, cap);
  197|   336k|  return {seq.offset(mask.LowestBitSet()), seq.index()};
  198|   544k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_131probe_till_first_non_full_groupEPKNS1_6ctrl_tERNS1_9probe_seqILm16EEEm:
  177|   336k|    [[maybe_unused]] size_t capacity) {
  178|   393k|  while (true) {
  ------------------
  |  Branch (178:10): [True: 393k, Folded]
  ------------------
  179|   393k|    GroupFullEmptyOrDeleted g{ctrl + seq.offset()};
  180|   393k|    auto mask = g.MaskEmptyOrDeleted();
  181|   393k|    if (mask) {
  ------------------
  |  Branch (181:9): [True: 336k, False: 56.9k]
  ------------------
  182|   336k|      return mask;
  183|   336k|    }
  184|  56.9k|    seq.next();
  185|       |    ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity && "full table!");
  ------------------
  |  |   66|  56.9k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  186|  56.9k|  }
  187|   336k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_17SetCtrlERKNS1_12CommonFieldsEmhm:
  538|  63.6M|inline void SetCtrl(const CommonFields& c, size_t i, h2_t h, size_t slot_size) {
  539|  63.6M|  SetCtrl(c, i, static_cast<ctrl_t>(h), slot_size);
  540|  63.6M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_115ValidateMaxSizeEmmm:
   71|  11.5k|                     [[maybe_unused]] size_t slot_size) {
   72|       |  ABSL_SWISSTABLE_ASSERT(size <= MaxValidSize(key_size, slot_size));
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
   73|  11.5k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_132ResizeEmptyNonAllocatedTableImplERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEmmb:
 1111|  11.5k|                                      bool force_infoz) {
 1112|  11.5k|  ABSL_SWISSTABLE_ASSERT(IsValidCapacity(new_capacity));
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1113|  11.5k|  ABSL_SWISSTABLE_ASSERT(new_capacity > policy.soo_capacity());
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1114|  11.5k|  ABSL_SWISSTABLE_ASSERT(!force_infoz || policy.soo_enabled);
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1115|  11.5k|  ABSL_SWISSTABLE_ASSERT(common.capacity() == policy.soo_capacity());
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1116|  11.5k|  ABSL_SWISSTABLE_ASSERT(common.empty());
  ------------------
  |  |   66|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1117|  11.5k|  const size_t slot_size = policy.slot_size;
 1118|  11.5k|  HashtablezInfoHandle infoz;
 1119|  11.5k|  const bool should_sample =
 1120|  11.5k|      policy.is_hashtablez_eligible && (force_infoz || ShouldSampleNextTable());
  ------------------
  |  Branch (1120:7): [True: 11.5k, False: 0]
  |  Branch (1120:41): [True: 0, False: 11.5k]
  |  Branch (1120:56): [True: 0, False: 11.5k]
  ------------------
 1121|  11.5k|  if (ABSL_PREDICT_FALSE(should_sample)) {
  ------------------
  |  |  190|  11.5k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 11.5k]
  |  |  |  Branch (190:49): [Folded, False: 11.5k]
  |  |  |  Branch (190:58): [True: 0, False: 11.5k]
  |  |  ------------------
  ------------------
 1122|      0|    infoz = ForcedTrySample(slot_size, policy.key_size, policy.value_size,
 1123|      0|                            policy.soo_capacity());
 1124|      0|  }
 1125|  11.5k|  const bool has_infoz = infoz.IsSampled();
 1126|  11.5k|  void* alloc = policy.get_char_alloc(common);
 1127|       |
 1128|  11.5k|  common.set_capacity(new_capacity);
 1129|  11.5k|  common.init_blocked_element_count(blocked_element_count);
 1130|  11.5k|  const auto [new_ctrl, new_slots] = AllocBackingArray(
 1131|  11.5k|      common, policy, new_capacity, has_infoz, alloc, blocked_element_count);
 1132|  11.5k|  common.set_control(new_ctrl);
 1133|  11.5k|  common.generate_new_seed(has_infoz);
 1134|       |
 1135|  11.5k|  ResetCtrl(common, slot_size, blocked_element_count);
 1136|  11.5k|  if (GrowthInfoSizeForCapacity(new_capacity) > 0) {
  ------------------
  |  Branch (1136:7): [True: 6.11k, False: 5.43k]
  ------------------
 1137|  6.11k|    ResetGrowthLeft(GetGrowthInfoFromControl(new_ctrl), new_capacity,
 1138|  6.11k|                    blocked_element_count);
 1139|  6.11k|  }
 1140|       |
 1141|  11.5k|  if (ABSL_PREDICT_FALSE(has_infoz)) {
  ------------------
  |  |  190|  11.5k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 11.5k]
  |  |  |  Branch (190:49): [Folded, False: 11.5k]
  |  |  |  Branch (190:58): [True: 0, False: 11.5k]
  |  |  ------------------
  ------------------
 1142|      0|    ReportResizeToInfoz(common, infoz, 0);
 1143|      0|  }
 1144|  11.5k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_141ReserveEmptyNonAllocatedTableToFitNewSizeERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEm:
 2045|  11.5k|    size_t new_size) {
 2046|  11.5k|  ValidateMaxSize(new_size, policy.key_size, policy.slot_size);
 2047|  11.5k|  ABSL_ASSUME(new_size > 0);
  ------------------
  |  |  272|  11.5k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2048|  11.5k|  const size_t new_capacity = SizeToCapacity(new_size);
 2049|  11.5k|  ResizeEmptyNonAllocatedTableImpl(
 2050|  11.5k|      common, policy, new_capacity,
 2051|  11.5k|      BlockedElementCountForReservedTable(new_capacity, new_size),
 2052|  11.5k|      /*force_infoz=*/false);
 2053|       |  // This is after resize, to ensure that we have completed the allocation
 2054|       |  // and have potentially sampled the hashtable.
 2055|  11.5k|  common.infoz().RecordReservation(new_size);
 2056|  11.5k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_135BlockedElementCountForReservedTableEmm:
 2025|  11.5k|                                           size_t reserved_size) {
 2026|  11.5k|  if (!IsCapacityValidForBlockedElements(capacity)) {
  ------------------
  |  Branch (2026:7): [True: 5.43k, False: 6.11k]
  ------------------
 2027|  5.43k|    return 0;
 2028|  5.43k|  }
 2029|  6.11k|  const size_t blocked_elements = CapacityToGrowth(capacity) - reserved_size;
 2030|  6.11k|  if (is_single_group(capacity)) {
  ------------------
  |  Branch (2030:7): [True: 4.79k, False: 1.31k]
  ------------------
 2031|       |    // Single group tables never probes, so we can block all the slots.
 2032|  4.79k|    return blocked_elements;
 2033|  4.79k|  }
 2034|  1.31k|  return (std::min)(blocked_elements, kMaxBlockedElementsForLargeTables);
 2035|  6.11k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_122PrepareInsertLargeImplERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEmNS1_18NonIterableBitMaskIjLi16ELi0EEENS1_8FindInfoE:
 2374|  64.1M|                             FindInfo target_group) {
 2375|  64.1M|  ABSL_SWISSTABLE_ASSERT(!common.is_small());
  ------------------
  |  |   66|  64.1M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 2376|  64.1M|  GrowthInfoAccessor growth_info = common.growth_info();
 2377|       |  // When there are no deleted slots in the table
 2378|       |  // and growth_left is positive, we can insert at the first
 2379|       |  // empty slot in the probe sequence (target).
 2380|  64.1M|  if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  190|  64.1M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 521k, False: 63.6M]
  |  |  |  Branch (190:49): [Folded, False: 64.1M]
  |  |  |  Branch (190:58): [True: 521k, False: 63.6M]
  |  |  ------------------
  ------------------
 2381|  64.1M|          !growth_info.GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft())) {
 2382|   521k|    return PrepareInsertLargeSlow(common, policy, hash);
 2383|   521k|  }
 2384|  63.6M|  PrepareInsertCommon(common);
 2385|  63.6M|  growth_info.OverwriteEmptyAsFull();
 2386|  63.6M|  const size_t cap = common.capacity();
 2387|  63.6M|  ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  63.6M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2388|  63.6M|  target_group.offset += mask_empty.LowestBitSet();
 2389|  63.6M|  target_group.offset &= cap;
 2390|  63.6M|  SetCtrl(common, target_group.offset, H2(hash), policy.slot_size);
 2391|  63.6M|  common.infoz().RecordInsertMiss(hash, target_group.probe_length);
 2392|  63.6M|  return SlotAddress(common.slot_array(cap), target_group.offset,
 2393|  63.6M|                     policy.slot_size);
 2394|  64.1M|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_122PrepareInsertLargeSlowERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEm:
 1970|   521k|                             size_t hash) {
 1971|   521k|  GrowthInfoAccessor growth_info = common.growth_info();
 1972|   521k|  const size_t cap = common.capacity();
 1973|   521k|  ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|   521k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1974|   521k|  GrowthInfoLowerBound growth_info_lower_bound =
 1975|   521k|      growth_info.RebalanceGrowthLeftLowerBound(cap);
 1976|   521k|  if (ABSL_PREDICT_TRUE(
  ------------------
  |  |  191|   521k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 25.6k, False: 495k]
  |  |  |  Branch (191:48): [Folded, False: 521k]
  |  |  |  Branch (191:57): [True: 25.6k, False: 495k]
  |  |  ------------------
  ------------------
 1977|   521k|          growth_info_lower_bound.HasNoGrowthLeftAndNoDeleted())) {
 1978|       |    // Table without deleted slots (>95% cases) that needs to be resized.
 1979|  25.6k|    return GrowToNextCapacityAndPrepareInsert(common, policy, hash);
 1980|  25.6k|  }
 1981|   495k|  if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  190|   495k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 495k]
  |  |  |  Branch (190:49): [Folded, False: 495k]
  |  |  |  Branch (190:58): [True: 0, False: 495k]
  |  |  ------------------
  ------------------
 1982|   495k|          growth_info_lower_bound.HasNoGrowthLeftAndHaveDeleted())) {
 1983|       |    // Table with deleted slots that needs to be rehashed or resized.
 1984|      0|    return RehashOrGrowToNextCapacityAndPrepareInsert(common, policy, hash);
 1985|      0|  }
 1986|       |  // Covers two cases:
 1987|       |  // 1. Table with deleted slots that has space for the inserting element.
 1988|       |  // 2. Table without deleted slots that has space and GrowthInfoView was
 1989|       |  //    rebalanced.
 1990|   495k|  FindInfo target = find_first_non_full(common, hash);
 1991|   495k|  PrepareInsertCommon(common);
 1992|   495k|  growth_info.OverwriteControlAsFull(common.control()[target.offset]);
 1993|   495k|  SetCtrlInLargeTable(common, target.offset, H2(hash), policy.slot_size);
 1994|   495k|  common.infoz().RecordInsertMiss(hash, target.probe_length);
 1995|   495k|  return SlotAddress(common.slot_array(cap), target.offset, policy.slot_size);
 1996|   495k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_134GrowToNextCapacityAndPrepareInsertERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEm:
 1780|  25.6k|    size_t new_hash) {
 1781|  25.6k|  const size_t old_capacity = common.capacity();
 1782|  25.6k|  ABSL_SWISSTABLE_ASSERT(
  ------------------
  |  |   66|  25.6k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1783|  25.6k|      common.growth_info().GetGrowthLeftTotalSlow(old_capacity) == 0);
 1784|  25.6k|  ABSL_SWISSTABLE_ASSERT(old_capacity > policy.soo_capacity());
  ------------------
  |  |   66|  25.6k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1785|  25.6k|  ABSL_SWISSTABLE_ASSERT(!IsSmallCapacity(old_capacity));
  ------------------
  |  |   66|  25.6k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1786|  25.6k|  ABSL_ASSUME(old_capacity > kMaxSmallCapacity);
  ------------------
  |  |  272|  25.6k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1787|       |
 1788|  25.6k|  const size_t new_capacity = NextCapacity(old_capacity);
 1789|  25.6k|  ctrl_t* old_ctrl = common.control();
 1790|  25.6k|  void* old_slots = common.slot_array(old_capacity);
 1791|  25.6k|  size_t old_blocked_element_count = common.blocked_element_count();
 1792|       |
 1793|  25.6k|  HashtablezInfoHandle infoz = common.infoz();
 1794|  25.6k|  const bool has_infoz = infoz.IsSampled();
 1795|  25.6k|  common.set_capacity(new_capacity);
 1796|  25.6k|  common.set_blocked_element_count_to_zero();
 1797|  25.6k|  const size_t slot_size = policy.slot_size;
 1798|  25.6k|  const size_t slot_align = policy.slot_align;
 1799|  25.6k|  void* alloc = policy.get_char_alloc(common);
 1800|       |
 1801|  25.6k|  const auto [new_ctrl, new_slots] =
 1802|  25.6k|      AllocBackingArray(common, policy, new_capacity, has_infoz, alloc,
 1803|  25.6k|                        /*blocked_element_count=*/0);
 1804|  25.6k|  common.set_control(new_ctrl);
 1805|  25.6k|  SanitizerPoisonMemoryRegion(new_slots, new_capacity * slot_size);
 1806|       |
 1807|  25.6k|  h2_t new_h2 = H2(new_hash);
 1808|  25.6k|  size_t total_probe_length = 0;
 1809|  25.6k|  FindInfo find_info;
 1810|  25.6k|  if (ABSL_PREDICT_TRUE(is_single_group(new_capacity))) {
  ------------------
  |  |  191|  25.6k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 5.20k, False: 20.4k]
  |  |  |  Branch (191:48): [Folded, False: 25.6k]
  |  |  |  Branch (191:57): [True: 5.20k, False: 20.4k]
  |  |  ------------------
  ------------------
 1811|  5.20k|    size_t offset;
 1812|  5.20k|    const size_t old_size = common.size();
 1813|  5.20k|    GrowIntoSingleGroupShuffleControlBytes(old_ctrl, old_capacity,
 1814|  5.20k|                                           old_blocked_element_count, new_ctrl,
 1815|  5.20k|                                           new_capacity);
 1816|       |    // We put the new element either at the beginning or at the end of the
 1817|       |    // table with approximately equal probability.
 1818|  5.20k|    offset =
 1819|  5.20k|        SingleGroupTableH1(new_hash, common.seed()) & 1 ? 0 : new_capacity - 1;
  ------------------
  |  Branch (1819:9): [True: 2.62k, False: 2.57k]
  ------------------
 1820|       |
 1821|  5.20k|    ABSL_SWISSTABLE_ASSERT(IsEmpty(new_ctrl[offset]));
  ------------------
  |  |   66|  5.20k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1822|  5.20k|    SetCtrlInSingleGroupTable(common, offset, new_h2, policy.slot_size);
 1823|  5.20k|    find_info = FindInfo{offset, 0};
 1824|       |    // Single group tables have all slots full on resize. So we can transfer
 1825|       |    // all slots without checking the control bytes.
 1826|  5.20k|    ABSL_SWISSTABLE_ASSERT(common.size() + old_blocked_element_count ==
  ------------------
  |  |   66|  5.20k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1827|  5.20k|                           old_capacity);
 1828|  5.20k|    void* target = NextSlot(new_slots, slot_size);
 1829|  5.20k|    SanitizerUnpoisonMemoryRegion(target, old_size * slot_size);
 1830|  5.20k|    policy.transfer_n(&common, target, old_slots, old_size);
 1831|  20.4k|  } else {
 1832|  20.4k|    total_probe_length =
 1833|  20.4k|        GrowToNextCapacityDispatch(common, policy, old_ctrl, old_slots);
 1834|  20.4k|    find_info = find_first_non_full(common, new_hash);
 1835|  20.4k|    SetCtrlInLargeTable(common, find_info.offset, new_h2, policy.slot_size);
 1836|  20.4k|  }
 1837|  25.6k|  ABSL_SWISSTABLE_ASSERT(old_capacity > policy.soo_capacity());
  ------------------
  |  |   66|  25.6k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1838|  25.6k|  (*policy.dealloc)(alloc, old_capacity, old_ctrl, slot_size, slot_align,
 1839|  25.6k|                    has_infoz, old_blocked_element_count);
 1840|  25.6k|  PrepareInsertCommon(common);
 1841|  25.6k|  ResetGrowthLeft(GetGrowthInfoFromControl(new_ctrl), new_capacity,
 1842|  25.6k|                  common.size());
 1843|       |
 1844|  25.6k|  if (ABSL_PREDICT_FALSE(has_infoz)) {
  ------------------
  |  |  190|  25.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 25.6k]
  |  |  |  Branch (190:49): [Folded, False: 25.6k]
  |  |  |  Branch (190:58): [True: 0, False: 25.6k]
  |  |  ------------------
  ------------------
 1845|      0|    ReportGrowthToInfoz(common, infoz, new_hash, total_probe_length,
 1846|      0|                        find_info.probe_length);
 1847|      0|  }
 1848|  25.6k|  return SlotAddress(new_slots, find_info.offset, policy.slot_size);
 1849|  25.6k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_138GrowIntoSingleGroupShuffleControlBytesEPNS1_6ctrl_tEmmS4_m:
 1233|  5.20k|                                            size_t new_capacity) {
 1234|  5.20k|  ABSL_SWISSTABLE_ASSERT(is_single_group(new_capacity));
  ------------------
  |  |   66|  5.20k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1235|  5.20k|  constexpr size_t kHalfWidth = Group::kWidth / 2;
 1236|  5.20k|  ABSL_ASSUME(old_capacity < kHalfWidth);
  ------------------
  |  |  272|  5.20k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1237|  5.20k|  ABSL_ASSUME(old_capacity > 0);
  ------------------
  |  |  272|  5.20k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1238|  5.20k|  static_assert(Group::kWidth == 8 || Group::kWidth == 16,
 1239|  5.20k|                "Group size is not supported.");
 1240|       |
 1241|       |  // NOTE: operations are done with compile time known size = 8.
 1242|       |  // Compiler optimizes that into single ASM operation.
 1243|       |
 1244|       |  // Load the bytes from old_capacity. This contains
 1245|       |  // - the sentinel byte
 1246|       |  // - all the old control bytes
 1247|       |  // - the rest is filled with kEmpty bytes
 1248|       |  // Example:
 1249|       |  // old_ctrl =     012S012EEEEEEEEE...
 1250|       |  // copied_bytes = S012EEEE
 1251|       |  // Example with blocked elements:
 1252|       |  // old_ctrl =     01SS01SEEEEEEEEE...
 1253|       |  // copied_bytes = S01SEEEE
 1254|  5.20k|  uint64_t copied_bytes = absl::little_endian::Load64(old_ctrl + old_capacity);
 1255|       |
 1256|       |  // We change the sentinel byte to kEmpty before storing to both the start of
 1257|       |  // the new_ctrl, and past the end of the new_ctrl later for the new cloned
 1258|       |  // bytes. Note that this is faster than setting the sentinel byte to kEmpty
 1259|       |  // after the copy directly in new_ctrl because we are limited on store
 1260|       |  // bandwidth.
 1261|  5.20k|  static constexpr uint64_t kEmptyXorSentinel =
 1262|  5.20k|      static_cast<uint8_t>(ctrl_t::kEmpty) ^
 1263|  5.20k|      static_cast<uint8_t>(ctrl_t::kSentinel);
 1264|       |
 1265|       |  // Replace the first byte kSentinel with kEmpty.
 1266|       |  // Resulting bytes will be shifted by one byte old control blocks.
 1267|       |  // Example:
 1268|       |  // old_ctrl = 012S012EEEEEEEEE...
 1269|       |  // before =   S012EEEE
 1270|       |  // after  =   E012EEEE
 1271|  5.20k|  copied_bytes ^= kEmptyXorSentinel;
 1272|       |
 1273|  5.20k|  if (ABSL_PREDICT_FALSE(old_blocked_element_count > 0)) {
  ------------------
  |  |  190|  5.20k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.20k]
  |  |  |  Branch (190:49): [Folded, False: 5.20k]
  |  |  |  Branch (190:58): [True: 0, False: 5.20k]
  |  |  ------------------
  ------------------
 1274|       |    // Replacing blocked sentinel elements with kEmpty.
 1275|      0|    static constexpr uint64_t kAllBytesEmptyXorSentinel =
 1276|      0|        kEmptyXorSentinel * uint64_t{0x0101010101010101};
 1277|      0|    uint64_t blocked_mask = kAllBytesEmptyXorSentinel;
 1278|       |    // Keep old_blocked_element_count bytes in the mask.
 1279|      0|    blocked_mask >>= 64 - old_blocked_element_count * 8;
 1280|       |    // Shift the mask to the start of the blocked elements bytes.
 1281|      0|    blocked_mask <<= (old_capacity - old_blocked_element_count + 1) * 8;
 1282|       |    // Example with blocked elements:
 1283|       |    // old_ctrl = 0SSS0SSEEEEEEEEE...
 1284|       |    // before =   E0SSEEEE
 1285|       |    // after  =   E0EEEEEE
 1286|      0|    copied_bytes ^= blocked_mask;
 1287|      0|  }
 1288|       |
 1289|  5.20k|  if (Group::kWidth == 8) {
  ------------------
  |  Branch (1289:7): [Folded, False: 5.20k]
  ------------------
 1290|       |    // With group size 8, we can grow with two write operations.
 1291|      0|    ABSL_SWISSTABLE_ASSERT(old_capacity < 8 &&
  ------------------
  |  |   66|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1292|      0|                           "old_capacity is too large for group size 8");
 1293|      0|    absl::little_endian::Store64(new_ctrl, copied_bytes);
 1294|       |
 1295|      0|    static constexpr uint64_t kSentinal64 =
 1296|      0|        static_cast<uint8_t>(ctrl_t::kSentinel);
 1297|       |
 1298|       |    // Prepend kSentinel byte to the beginning of copied_bytes.
 1299|       |    // We have maximum 3 non-empty bytes at the beginning of copied_bytes for
 1300|       |    // group size 8.
 1301|       |    // Example:
 1302|       |    // old_ctrl = 012S012EEEE
 1303|       |    // before =   E012EEEE
 1304|       |    // after  =   SE012EEE
 1305|      0|    copied_bytes = (copied_bytes << 8) ^ kSentinal64;
 1306|      0|    absl::little_endian::Store64(new_ctrl + new_capacity, copied_bytes);
 1307|       |    // Example for capacity 3:
 1308|       |    // old_ctrl = 012S012EEEE
 1309|       |    // After the first store:
 1310|       |    //           >!
 1311|       |    // new_ctrl = E012EEEE???????
 1312|       |    // After the second store:
 1313|       |    //                  >!
 1314|       |    // new_ctrl = E012EEESE012EEE
 1315|      0|    return;
 1316|      0|  }
 1317|       |
 1318|  5.20k|  ABSL_SWISSTABLE_ASSERT(Group::kWidth == 16);  // NOLINT(misc-static-assert)
  ------------------
  |  |   66|  5.20k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1319|       |
 1320|       |  // Fill the second half of the main control bytes with kEmpty.
 1321|       |  // For small capacity that may write into mirrored control bytes.
 1322|       |  // It is fine as we will overwrite all the bytes later.
 1323|  5.20k|  std::memset(new_ctrl + kHalfWidth, static_cast<int8_t>(ctrl_t::kEmpty),
 1324|  5.20k|              kHalfWidth);
 1325|       |  // Fill the second half of the mirrored control bytes with kEmpty.
 1326|  5.20k|  std::memset(new_ctrl + new_capacity + kHalfWidth,
 1327|  5.20k|              static_cast<int8_t>(ctrl_t::kEmpty), kHalfWidth);
 1328|       |  // Copy the first half of the non-mirrored control bytes.
 1329|  5.20k|  absl::little_endian::Store64(new_ctrl, copied_bytes);
 1330|  5.20k|  new_ctrl[new_capacity] = ctrl_t::kSentinel;
 1331|       |  // Copy the first half of the mirrored control bytes.
 1332|  5.20k|  absl::little_endian::Store64(new_ctrl + new_capacity + 1, copied_bytes);
 1333|       |
 1334|       |  // Example for growth capacity 1->3:
 1335|       |  // old_ctrl =                  0S0EEEEEEEEEEEEEE
 1336|       |  // new_ctrl at the end =       E0ESE0EEEEEEEEEEEEE
 1337|       |  //                                    >!
 1338|       |  // new_ctrl after 1st memset = ????????EEEEEEEE???
 1339|       |  //                                       >!
 1340|       |  // new_ctrl after 2nd memset = ????????EEEEEEEEEEE
 1341|       |  //                            >!
 1342|       |  // new_ctrl after 1st store =  E0EEEEEEEEEEEEEEEEE
 1343|       |  // new_ctrl after kSentinel =  E0ESEEEEEEEEEEEEEEE
 1344|       |  //                                >!
 1345|       |  // new_ctrl after 2nd store =  E0ESE0EEEEEEEEEEEEE
 1346|       |
 1347|       |  // Example for growth capacity 3->7:
 1348|       |  // old_ctrl =                  012S012EEEEEEEEEEEE
 1349|       |  // new_ctrl at the end =       E012EEESE012EEEEEEEEEEE
 1350|       |  //                                    >!
 1351|       |  // new_ctrl after 1st memset = ????????EEEEEEEE???????
 1352|       |  //                                           >!
 1353|       |  // new_ctrl after 2nd memset = ????????EEEEEEEEEEEEEEE
 1354|       |  //                            >!
 1355|       |  // new_ctrl after 1st store =  E012EEEEEEEEEEEEEEEEEEE
 1356|       |  // new_ctrl after kSentinel =  E012EEESEEEEEEEEEEEEEEE
 1357|       |  //                                >!
 1358|       |  // new_ctrl after 2nd store =  E012EEESE012EEEEEEEEEEE
 1359|       |
 1360|       |  // Example for growth capacity 7->15:
 1361|       |  // old_ctrl =                  0123456S0123456EEEEEEEE
 1362|       |  // new_ctrl at the end =       E0123456EEEEEEESE0123456EEEEEEE
 1363|       |  //                                    >!
 1364|       |  // new_ctrl after 1st memset = ????????EEEEEEEE???????????????
 1365|       |  //                                                   >!
 1366|       |  // new_ctrl after 2nd memset = ????????EEEEEEEE???????EEEEEEEE
 1367|       |  //                            >!
 1368|       |  // new_ctrl after 1st store =  E0123456EEEEEEEE???????EEEEEEEE
 1369|       |  // new_ctrl after kSentinel =  E0123456EEEEEEES???????EEEEEEEE
 1370|       |  //                                            >!
 1371|       |  // new_ctrl after 2nd store =  E0123456EEEEEEESE0123456EEEEEEE
 1372|  5.20k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_126GrowToNextCapacityDispatchERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1686|  20.4k|                                  ctrl_t* old_ctrl, void* old_slots) {
 1687|  20.4k|  const size_t new_capacity = common.capacity();
 1688|  20.4k|  if (ABSL_PREDICT_TRUE(new_capacity <= kMaxLocalBufferNewCapacity)) {
  ------------------
  |  |  191|  20.4k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 10.0k, False: 10.4k]
  |  |  |  Branch (191:48): [Folded, False: 20.4k]
  |  |  |  Branch (191:57): [True: 10.0k, False: 10.4k]
  |  |  ------------------
  ------------------
 1689|  10.0k|    return GrowToNextCapacityThatFitsInLocalBuffer(common, policy, old_ctrl,
 1690|  10.0k|                                                   old_slots);
 1691|  10.4k|  } else {
 1692|  10.4k|    return GrowToNextCapacityOverflowLocalBuffer(common, policy, old_ctrl,
 1693|  10.4k|                                                 old_slots);
 1694|  10.4k|  }
 1695|  20.4k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_139GrowToNextCapacityThatFitsInLocalBufferERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1636|  10.0k|    ctrl_t* old_ctrl, void* old_slots) {
 1637|       |  ABSL_SWISSTABLE_ASSERT(common.capacity() <= kMaxLocalBufferNewCapacity);
  ------------------
  |  |   66|  10.0k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1638|  10.0k|  return GrowToNextCapacity<
 1639|  10.0k|      ProbedItemEncoder<ProbedItem4Bytes, /*kGuaranteedFitToBuffer=*/true>>(
 1640|  10.0k|      common, policy, old_ctrl, old_slots);
 1641|  10.0k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GrowToNextCapacityINS2_17ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb1EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1617|  10.0k|                          ctrl_t* old_ctrl, void* old_slots) {
 1618|  10.0k|  using ProbedItem = typename Encoder::ProbedItem;
 1619|       |  ABSL_SWISSTABLE_ASSERT(common.capacity() <= ProbedItem::kMaxNewCapacity);
  ------------------
  |  |   66|  10.0k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1620|  10.0k|  Encoder encoder(old_ctrl);
 1621|  10.0k|  policy.transfer_unprobed_elements_to_next_capacity(
 1622|  10.0k|      common, old_ctrl, old_slots, &encoder,
 1623|  10.0k|      [](void* probed_storage, h2_t h2, size_t source_offset, size_t h1) {
 1624|  10.0k|        auto encoder_ptr = static_cast<Encoder*>(probed_storage);
 1625|  10.0k|        encoder_ptr->EncodeItem(ProbedItem(h2, source_offset, h1));
 1626|  10.0k|      });
 1627|  10.0k|  InitializeMirroredControlBytes(common.control(), common.capacity());
 1628|  10.0k|  return encoder.DecodeAndInsertToTable(common, policy, old_slots);
 1629|  10.0k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb1EEC2EPNS1_6ctrl_tE:
 1485|  10.0k|  explicit ProbedItemEncoder(ctrl_t* control) : control_(control) {}
raw_hash_set.cc:_ZZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GrowToNextCapacityINS2_17ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb1EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPvENKUlSF_hmmE_clESF_hmm:
 1623|  8.93k|      [](void* probed_storage, h2_t h2, size_t source_offset, size_t h1) {
 1624|  8.93k|        auto encoder_ptr = static_cast<Encoder*>(probed_storage);
 1625|  8.93k|        encoder_ptr->EncodeItem(ProbedItem(h2, source_offset, h1));
 1626|  8.93k|      });
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb1EE10EncodeItemES5_:
 1488|  8.93k|  void EncodeItem(ProbedItem item) {
 1489|  8.93k|    if (ABSL_PREDICT_FALSE(!kGuaranteedFitToBuffer && pos_ >= end_)) {
  ------------------
  |  |  190|  8.93k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [Folded, False: 8.93k]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1490|      0|      return ProcessEncodeWithOverflow(item);
 1491|      0|    }
 1492|  8.93k|    ABSL_SWISSTABLE_ASSERT(pos_ < end_);
  ------------------
  |  |   66|  8.93k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1493|  8.93k|    *pos_ = item;
 1494|  8.93k|    ++pos_;
 1495|  8.93k|  }
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_130InitializeMirroredControlBytesEPNS1_6ctrl_tEm:
 1461|  20.4k|void InitializeMirroredControlBytes(ctrl_t* new_ctrl, size_t new_capacity) {
 1462|  20.4k|  std::memcpy(new_ctrl + new_capacity,
 1463|       |              // We own GrowthInfo just before control bytes. So it is ok
 1464|       |              // to read one byte from it.
 1465|  20.4k|              new_ctrl - 1, Group::kWidth);
 1466|  20.4k|  new_ctrl[new_capacity] = ctrl_t::kSentinel;
 1467|  20.4k|}
raw_hash_set.cc:_ZNK4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb1EE22DecodeAndInsertToTableERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPv:
 1502|  10.0k|                                void* old_slots) const {
 1503|  10.0k|    if (pos_ == buffer_) {
  ------------------
  |  Branch (1503:9): [True: 5.80k, False: 4.20k]
  ------------------
 1504|  5.80k|      return 0;
 1505|  5.80k|    }
 1506|  4.20k|    if constexpr (kGuaranteedFitToBuffer) {
 1507|  4.20k|      return DecodeAndInsertImpl(common, policy, buffer_, pos_, old_slots);
 1508|  4.20k|    }
 1509|      0|    size_t total_probe_length = DecodeAndInsertImpl(
 1510|  4.20k|        common, policy, buffer_,
 1511|  4.20k|        local_buffer_full_ ? buffer_ + kBufferSize : pos_, old_slots);
  ------------------
  |  Branch (1511:9): [True: 0, False: 4.20k]
  ------------------
 1512|  4.20k|    if (!local_buffer_full_) {
  ------------------
  |  Branch (1512:9): [True: 0, False: 4.20k]
  ------------------
 1513|      0|      return total_probe_length;
 1514|      0|    }
 1515|  4.20k|    total_probe_length +=
 1516|  4.20k|        DecodeAndInsertToTableOverflow(common, policy, old_slots);
 1517|  4.20k|    return total_probe_length;
 1518|  4.20k|  }
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119DecodeAndInsertImplINS1_14ProbedItemImplIjLm32EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPKT_SD_Pv:
 1384|  8.43k|    const ProbedItem* start, const ProbedItem* end, void* old_slots) {
 1385|  8.43k|  const HashtableCapacity new_capacity = c.capacity_impl();
 1386|       |
 1387|  8.43k|  void* new_slots = c.slot_array(new_capacity.capacity());
 1388|  8.43k|  ctrl_t* new_ctrl = c.control();
 1389|  8.43k|  size_t total_probe_length = 0;
 1390|       |
 1391|  8.43k|  const size_t slot_size = policy.slot_size;
 1392|  8.43k|  auto transfer_n = policy.transfer_n;
 1393|       |
 1394|  29.9k|  for (; start < end; ++start) {
  ------------------
  |  Branch (1394:10): [True: 21.4k, False: 8.43k]
  ------------------
 1395|  21.4k|    const FindInfo target = find_first_non_full_from_h1(
 1396|  21.4k|        new_ctrl, static_cast<size_t>(start->h1), new_capacity);
 1397|  21.4k|    total_probe_length += target.probe_length;
 1398|  21.4k|    const size_t old_index = static_cast<size_t>(start->source_offset);
 1399|  21.4k|    const size_t new_i = target.offset;
 1400|  21.4k|    ABSL_SWISSTABLE_ASSERT(old_index < new_capacity.capacity() / 2);
  ------------------
  |  |   66|  21.4k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1401|  21.4k|    ABSL_SWISSTABLE_ASSERT(new_i < new_capacity.capacity());
  ------------------
  |  |   66|  21.4k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1402|       |    ABSL_SWISSTABLE_ASSERT(IsEmpty(new_ctrl[new_i]));
  ------------------
  |  |   66|  21.4k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1403|  21.4k|    void* src_slot = SlotAddress(old_slots, old_index, slot_size);
 1404|  21.4k|    void* dst_slot = SlotAddress(new_slots, new_i, slot_size);
 1405|  21.4k|    SanitizerUnpoisonMemoryRegion(dst_slot, slot_size);
 1406|  21.4k|    transfer_n(&c, dst_slot, src_slot, 1);
 1407|  21.4k|    SetCtrlInLargeTable(c, new_i, static_cast<h2_t>(start->h2), slot_size);
 1408|  21.4k|  }
 1409|  8.43k|  return total_probe_length;
 1410|  8.43k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_137GrowToNextCapacityOverflowLocalBufferERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1669|  10.4k|    ctrl_t* old_ctrl, void* old_slots) {
 1670|  10.4k|  const size_t new_capacity = common.capacity();
 1671|  10.4k|  if (ABSL_PREDICT_TRUE(new_capacity <= ProbedItem4Bytes::kMaxNewCapacity)) {
  ------------------
  |  |  191|  10.4k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 7.85k, False: 2.62k]
  |  |  |  Branch (191:48): [Folded, False: 10.4k]
  |  |  |  Branch (191:57): [True: 7.85k, False: 2.62k]
  |  |  ------------------
  ------------------
 1672|  7.85k|    return GrowToNextCapacity4BytesEncoder(common, policy, old_ctrl, old_slots);
 1673|  7.85k|  }
 1674|  2.62k|  if (ABSL_PREDICT_TRUE(new_capacity <= ProbedItem8Bytes::kMaxNewCapacity)) {
  ------------------
  |  |  191|  2.62k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 2.62k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 2.62k]
  |  |  |  Branch (191:57): [True: 2.62k, False: 0]
  |  |  ------------------
  ------------------
 1675|  2.62k|    return GrowToNextCapacity8BytesEncoder(common, policy, old_ctrl, old_slots);
 1676|  2.62k|  }
 1677|       |  // 16 bytes encoding supports the maximum swisstable capacity.
 1678|      0|  return GrowToNextCapacity16BytesEncoder(common, policy, old_ctrl, old_slots);
 1679|  2.62k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_131GrowToNextCapacity4BytesEncoderERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1647|  7.85k|                                       ctrl_t* old_ctrl, void* old_slots) {
 1648|  7.85k|  return GrowToNextCapacity<ProbedItemEncoder<ProbedItem4Bytes>>(
 1649|  7.85k|      common, policy, old_ctrl, old_slots);
 1650|  7.85k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GrowToNextCapacityINS2_17ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb0EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1617|  7.85k|                          ctrl_t* old_ctrl, void* old_slots) {
 1618|  7.85k|  using ProbedItem = typename Encoder::ProbedItem;
 1619|       |  ABSL_SWISSTABLE_ASSERT(common.capacity() <= ProbedItem::kMaxNewCapacity);
  ------------------
  |  |   66|  7.85k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1620|  7.85k|  Encoder encoder(old_ctrl);
 1621|  7.85k|  policy.transfer_unprobed_elements_to_next_capacity(
 1622|  7.85k|      common, old_ctrl, old_slots, &encoder,
 1623|  7.85k|      [](void* probed_storage, h2_t h2, size_t source_offset, size_t h1) {
 1624|  7.85k|        auto encoder_ptr = static_cast<Encoder*>(probed_storage);
 1625|  7.85k|        encoder_ptr->EncodeItem(ProbedItem(h2, source_offset, h1));
 1626|  7.85k|      });
 1627|  7.85k|  InitializeMirroredControlBytes(common.control(), common.capacity());
 1628|  7.85k|  return encoder.DecodeAndInsertToTable(common, policy, old_slots);
 1629|  7.85k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb0EEC2EPNS1_6ctrl_tE:
 1485|  7.85k|  explicit ProbedItemEncoder(ctrl_t* control) : control_(control) {}
raw_hash_set.cc:_ZZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GrowToNextCapacityINS2_17ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb0EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPvENKUlSF_hmmE_clESF_hmm:
 1623|  12.5k|      [](void* probed_storage, h2_t h2, size_t source_offset, size_t h1) {
 1624|  12.5k|        auto encoder_ptr = static_cast<Encoder*>(probed_storage);
 1625|  12.5k|        encoder_ptr->EncodeItem(ProbedItem(h2, source_offset, h1));
 1626|  12.5k|      });
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb0EE10EncodeItemES5_:
 1488|  12.5k|  void EncodeItem(ProbedItem item) {
 1489|  12.5k|    if (ABSL_PREDICT_FALSE(!kGuaranteedFitToBuffer && pos_ >= end_)) {
  ------------------
  |  |  190|  25.1k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 12.5k]
  |  |  |  Branch (190:49): [Folded, False: 12.5k]
  |  |  |  Branch (190:59): [True: 12.5k, Folded]
  |  |  |  Branch (190:59): [True: 0, False: 12.5k]
  |  |  ------------------
  ------------------
 1490|      0|      return ProcessEncodeWithOverflow(item);
 1491|      0|    }
 1492|  12.5k|    ABSL_SWISSTABLE_ASSERT(pos_ < end_);
  ------------------
  |  |   66|  12.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1493|  12.5k|    *pos_ = item;
 1494|  12.5k|    ++pos_;
 1495|  12.5k|  }
raw_hash_set.cc:_ZNK4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplIjLm32EEELb0EE22DecodeAndInsertToTableERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPv:
 1502|  7.85k|                                void* old_slots) const {
 1503|  7.85k|    if (pos_ == buffer_) {
  ------------------
  |  Branch (1503:9): [True: 3.63k, False: 4.22k]
  ------------------
 1504|  3.63k|      return 0;
 1505|  3.63k|    }
 1506|       |    if constexpr (kGuaranteedFitToBuffer) {
 1507|       |      return DecodeAndInsertImpl(common, policy, buffer_, pos_, old_slots);
 1508|       |    }
 1509|  4.22k|    size_t total_probe_length = DecodeAndInsertImpl(
 1510|  4.22k|        common, policy, buffer_,
 1511|  4.22k|        local_buffer_full_ ? buffer_ + kBufferSize : pos_, old_slots);
  ------------------
  |  Branch (1511:9): [True: 0, False: 4.22k]
  ------------------
 1512|  4.22k|    if (!local_buffer_full_) {
  ------------------
  |  Branch (1512:9): [True: 4.22k, False: 0]
  ------------------
 1513|  4.22k|      return total_probe_length;
 1514|  4.22k|    }
 1515|      0|    total_probe_length +=
 1516|      0|        DecodeAndInsertToTableOverflow(common, policy, old_slots);
 1517|      0|    return total_probe_length;
 1518|  4.22k|  }
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_131GrowToNextCapacity8BytesEncoderERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1653|  2.62k|                                       ctrl_t* old_ctrl, void* old_slots) {
 1654|  2.62k|  return GrowToNextCapacity<ProbedItemEncoder<ProbedItem8Bytes>>(
 1655|  2.62k|      common, policy, old_ctrl, old_slots);
 1656|  2.62k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GrowToNextCapacityINS2_17ProbedItemEncoderINS1_14ProbedItemImplImLm64EEELb0EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPv:
 1617|  2.62k|                          ctrl_t* old_ctrl, void* old_slots) {
 1618|  2.62k|  using ProbedItem = typename Encoder::ProbedItem;
 1619|       |  ABSL_SWISSTABLE_ASSERT(common.capacity() <= ProbedItem::kMaxNewCapacity);
  ------------------
  |  |   66|  2.62k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1620|  2.62k|  Encoder encoder(old_ctrl);
 1621|  2.62k|  policy.transfer_unprobed_elements_to_next_capacity(
 1622|  2.62k|      common, old_ctrl, old_slots, &encoder,
 1623|  2.62k|      [](void* probed_storage, h2_t h2, size_t source_offset, size_t h1) {
 1624|  2.62k|        auto encoder_ptr = static_cast<Encoder*>(probed_storage);
 1625|  2.62k|        encoder_ptr->EncodeItem(ProbedItem(h2, source_offset, h1));
 1626|  2.62k|      });
 1627|  2.62k|  InitializeMirroredControlBytes(common.control(), common.capacity());
 1628|  2.62k|  return encoder.DecodeAndInsertToTable(common, policy, old_slots);
 1629|  2.62k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplImLm64EEELb0EEC2EPNS1_6ctrl_tE:
 1485|  2.62k|  explicit ProbedItemEncoder(ctrl_t* control) : control_(control) {}
raw_hash_set.cc:_ZZN4absl12lts_2026081718container_internal12_GLOBAL__N_118GrowToNextCapacityINS2_17ProbedItemEncoderINS1_14ProbedItemImplImLm64EEELb0EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPNS1_6ctrl_tEPvENKUlSF_hmmE_clESF_hmm:
 1623|  6.90k|      [](void* probed_storage, h2_t h2, size_t source_offset, size_t h1) {
 1624|  6.90k|        auto encoder_ptr = static_cast<Encoder*>(probed_storage);
 1625|  6.90k|        encoder_ptr->EncodeItem(ProbedItem(h2, source_offset, h1));
 1626|  6.90k|      });
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplImLm64EEELb0EE10EncodeItemES5_:
 1488|  6.90k|  void EncodeItem(ProbedItem item) {
 1489|  6.90k|    if (ABSL_PREDICT_FALSE(!kGuaranteedFitToBuffer && pos_ >= end_)) {
  ------------------
  |  |  190|  13.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 6.90k]
  |  |  |  Branch (190:49): [Folded, False: 6.90k]
  |  |  |  Branch (190:59): [True: 6.90k, Folded]
  |  |  |  Branch (190:59): [True: 0, False: 6.90k]
  |  |  ------------------
  ------------------
 1490|      0|      return ProcessEncodeWithOverflow(item);
 1491|      0|    }
 1492|  6.90k|    ABSL_SWISSTABLE_ASSERT(pos_ < end_);
  ------------------
  |  |   66|  6.90k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1493|  6.90k|    *pos_ = item;
 1494|  6.90k|    ++pos_;
 1495|  6.90k|  }
raw_hash_set.cc:_ZNK4absl12lts_2026081718container_internal12_GLOBAL__N_117ProbedItemEncoderINS1_14ProbedItemImplImLm64EEELb0EE22DecodeAndInsertToTableERNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPv:
 1502|  2.62k|                                void* old_slots) const {
 1503|  2.62k|    if (pos_ == buffer_) {
  ------------------
  |  Branch (1503:9): [True: 826, False: 1.80k]
  ------------------
 1504|    826|      return 0;
 1505|    826|    }
 1506|       |    if constexpr (kGuaranteedFitToBuffer) {
 1507|       |      return DecodeAndInsertImpl(common, policy, buffer_, pos_, old_slots);
 1508|       |    }
 1509|  1.80k|    size_t total_probe_length = DecodeAndInsertImpl(
 1510|  1.80k|        common, policy, buffer_,
 1511|  1.80k|        local_buffer_full_ ? buffer_ + kBufferSize : pos_, old_slots);
  ------------------
  |  Branch (1511:9): [True: 0, False: 1.80k]
  ------------------
 1512|  1.80k|    if (!local_buffer_full_) {
  ------------------
  |  Branch (1512:9): [True: 1.80k, False: 0]
  ------------------
 1513|  1.80k|      return total_probe_length;
 1514|  1.80k|    }
 1515|      0|    total_probe_length +=
 1516|      0|        DecodeAndInsertToTableOverflow(common, policy, old_slots);
 1517|      0|    return total_probe_length;
 1518|  1.80k|  }
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119DecodeAndInsertImplINS1_14ProbedItemImplImLm64EEEEEmRNS1_12CommonFieldsERKNS1_15PolicyFunctionsEPKT_SD_Pv:
 1384|  1.80k|    const ProbedItem* start, const ProbedItem* end, void* old_slots) {
 1385|  1.80k|  const HashtableCapacity new_capacity = c.capacity_impl();
 1386|       |
 1387|  1.80k|  void* new_slots = c.slot_array(new_capacity.capacity());
 1388|  1.80k|  ctrl_t* new_ctrl = c.control();
 1389|  1.80k|  size_t total_probe_length = 0;
 1390|       |
 1391|  1.80k|  const size_t slot_size = policy.slot_size;
 1392|  1.80k|  auto transfer_n = policy.transfer_n;
 1393|       |
 1394|  8.70k|  for (; start < end; ++start) {
  ------------------
  |  Branch (1394:10): [True: 6.90k, False: 1.80k]
  ------------------
 1395|  6.90k|    const FindInfo target = find_first_non_full_from_h1(
 1396|  6.90k|        new_ctrl, static_cast<size_t>(start->h1), new_capacity);
 1397|  6.90k|    total_probe_length += target.probe_length;
 1398|  6.90k|    const size_t old_index = static_cast<size_t>(start->source_offset);
 1399|  6.90k|    const size_t new_i = target.offset;
 1400|  6.90k|    ABSL_SWISSTABLE_ASSERT(old_index < new_capacity.capacity() / 2);
  ------------------
  |  |   66|  6.90k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1401|  6.90k|    ABSL_SWISSTABLE_ASSERT(new_i < new_capacity.capacity());
  ------------------
  |  |   66|  6.90k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1402|       |    ABSL_SWISSTABLE_ASSERT(IsEmpty(new_ctrl[new_i]));
  ------------------
  |  |   66|  6.90k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1403|  6.90k|    void* src_slot = SlotAddress(old_slots, old_index, slot_size);
 1404|  6.90k|    void* dst_slot = SlotAddress(new_slots, new_i, slot_size);
 1405|  6.90k|    SanitizerUnpoisonMemoryRegion(dst_slot, slot_size);
 1406|  6.90k|    transfer_n(&c, dst_slot, src_slot, 1);
 1407|  6.90k|    SetCtrlInLargeTable(c, new_i, static_cast<h2_t>(start->h2), slot_size);
 1408|  6.90k|  }
 1409|  1.80k|  return total_probe_length;
 1410|  1.80k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_119SetCtrlInLargeTableERKNS1_12CommonFieldsEmhm:
  581|   544k|                                size_t slot_size) {
  582|   544k|  SetCtrlInLargeTable(c, i, static_cast<ctrl_t>(h), slot_size);
  583|   544k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_117SingleSlotAddressILb0EEEPvRNS1_12CommonFieldsE:
  841|  5.37k|void* SingleSlotAddress(CommonFields& c) {
  842|  5.37k|  return kSooEnabled ? c.soo_data() : c.slot_array(/*capacity=*/1);
  ------------------
  |  Branch (842:10): [Folded, False: 5.37k]
  ------------------
  843|  5.37k|}
raw_hash_set.cc:_ZN4absl12lts_2026081718container_internal12_GLOBAL__N_118DecrementSmallSizeILb0EEEvRNS1_12CommonFieldsE:
  846|  1.19k|void DecrementSmallSize(CommonFields& c) {
  847|       |  if constexpr (kSooEnabled) {
  848|       |    c.set_empty_soo();
  849|  1.19k|  } else {
  850|  1.19k|    c.decrement_size();
  851|  1.19k|  }
  852|  1.19k|}

_ZNK4absl12lts_2026081718container_internal12PerTableSeed4seedEv:
  603|   616M|  size_t seed() const { return seed_; }
_ZN4absl12lts_2026081718container_internal12PerTableSeedC2Em:
  610|   616M|      : seed_(static_cast<uint16_t>(seed)) {}
_ZN4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled36maybe_increment_generation_on_insertEv:
  930|  64.1M|  void maybe_increment_generation_on_insert() {}
_ZN4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled21reset_reserved_growthEmm:
  932|  11.5k|  void reset_reserved_growth(size_t, size_t) {}
_ZN4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled19set_reserved_growthEm:
  934|  18.9k|  void set_reserved_growth(size_t) {}
_ZN4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled20set_reservation_sizeEm:
  936|  30.4k|  void set_reservation_size(size_t) {}
_ZNK4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled10generationEv:
  937|  44.0k|  GenerationType generation() const { return 0; }
_ZN4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled14set_generationEh:
  938|  44.0k|  void set_generation(GenerationType) {}
_ZNK4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled14generation_ptrEv:
  939|  1.10G|  GenerationType* generation_ptr() const { return nullptr; }
_ZN4absl12lts_2026081718container_internal34CommonFieldsGenerationInfoDisabled18set_generation_ptrEPh:
  940|  44.0k|  void set_generation_ptr(GenerationType*) {}
_ZN4absl12lts_2026081718container_internal37HashSetIteratorGenerationInfoDisabledC2EPKh:
  963|  1.10G|  explicit HashSetIteratorGenerationInfoDisabled(const GenerationType*) {}
_ZNK4absl12lts_2026081718container_internal37HashSetIteratorGenerationInfoDisabled10generationEv:
  965|  1.41G|  GenerationType generation() const { return 0; }
_ZNK4absl12lts_2026081718container_internal37HashSetIteratorGenerationInfoDisabled14generation_ptrEv:
  967|  2.45G|  const GenerationType* generation_ptr() const { return nullptr; }
_ZN4absl12lts_2026081718container_internal20GrowthInfoLowerBoundC2Eh:
 1023|  65.7M|      : growth_left_(growth_left) {}
_ZNK4absl12lts_2026081718container_internal20GrowthInfoLowerBound25HasNoDeletedAndGrowthLeftEv:
 1028|  64.1M|  constexpr bool HasNoDeletedAndGrowthLeft() const {
 1029|  64.1M|    return static_cast<int8_t>(growth_left_) > 0;
 1030|  64.1M|  }
_ZNK4absl12lts_2026081718container_internal20GrowthInfoLowerBound23HasDeletedAndGrowthLeftEv:
 1035|   506k|  constexpr bool HasDeletedAndGrowthLeft() const {
 1036|   506k|    return growth_left_ > kDeletedBit;
 1037|   506k|  }
_ZNK4absl12lts_2026081718container_internal20GrowthInfoLowerBound27HasNoGrowthLeftAndNoDeletedEv:
 1042|   521k|  constexpr bool HasNoGrowthLeftAndNoDeleted() const {
 1043|   521k|    return growth_left_ == 0;
 1044|   521k|  }
_ZNK4absl12lts_2026081718container_internal20GrowthInfoLowerBound29HasNoGrowthLeftAndHaveDeletedEv:
 1048|   495k|  constexpr bool HasNoGrowthLeftAndHaveDeleted() const {
 1049|   495k|    return growth_left_ == kDeletedBit;
 1050|   495k|  }
_ZNK4absl12lts_2026081718container_internal20GrowthInfoLowerBound13GetGrowthLeftEv:
 1061|   506k|  constexpr uint8_t GetGrowthLeft() const {
 1062|   506k|    return growth_left_ & kGrowthLeftMask;
 1063|   506k|  }
_ZN4absl12lts_2026081718container_internal18GrowthInfoAccessorC2EPv:
 1078|  64.7M|      : growth_info_lower_bound_(reinterpret_cast<uint8_t*>(control) - 1 -
 1079|  64.7M|                                 NumGenerationBytes()) {}
_ZN4absl12lts_2026081718container_internal18GrowthInfoAccessor20OverwriteEmptyAsFullEv:
 1096|  63.6M|  void OverwriteEmptyAsFull() {
 1097|       |    ABSL_SWISSTABLE_ASSERT(GetGrowthLeftLowerBound() > 0);
  ------------------
  |  |  257|  63.6M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1098|  63.6M|    --(*growth_info_lower_bound_);
 1099|  63.6M|  }
_ZN4absl12lts_2026081718container_internal18GrowthInfoAccessor22OverwriteControlAsFullENS1_6ctrl_tE:
 1103|   495k|  void OverwriteControlAsFull(ctrl_t ctrl) {
 1104|       |    ABSL_SWISSTABLE_ASSERT(GetGrowthLeftLowerBound() >=
  ------------------
  |  |  257|   495k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1105|   495k|                           static_cast<size_t>(IsEmpty(ctrl)));
 1106|   495k|    *growth_info_lower_bound_ -= static_cast<size_t>(IsEmpty(ctrl));
 1107|   495k|  }
_ZNK4absl12lts_2026081718container_internal18GrowthInfoAccessor23GetGrowthInfoLowerBoundEv:
 1116|  64.6M|  GrowthInfoLowerBound GetGrowthInfoLowerBound() const {
 1117|  64.6M|    return GrowthInfoLowerBound(*growth_info_lower_bound_);
 1118|  64.6M|  }
_ZNK4absl12lts_2026081718container_internal18GrowthInfoAccessor20full_growth_info_ptrEv:
 1131|   519k|  void* full_growth_info_ptr() const { return growth_info_lower_bound_ - 7; }
_ZN4absl12lts_2026081718container_internal16RawHashSetLayoutC2Emmmbm:
 1191|  88.1k|      : control_offset_(MetadataBeforeControlSize(has_infoz, capacity)),
 1192|  88.1k|        generation_offset_(control_offset_ - NumGenerationBytes()),
 1193|  88.1k|        slot_offset_(control_offset_ + NumControlBytes(capacity)) {
 1194|  88.1k|    ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity));
  ------------------
  |  |  257|  88.1k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1195|  88.1k|    size_t aligned_slot_offset = AlignUpTo(slot_offset_, slot_align);
 1196|  88.1k|    size_t slot_array_padding = aligned_slot_offset - slot_offset_;
 1197|  88.1k|    slot_offset_ = aligned_slot_offset;
 1198|  88.1k|    ABSL_SWISSTABLE_ASSERT(
  ------------------
  |  |  257|  88.1k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1199|  88.1k|        slot_size <=
 1200|  88.1k|        ((std::numeric_limits<size_t>::max)() - slot_offset_) / capacity);
 1201|  88.1k|    control_offset_ += slot_array_padding;
 1202|  88.1k|    generation_offset_ += slot_array_padding;
 1203|       |    ABSL_SWISSTABLE_ASSERT(!IsSmallCapacity(capacity) ||
  ------------------
  |  |  257|  88.1k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1204|  88.1k|                           control_offset_ == slot_offset_);
 1205|  88.1k|    alloc_size_ = slot_offset_ + (capacity - blocked_element_count) * slot_size;
 1206|  88.1k|  }
_ZNK4absl12lts_2026081718container_internal16RawHashSetLayout14control_offsetEv:
 1210|  88.1k|  size_t control_offset() const { return control_offset_; }
_ZNK4absl12lts_2026081718container_internal16RawHashSetLayout17generation_offsetEv:
 1214|  44.0k|  size_t generation_offset() const { return generation_offset_; }
_ZNK4absl12lts_2026081718container_internal16RawHashSetLayout11slot_offsetEv:
 1218|  44.0k|  size_t slot_offset() const { return slot_offset_; }
_ZNK4absl12lts_2026081718container_internal16RawHashSetLayout10alloc_sizeEv:
 1222|   132k|  size_t alloc_size() const { return alloc_size_; }
_ZN4absl12lts_2026081718container_internal9HeapOrSoo7controlEv:
 1260|  44.0k|  MaybeInitializedPtr<ctrl_t>& control() {
 1261|  44.0k|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(heap.control);
  ------------------
  |  |  484|  44.0k|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
 1262|  44.0k|  }
_ZNK4absl12lts_2026081718container_internal9HeapOrSoo7controlEv:
 1263|  1.86G|  MaybeInitializedPtr<ctrl_t> control() const {
 1264|  1.86G|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(heap.control);
  ------------------
  |  |  484|  1.86G|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
 1265|  1.86G|  }
_ZN4absl12lts_2026081718container_internal12CommonFieldsC2ENS1_13non_soo_tag_tE:
 1294|  28.1k|      : inline_data_(HashtableCapacity(0), no_seed_empty_tag_t{}) {}
_ZNK4absl12lts_2026081718container_internal12CommonFields7controlEv:
 1321|  1.86G|  ctrl_t* control() const {
 1322|  1.86G|    ABSL_SWISSTABLE_ASSERT(capacity() > 0);
  ------------------
  |  |  257|  1.86G|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1323|       |    // Assume that the control bytes don't alias `this`.
 1324|  1.86G|    ctrl_t* ctrl = heap_or_soo_.control().get();
 1325|  1.86G|    [[maybe_unused]] size_t num_control_bytes = NumControlBytes(capacity());
 1326|  1.86G|    ABSL_ASSUME(reinterpret_cast<uintptr_t>(ctrl + num_control_bytes) <=
  ------------------
  |  |  272|  2.71G|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  |  |  ------------------
  |  |  |  Branch (272:44): [True: 1.01G, False: 848M]
  |  |  |  Branch (272:44): [True: 848M, False: 0]
  |  |  ------------------
  ------------------
 1327|  1.86G|                    reinterpret_cast<uintptr_t>(this) ||
 1328|  1.86G|                reinterpret_cast<uintptr_t>(this + 1) <=
 1329|  1.86G|                    reinterpret_cast<uintptr_t>(ctrl));
 1330|  1.86G|    ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(ctrl);
  ------------------
  |  |  484|  1.86G|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
 1331|  1.86G|  }
_ZN4absl12lts_2026081718container_internal12CommonFields11set_controlEPNS1_6ctrl_tE:
 1333|  44.0k|  void set_control(ctrl_t* c) { heap_or_soo_.control().set(c); }
_ZNK4absl12lts_2026081718container_internal12CommonFields10slot_arrayEm:
 1341|   689M|  void* slot_array(size_t capacity) const {
 1342|       |    ABSL_SWISSTABLE_ASSERT(capacity == this->capacity());
  ------------------
  |  |  257|   689M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1343|   689M|    ctrl_t* ctrl = control();
 1344|   689M|    return ctrl + NumControlBytes(capacity);
 1345|   689M|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields4sizeEv:
 1348|  60.6M|  size_t size() const { return inline_data_.size(); }
_ZN4absl12lts_2026081718container_internal12CommonFields16set_size_to_zeroEv:
 1350|  2.24k|  void set_size_to_zero() { inline_data_.set_size(0); }
_ZN4absl12lts_2026081718container_internal12CommonFields14increment_sizeEv:
 1359|  64.1M|  void increment_size() {
 1360|       |    ABSL_SWISSTABLE_ASSERT(size() < capacity());
  ------------------
  |  |  257|  64.1M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1361|  64.1M|    inline_data_.increment_size();
 1362|  64.1M|  }
_ZN4absl12lts_2026081718container_internal12CommonFields14decrement_sizeEv:
 1367|  1.19k|  void decrement_size() {
 1368|       |    ABSL_SWISSTABLE_ASSERT(!empty());
  ------------------
  |  |  257|  1.19k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1369|  1.19k|    inline_data_.decrement_size();
 1370|  1.19k|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields5emptyEv:
 1371|  36.6k|  bool empty() const { return inline_data_.empty(); }
_ZNK4absl12lts_2026081718container_internal12CommonFields4seedEv:
 1380|   616M|  PerTableSeed seed() const { return inline_data_.seed(); }
_ZN4absl12lts_2026081718container_internal12CommonFields17generate_new_seedEb:
 1384|  14.6k|  void generate_new_seed(bool has_infoz) {
 1385|       |    // Note: we can't use has_infoz() here because we set has_infoz later than
 1386|       |    // we generate the seed.
 1387|  14.6k|    if (ABSL_PREDICT_FALSE(has_infoz)) {
  ------------------
  |  |  190|  14.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 14.6k]
  |  |  |  Branch (190:49): [Folded, False: 14.6k]
  |  |  |  Branch (190:58): [True: 0, False: 14.6k]
  |  |  ------------------
  ------------------
 1388|      0|      inline_data_.set_sampled_seed();
 1389|      0|      return;
 1390|      0|    }
 1391|  14.6k|    inline_data_.generate_new_seed();
 1392|  14.6k|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields13capacity_implEv:
 1395|  2.57G|  HashtableCapacity capacity_impl() const {
 1396|  2.57G|    HashtableCapacity cap = inline_data_.capacity();
 1397|       |    ABSL_SWISSTABLE_ASSERT(cap.IsValid());
  ------------------
  |  |  257|  2.57G|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1398|  2.57G|    return cap;
 1399|  2.57G|  }
_ZNK4absl12lts_2026081718container_internal21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EE8capacityEv:
  551|  2.57G|  constexpr size_t capacity() const {
  552|  2.57G|    ABSL_SWISSTABLE_ASSERT(IsValid());
  ------------------
  |  |  257|  2.57G|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  553|  2.57G|    return StorageMode == kCapacityByValue ? capacity_data_
  ------------------
  |  Branch (553:12): [Folded, False: 2.57G]
  ------------------
  554|  2.57G|                                           : (size_t{1} << capacity_data_) - 1;
  555|  2.57G|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields8capacityEv:
 1400|  2.57G|  size_t capacity() const { return capacity_impl().capacity(); }
_ZN4absl12lts_2026081718container_internal12CommonFields12set_capacityENS1_21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EEE:
 1406|  44.0k|  void set_capacity(HashtableCapacity c) { inline_data_.set_capacity(c); }
_ZN4absl12lts_2026081718container_internal12CommonFields12set_capacityEm:
 1407|  44.0k|  void set_capacity(size_t c) {
 1408|  44.0k|    set_capacity(HashtableCapacity(c));
 1409|  44.0k|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields8is_smallEv:
 1410|   582M|  bool is_small() const { return inline_data_.is_small(); }
_ZNK4absl12lts_2026081718container_internal12CommonFields11growth_infoEv:
 1412|  64.6M|  GrowthInfoAccessor growth_info() const {
 1413|       |    ABSL_SWISSTABLE_ASSERT(GrowthInfoSizeForCapacity(capacity()) > 0);
  ------------------
  |  |  257|  64.6M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1414|  64.6M|    return GetGrowthInfoFromControl(control());
 1415|  64.6M|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields9has_infozEv:
 1417|  64.2M|  bool has_infoz() const { return inline_data_.has_infoz(); }
_ZN4absl12lts_2026081718container_internal12CommonFields5infozEv:
 1425|  64.2M|  HashtablezInfoHandle infoz() {
 1426|  64.2M|    return has_infoz() ? infoz_ptr() : HashtablezInfoHandle();
  ------------------
  |  Branch (1426:12): [True: 0, False: 64.2M]
  ------------------
 1427|  64.2M|  }
_ZN4absl12lts_2026081718container_internal12CommonFields21reset_reserved_growthEm:
 1441|  11.5k|  void reset_reserved_growth(size_t reservation) {
 1442|  11.5k|    CommonFieldsGenerationInfo::reset_reserved_growth(reservation, size());
 1443|  11.5k|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields21blocked_element_countEv:
 1449|  43.2k|  size_t blocked_element_count() const {
 1450|  43.2k|    return inline_data_.blocked_element_count();
 1451|  43.2k|  }
_ZN4absl12lts_2026081718container_internal12CommonFields26init_blocked_element_countEm:
 1456|  11.5k|  void init_blocked_element_count(size_t count) {
 1457|  11.5k|    inline_data_.init_blocked_element_count(count);
 1458|  11.5k|  }
_ZN4absl12lts_2026081718container_internal12CommonFields33set_blocked_element_count_to_zeroEv:
 1459|  25.6k|  void set_blocked_element_count_to_zero() {
 1460|  25.6k|    inline_data_.set_blocked_element_count_to_zero();
 1461|  25.6k|  }
_ZNK4absl12lts_2026081718container_internal12CommonFields22AssertNotDebugCapacityEv:
 1498|  1.49G|  void AssertNotDebugCapacity() const {
 1499|  1.49G|    if (!SwisstableGenerationsOrDebugEnabled()) {
  ------------------
  |  Branch (1499:9): [True: 1.49G, Folded]
  ------------------
 1500|  1.49G|      return;
 1501|  1.49G|    }
 1502|      0|    AssertNotDebugCapacityImpl();
 1503|      0|  }
_ZNK4absl12lts_2026081718container_internal15PolicyFunctions12soo_capacityEv:
 1967|  11.5k|  uint8_t soo_capacity() const {
 1968|  11.5k|    return static_cast<uint8_t>(soo_enabled ? SooCapacity() : 0);
  ------------------
  |  Branch (1968:33): [True: 0, False: 11.5k]
  ------------------
 1969|  11.5k|  }
_ZN4absl12lts_2026081718container_internal22MaxValidSizeForKeySizeILm8EEEmm:
 1998|  11.5k|constexpr size_t MaxValidSizeForKeySize(size_t key_size) {
 1999|  11.5k|  if (key_size < kSizeOfSizeT) return size_t{1} << 8 * key_size;
  ------------------
  |  Branch (1999:7): [True: 0, False: 11.5k]
  ------------------
 2000|  11.5k|  return (std::numeric_limits<size_t>::max)();
 2001|  11.5k|}
_ZN4absl12lts_2026081718container_internal23MaxValidSizeForSlotSizeILm8EEEmm:
 2004|  11.5k|constexpr size_t MaxValidSizeForSlotSize(size_t slot_size) {
 2005|  11.5k|  if constexpr (kSizeOfSizeT == 8) {
 2006|       |    // For small slot sizes we are limited by HashtableStackData::kSizeBitCount.
 2007|  11.5k|    if (slot_size < size_t{1} << (64 - HashtableInlineData::kSizeBitCount)) {
  ------------------
  |  Branch (2007:9): [True: 11.5k, False: 0]
  ------------------
 2008|  11.5k|      return MaxStorableSize();
 2009|  11.5k|    }
 2010|  11.5k|  }
 2011|      0|  return MaxSizeAtMaxValidCapacity<kSizeOfSizeT>(slot_size);
 2012|  11.5k|}
_ZN4absl12lts_2026081718container_internal12MaxValidSizeILm8EEEmmm:
 2017|  11.5k|constexpr size_t MaxValidSize(size_t key_size, size_t slot_size) {
 2018|  11.5k|  return (std::min)(MaxValidSizeForKeySize<kSizeOfSizeT>(key_size),
 2019|  11.5k|                    MaxValidSizeForSlotSize<kSizeOfSizeT>(slot_size));
 2020|  11.5k|}
_ZN4absl12lts_2026081718container_internal23SentinelEmptyGenerationEv:
  265|  44.0k|constexpr GenerationType SentinelEmptyGeneration() { return 0; }
_ZN4absl12lts_2026081718container_internal14NextGenerationEh:
  267|  44.0k|constexpr GenerationType NextGeneration(GenerationType generation) {
  268|  44.0k|  return ++generation == SentinelEmptyGeneration() ? ++generation : generation;
  ------------------
  |  Branch (268:10): [True: 0, False: 44.0k]
  ------------------
  269|  44.0k|}
_ZN4absl12lts_2026081718container_internal18NumGenerationBytesEv:
  276|  64.9M|constexpr size_t NumGenerationBytes() { return 0; }
_ZN4absl12lts_2026081718container_internal10SooControlEv:
  339|  5.64M|inline ctrl_t* SooControl() {
  340|       |  // Const must be cast away here; no uses of this function will actually write
  341|       |  // to it because it is only used for SOO iterators.
  342|  5.64M|  return const_cast<ctrl_t*>(kSooControl);
  343|  5.64M|}
_ZN4absl12lts_2026081718container_internal21InsertIteratorControlEv:
  351|  64.2M|inline ctrl_t* InsertIteratorControl() {
  352|       |  // Const must be cast away here; no uses of this function will actually write
  353|       |  // to it because it is only used for iterators returned by `insert` and
  354|       |  // similar.
  355|  64.2M|  return const_cast<ctrl_t*>(kInsertIteratorControl);
  356|  64.2M|}
_ZN4absl12lts_2026081718container_internal11SooCapacityEv:
  378|  11.5k|constexpr size_t SooCapacity() { return 1; }
_ZN4absl12lts_2026081718container_internal15IsValidCapacityEm:
  395|  64.2M|constexpr bool IsValidCapacity(size_t n) { return ((n + 1) & n) == 0 && n > 0; }
  ------------------
  |  Branch (395:51): [True: 64.2M, False: 0]
  |  Branch (395:73): [True: 64.2M, False: 12.8k]
  ------------------
_ZN4absl12lts_2026081718container_internal15IsSmallCapacityEm:
  398|  2.55G|constexpr bool IsSmallCapacity(size_t capacity) {
  399|  2.55G|  return capacity <= kMaxSmallCapacity;
  400|  2.55G|}
_ZN4absl12lts_2026081718container_internal15is_single_groupEm:
  404|  31.8k|constexpr bool is_single_group(size_t capacity) {
  405|  31.8k|  return capacity <= Group::kWidth;
  406|  31.8k|}
_ZN4absl12lts_2026081718container_internal33IsCapacityValidForBlockedElementsEm:
  410|  11.5k|constexpr bool IsCapacityValidForBlockedElements(size_t cap) {
  411|  11.5k|  return !IsSmallCapacity(cap);
  412|  11.5k|}
_ZN4absl12lts_2026081718container_internal12NextCapacityEm:
  420|  25.6k|constexpr size_t NextCapacity(size_t n) {
  421|       |  ABSL_SWISSTABLE_ASSERT(IsValidCapacity(n) || n == 0);
  ------------------
  |  |  257|  25.6k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  422|  25.6k|  return n * 2 + 1;
  423|  25.6k|}
_ZN4absl12lts_2026081718container_internal16PreviousCapacityEm:
  426|  20.4k|constexpr size_t PreviousCapacity(size_t n) {
  427|       |  ABSL_SWISSTABLE_ASSERT(IsValidCapacity(n));
  ------------------
  |  |  257|  20.4k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  428|  20.4k|  return n / 2;
  429|  20.4k|}
_ZN4absl12lts_2026081718container_internal16CapacityToGrowthEm:
  444|  40.1k|constexpr size_t CapacityToGrowth(size_t capacity) {
  445|  40.1k|  ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity));
  ------------------
  |  |  257|  40.1k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  446|       |  // `capacity*7/8`
  447|  40.1k|  if (capacity <= kMaxCapacityForLoadFactorOne) {
  ------------------
  |  Branch (447:7): [True: 23.8k, False: 16.3k]
  ------------------
  448|       |    // For small capacities we leave at most one empty slot.
  449|  23.8k|    return capacity - (capacity >= Group::kWidth - 1);
  450|  23.8k|  }
  451|  16.3k|  return capacity - capacity / 8;
  452|  40.1k|}
_ZN4absl12lts_2026081718container_internal14SizeToCapacityEm:
  459|  11.5k|constexpr size_t SizeToCapacity(size_t size) {
  460|  11.5k|  if (size == 0) {
  ------------------
  |  Branch (460:7): [True: 0, False: 11.5k]
  ------------------
  461|      0|    return 0;
  462|      0|  }
  463|       |  // The minimum possible capacity is NormalizeCapacity(size).
  464|       |  // Shifting right `~size_t{}` by `leading_zeros` yields
  465|       |  // NormalizeCapacity(size).
  466|  11.5k|  int leading_zeros = absl::countl_zero(
  467|  11.5k|      size +
  468|       |      // Tables larger than half a group require at least one empty slot.
  469|  11.5k|      (size >= Group::kWidth / 2));
  470|  11.5k|  if (size < kMaxCapacityForLoadFactorOne) {
  ------------------
  |  Branch (470:7): [True: 11.1k, False: 447]
  ------------------
  471|  11.1k|    return (~size_t{}) >> leading_zeros;
  472|  11.1k|  }
  473|    447|  constexpr size_t kLast3Bits = size_t{7} << (sizeof(size_t) * 8 - 3);
  474|       |  // max_size_for_next_capacity = max_load_factor * next_capacity
  475|       |  //                            = (7/8) * (~size_t{} >> leading_zeros)
  476|       |  //                            = (7/8*~size_t{}) >> leading_zeros
  477|       |  //                            = kLast3Bits >> leading_zeros
  478|    447|  size_t max_size_for_next_capacity = kLast3Bits >> leading_zeros;
  479|       |  // Decrease shift if size is too big for the minimum capacity.
  480|    447|  leading_zeros -= static_cast<int>(size > max_size_for_next_capacity);
  481|    447|  return (~size_t{}) >> leading_zeros;
  482|  11.5k|}
_ZN4absl12lts_2026081718container_internal2H1Em:
  832|   617M|inline size_t H1(size_t hash) { return hash; }
_ZN4absl12lts_2026081718container_internal2H2Em:
  837|   680M|inline h2_t H2(size_t hash) { return hash >> (sizeof(size_t) * 8 - 7); }
_ZN4absl12lts_2026081718container_internal14NumClonedBytesEv:
 1149|  2.60G|constexpr size_t NumClonedBytes() { return Group::kWidth - 1; }
_ZN4absl12lts_2026081718container_internal15NumControlBytesEm:
 1152|  2.55G|constexpr size_t NumControlBytes(size_t capacity) {
 1153|  2.55G|  return IsSmallCapacity(capacity) ? 0 : capacity + 1 + NumClonedBytes();
  ------------------
  |  Branch (1153:10): [True: 76.7M, False: 2.47G]
  ------------------
 1154|  2.55G|}
_ZN4absl12lts_2026081718container_internal25GrowthInfoSizeForCapacityEm:
 1158|  99.7k|constexpr size_t GrowthInfoSizeForCapacity(size_t capacity) {
 1159|  99.7k|  if (IsSmallCapacity(capacity)) {
  ------------------
  |  Branch (1159:7): [True: 23.8k, False: 75.8k]
  ------------------
 1160|  23.8k|    return 0;
 1161|  23.8k|  }
 1162|  75.8k|  return capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound
  ------------------
  |  Branch (1162:10): [True: 48.8k, False: 27.0k]
  ------------------
 1163|  75.8k|             ? sizeof(uint8_t)
 1164|  75.8k|             : sizeof(uint64_t);
 1165|  99.7k|}
_ZN4absl12lts_2026081718container_internal25MetadataBeforeControlSizeEbm:
 1169|  88.1k|constexpr size_t MetadataBeforeControlSize(bool has_infoz, size_t capacity) {
 1170|  88.1k|  if (ABSL_PREDICT_FALSE(has_infoz)) {
  ------------------
  |  |  190|  88.1k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 88.1k]
  |  |  |  Branch (190:49): [Folded, False: 88.1k]
  |  |  |  Branch (190:58): [True: 0, False: 88.1k]
  |  |  ------------------
  ------------------
 1171|       |    // We always allocate 8 bytes of growth info for sampled tables to allow
 1172|       |    // branchless access to infoz pointer.
 1173|      0|    return sizeof(HashtablezInfoHandle) + sizeof(uint64_t) +
 1174|      0|           NumGenerationBytes();
 1175|      0|  }
 1176|  88.1k|  return GrowthInfoSizeForCapacity(capacity) + NumGenerationBytes();
 1177|  88.1k|}
_ZN4absl12lts_2026081718container_internal9AlignUpToEmm:
 1181|  88.1k|constexpr size_t AlignUpTo(size_t offset, size_t align) {
 1182|  88.1k|  return (offset + align - 1) & (~align + 1);
 1183|  88.1k|}
_ZN4absl12lts_2026081718container_internal24GetGrowthInfoFromControlEPNS1_6ctrl_tE:
 1279|  64.7M|inline GrowthInfoAccessor GetGrowthInfoFromControl(ctrl_t* control) {
 1280|  64.7M|  return GrowthInfoAccessor(control);
 1281|  64.7M|}
_ZN4absl12lts_2026081718container_internal12AssertIsFullERKPKNS1_6ctrl_tEPKvhPKhPKc:
 1589|   381M|                         const char* operation) {
 1590|   381M|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1590:7): [True: 381M, Folded]
  ------------------
 1591|       |  // `SwisstableDebugEnabled()` is also true for release builds with hardening
 1592|       |  // enabled. To minimize their impact in those builds:
 1593|       |  // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
 1594|       |  // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
 1595|       |  //   the chances that the hot paths will be inlined.
 1596|      0|  if (ABSL_PREDICT_FALSE(slot == nullptr)) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1597|      0|    ABSL_RAW_LOG(FATAL, "%s called on end() iterator.", operation);
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1598|      0|  }
 1599|      0|  if (ABSL_PREDICT_FALSE(slot == DefaultIterSlot())) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1600|      0|    ABSL_RAW_LOG(FATAL, "%s called on default-constructed iterator.",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1601|      0|                 operation);
 1602|      0|  }
 1603|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1603:7): [Folded, False: 0]
  ------------------
 1604|      0|    if (ABSL_PREDICT_FALSE(generation !=
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1605|      0|                           CrashIfIteratorIsInvalid(generation_ptr))) {
 1606|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1607|      0|                   "%s called on invalid iterator. The table could have "
 1608|      0|                   "rehashed or moved since this iterator was initialized.",
 1609|      0|                   operation);
 1610|      0|    }
 1611|      0|    if (ABSL_PREDICT_FALSE(!IsFull(CrashIfIteratorIsInvalid(ctrl)))) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1612|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1613|      0|          FATAL,
 1614|      0|          "%s called on invalid iterator. The element was likely erased.",
 1615|      0|          operation);
 1616|      0|    }
 1617|      0|  } else {
 1618|      0|    if (ABSL_PREDICT_FALSE(!IsFull(CrashIfIteratorIsInvalid(ctrl)))) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1619|       |      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1620|      0|          FATAL,
 1621|      0|          "%s called on invalid iterator. The element might have been erased "
 1622|      0|          "or the table might have rehashed. Consider running with "
 1623|      0|          "--config=asan to diagnose rehashing issues.",
 1624|      0|          operation);
 1625|      0|    }
 1626|      0|  }
 1627|      0|}
_ZN4absl12lts_2026081718container_internal26AssertIsValidForComparisonERKPKNS1_6ctrl_tEPKvhPKh:
 1633|  1.03G|                                       const GenerationType* generation_ptr) {
 1634|  1.03G|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1634:7): [True: 1.03G, Folded]
  ------------------
 1635|      0|  const bool ctrl_is_valid_for_comparison =
 1636|      0|      slot == nullptr || slot == DefaultIterSlot() ||
  ------------------
  |  Branch (1636:7): [True: 0, False: 0]
  |  Branch (1636:26): [True: 0, False: 0]
  ------------------
 1637|      0|      IsFull(CrashIfIteratorIsInvalid(ctrl));
  ------------------
  |  Branch (1637:7): [True: 0, False: 0]
  ------------------
 1638|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1638:7): [Folded, False: 0]
  ------------------
 1639|      0|    if (ABSL_PREDICT_FALSE(generation !=
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1640|      0|                           CrashIfIteratorIsInvalid(generation_ptr))) {
 1641|       |      // Note: in the case of a rehash, we would expect to see a sanitizer crash
 1642|       |      // in CrashIfIteratorIsInvalid so this assertion will only catch moved
 1643|       |      // table cases, unless we're using a custom allocator that does not
 1644|       |      // deallocate the old backing array (e.g. an arena allocator).
 1645|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1646|      0|          FATAL,
 1647|      0|          "Invalid iterator comparison. The table was likely moved (or "
 1648|      0|          "possibly rehashed) since this iterator was initialized.");
 1649|      0|    }
 1650|      0|    if (ABSL_PREDICT_FALSE(!ctrl_is_valid_for_comparison)) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1651|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1652|      0|          FATAL, "Invalid iterator comparison. The element was likely erased.");
 1653|      0|    }
 1654|      0|  } else {
 1655|      0|    ABSL_HARDENING_ASSERT_SLOW(
  ------------------
  |  |  188|      0|#define ABSL_HARDENING_ASSERT_SLOW(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |  131|      0|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1656|      0|        ctrl_is_valid_for_comparison &&
 1657|      0|        "Invalid iterator comparison. The element might have been erased or "
 1658|      0|        "the table might have rehashed. Consider running with --config=asan to "
 1659|      0|        "diagnose rehashing issues.");
 1660|      0|  }
 1661|      0|}
_ZN4absl12lts_2026081718container_internal19AssertSameContainerERKPKNS1_6ctrl_tES6_PKvS8_PKhSA_:
 1694|   518M|                                const GenerationType* generation_ptr_b) {
 1695|   518M|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1695:7): [True: 518M, Folded]
  ------------------
 1696|       |  // `SwisstableDebugEnabled()` is also true for release builds with hardening
 1697|       |  // enabled. To minimize their impact in those builds:
 1698|       |  // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
 1699|       |  // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
 1700|       |  //   the chances that the hot paths will be inlined.
 1701|       |
 1702|       |  // fail_if(is_invalid, message) crashes when is_invalid is true and provides
 1703|       |  // an error message based on `message`.
 1704|      0|  const auto fail_if = [](bool is_invalid, const char* message) {
 1705|      0|    if (ABSL_PREDICT_FALSE(is_invalid)) {
 1706|      0|      ABSL_RAW_LOG(FATAL, "Invalid iterator comparison. %s", message);
 1707|      0|    }
 1708|      0|  };
 1709|       |
 1710|      0|  const bool a_is_default = slot_a == DefaultIterSlot();
 1711|      0|  const bool b_is_default = slot_b == DefaultIterSlot();
 1712|      0|  if (a_is_default && b_is_default) return;
  ------------------
  |  Branch (1712:7): [True: 0, False: 0]
  |  Branch (1712:23): [True: 0, False: 0]
  ------------------
 1713|      0|  fail_if(a_is_default != b_is_default,
 1714|      0|          "Comparing default-constructed hashtable iterator with a "
 1715|      0|          "non-default-constructed hashtable iterator.");
 1716|       |
 1717|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1717:7): [Folded, False: 0]
  ------------------
 1718|      0|    if (ABSL_PREDICT_TRUE(generation_ptr_a == generation_ptr_b)) return;
  ------------------
  |  |  191|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 0]
  |  |  |  Branch (191:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1719|      0|    const bool a_is_empty = IsEmptyGeneration(generation_ptr_a);
 1720|      0|    const bool b_is_empty = IsEmptyGeneration(generation_ptr_b);
 1721|      0|    fail_if(a_is_empty != b_is_empty,
 1722|      0|            "Comparing an iterator from an empty hashtable with an iterator "
 1723|      0|            "from a non-empty hashtable.");
 1724|      0|    fail_if(a_is_empty && b_is_empty,
  ------------------
  |  Branch (1724:13): [True: 0, False: 0]
  |  Branch (1724:27): [True: 0, False: 0]
  ------------------
 1725|      0|            "Comparing iterators from different empty hashtables.");
 1726|       |
 1727|      0|    const bool a_is_end = slot_a == nullptr;
 1728|      0|    const bool b_is_end = slot_b == nullptr;
 1729|      0|    fail_if(a_is_end || b_is_end,
  ------------------
  |  Branch (1729:13): [True: 0, False: 0]
  |  Branch (1729:25): [True: 0, False: 0]
  ------------------
 1730|      0|            "Comparing iterator with an end() iterator from a different "
 1731|      0|            "hashtable.");
 1732|      0|    fail_if(true, "Comparing non-end() iterators from different hashtables.");
 1733|      0|  } else {
 1734|      0|    ABSL_HARDENING_ASSERT_SLOW(
  ------------------
  |  |  188|      0|#define ABSL_HARDENING_ASSERT_SLOW(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |  131|      0|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1735|      0|        AreItersFromSameContainer(ctrl_a, ctrl_b, slot_a, slot_b) &&
 1736|      0|        "Invalid iterator comparison. The iterators may be from different "
 1737|      0|        "containers or the container might have rehashed or moved. Consider "
 1738|      0|        "running with --config=asan to diagnose issues.");
 1739|      0|  }
 1740|      0|}
_ZN4absl12lts_2026081718container_internal8probe_h1ENS1_13ProbeCapacityEm:
 1800|   522M|inline probe_seq<Group::kWidth> probe_h1(ProbeCapacity capacity, size_t h1) {
 1801|   522M|  return probe_seq<Group::kWidth>(capacity, h1);
 1802|   522M|}
_ZN4absl12lts_2026081718container_internal5probeENS1_13ProbeCapacityEm:
 1803|   522M|inline probe_seq<Group::kWidth> probe(ProbeCapacity capacity, size_t hash) {
 1804|   522M|  return probe_h1(capacity, H1(hash));
 1805|   522M|}
_ZN4absl12lts_2026081718container_internal15MaxStorableSizeEv:
 1988|  11.5k|constexpr size_t MaxStorableSize() {
 1989|  11.5k|  return static_cast<size_t>(uint64_t{1}
 1990|  11.5k|                             << HashtableInlineData::kSizeBitCount) -
 1991|  11.5k|         1;
 1992|  11.5k|}
_ZN4absl12lts_2026081718container_internal12SooSlotIndexEv:
 2027|  3.07k|constexpr size_t SooSlotIndex() { return 1; }
_ZNK4absl12lts_2026081718container_internal21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EE9ToRawDataEv:
  537|  72.2k|  IntType ToRawData() const { return capacity_data_; }
_ZNK4absl12lts_2026081718container_internal19MaybeInitializedPtrINS1_6ctrl_tEE3getEv:
 1237|  1.86G|  T* get() const { ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(p); }
  ------------------
  |  |  484|  1.86G|#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
  ------------------
_ZN4absl12lts_2026081718container_internal19MaybeInitializedPtrINS1_6ctrl_tEE3setEPS3_:
 1238|  44.0k|  void set(T* ptr) { p = ptr; }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE4sizeEv:
  701|  60.6M|  size_t size() const { return static_cast<size_t>(data_ >> kSizeShift); }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE8set_sizeEm:
  719|  2.24k|  void set_size(size_t size) {
  720|  2.24k|    data_ =
  721|  2.24k|        (data_ & kMetadataMask) | (static_cast<uint64_t>(size) << kSizeShift);
  722|  2.24k|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE14increment_sizeEv:
  702|  64.1M|  void increment_size() { data_ += kSizeOneNoMetadata; }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE14decrement_sizeEv:
  706|  1.19k|  void decrement_size() { data_ -= kSizeOneNoMetadata; }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE5emptyEv:
  708|  36.6k|  bool empty() const { return data_ < kSizeOneNoMetadata; }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE12ToPublicSeedEm:
  792|   616M|  static constexpr uint64_t ToPublicSeed(uint64_t seed) {
  793|       |    // In kCapacityByLog mode, we shift public seed to the left to keep bits of
  794|       |    // the seed in the original place. It allows us to use single instruction to
  795|       |    // access the seed (e.g., `andl $0x7c0, %r8d`).
  796|   616M|    return seed << kCapacityBitStoredInDataCount;
  797|   616M|  }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE4seedEv:
  724|   616M|  PerTableSeed seed() const {
  725|   616M|    return PerTableSeed(ToPublicSeed(data_ & kSeedMask));
  726|   616M|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE8set_seedEh:
  799|  14.6k|  void set_seed(uint8_t seed) {
  800|  14.6k|    data_ = (data_ & ~kSeedMask) | (seed & kSeedMask);
  801|  14.6k|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE17generate_new_seedEv:
  728|  14.6k|  void generate_new_seed() { set_seed(NextHashTableSeed()); }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE8capacityEv:
  692|  3.16G|  HashtableCapacity capacity() const {
  693|  3.16G|    return HashtableCapacity::FromRawData(capacity_internal_);
  694|  3.16G|  }
_ZN4absl12lts_2026081718container_internal21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EE11FromRawDataEm:
  532|  3.16G|  static HashtableCapacityImpl FromRawData(uint64_t capacity) {
  533|  3.16G|    auto cap = HashtableCapacityImpl(uninitialized_tag_t{});
  534|  3.16G|    cap.capacity_data_ = static_cast<IntType>(capacity);
  535|  3.16G|    return cap;
  536|  3.16G|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE12set_capacityENS1_21HashtableCapacityImplILS3_1EEE:
  697|  44.0k|  void set_capacity(HashtableCapacity c) { capacity_internal_ = c.ToRawData(); }
_ZNK4absl12lts_2026081718container_internal21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EE8is_smallEv:
  557|   582M|  constexpr bool is_small() const {
  558|       |    // Small tables have capacity 0 or 1. This expression is valid for both
  559|       |    // capacity storage modes.
  560|       |    // Comparing capacity_data_ directly leads to a better generated code.
  561|       |    // One byte comparison is used before computing the capacity in order to
  562|       |    // detect small tables faster for critical path.
  563|   582M|    static_assert(kMaxSmallCapacity == 1);
  564|   582M|    return capacity_data_ <= 1;
  565|   582M|  }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE8is_smallEv:
  695|   582M|  bool is_small() const { return capacity().is_small(); }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE9has_infozEv:
  739|  64.2M|  bool has_infoz() const {
  740|  64.2M|    return ABSL_PREDICT_FALSE((data_ & kHasInfozMask) != 0);
  ------------------
  |  |  190|  64.2M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:49): [Folded, False: 64.2M]
  |  |  |  Branch (190:58): [True: 0, False: 64.2M]
  |  |  ------------------
  ------------------
  741|  64.2M|  }
_ZNK4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE21blocked_element_countEv:
  747|  43.2k|  size_t blocked_element_count() const {
  748|  43.2k|    return (data_ & kBlockedElementMask) >> kBlockedElementsShift;
  749|  43.2k|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE26init_blocked_element_countEm:
  754|  11.5k|  void init_blocked_element_count(uint64_t count) {
  755|  11.5k|    ABSL_SWISSTABLE_ASSERT(blocked_element_count() == 0);
  ------------------
  |  |  257|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  756|       |    ABSL_SWISSTABLE_ASSERT(count <= kMaxBlockedElementCount);
  ------------------
  |  |  257|  11.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  757|  11.5k|    data_ |= count << kBlockedElementsShift;
  758|  11.5k|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EE33set_blocked_element_count_to_zeroEv:
  759|  25.6k|  void set_blocked_element_count_to_zero() { data_ &= ~kBlockedElementMask; }
_ZN4absl12lts_2026081718container_internal12CommonFields13CreateDefaultILb0EEES2_v:
 1312|  28.1k|  static CommonFields CreateDefault() {
 1313|  28.1k|    return kSooEnabled ? CommonFields{soo_tag_t{}}
  ------------------
  |  Branch (1313:12): [Folded, False: 28.1k]
  ------------------
 1314|  28.1k|                       : CommonFields{non_soo_tag_t{}};
 1315|  28.1k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE19get_destroy_slot_fnEv:
 3922|  30.4k|  static constexpr DestroySlotFn get_destroy_slot_fn() {
 3923|  30.4k|    return PolicyTraits::template destroy_is_trivial<Alloc>()
  ------------------
  |  Branch (3923:12): [True: 30.4k, Folded]
  ------------------
 3924|  30.4k|               ? nullptr
 3925|  30.4k|               : &raw_hash_set::destroy_slot_fn_impl;
 3926|  30.4k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE28get_dealloc_backing_array_fnEv:
 3983|  11.5k|  static constexpr DeallocBackingArrayFn get_dealloc_backing_array_fn() {
 3984|  11.5k|    return &DeallocateBackingArray<BackingArrayAlignment(alignof(slot_type)),
 3985|  11.5k|                                   CharAlloc>;
 3986|  11.5k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE15destructor_implEv:
 3457|  15.4k|  void destructor_impl() {
 3458|  15.4k|    if (SwisstableGenerationsEnabled() &&
  ------------------
  |  Branch (3458:9): [Folded, False: 15.4k]
  |  Branch (3458:9): [Folded, False: 15.4k]
  ------------------
 3459|      0|        maybe_invalid_capacity().IsMovedFrom()) {
  ------------------
  |  Branch (3459:9): [True: 0, False: 0]
  ------------------
 3460|      0|      return;
 3461|      0|    }
 3462|       |    if constexpr (SooEnabled()) {
 3463|       |      if (is_small() &&
 3464|       |          (PolicyTraits::template destroy_is_trivial<Alloc>() || empty())) {
 3465|       |        return;
 3466|       |      }
 3467|       |      DestructSoo(common(), sizeof(slot_type), alignof(slot_type),
 3468|       |                  get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3469|       |                  &char_alloc_ref());
 3470|  15.4k|    } else {
 3471|  15.4k|      if (capacity() == 0) return;
  ------------------
  |  Branch (3471:11): [True: 3.92k, False: 11.5k]
  ------------------
 3472|  11.5k|      DestructNonSoo(common(), sizeof(slot_type), alignof(slot_type),
 3473|  11.5k|                     get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3474|  11.5k|                     &char_alloc_ref());
 3475|  11.5k|    }
 3476|  15.4k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE6commonEv:
 3838|  2.75G|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE15DefaultCapacityEv:
 2290|  15.4k|  constexpr static size_t DefaultCapacity() {
 2291|  15.4k|    return SooEnabled() ? SooCapacity() : 0;
  ------------------
  |  Branch (2291:12): [Folded, False: 15.4k]
  ------------------
 2292|  15.4k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8capacityEv:
 2786|   140k|  size_t capacity() const {
 2787|   140k|    const size_t cap = common().capacity();
 2788|       |    // Compiler complains when using functions in ASSUME so use local variables.
 2789|   140k|    [[maybe_unused]] const bool kIsValid = IsValidCapacity(cap);
 2790|   140k|    [[maybe_unused]] const size_t kDefaultCapacity = DefaultCapacity();
 2791|   140k|    [[maybe_unused]] const size_t kMaxValidCapacity = MaxValidCapacity();
 2792|   140k|    ABSL_ASSUME(kIsValid || cap == 0);
  ------------------
  |  |  272|   144k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  |  |  ------------------
  |  |  |  Branch (272:44): [True: 136k, False: 3.92k]
  |  |  |  Branch (272:44): [True: 3.92k, False: 0]
  |  |  ------------------
  ------------------
 2793|   140k|    ABSL_ASSUME(cap >= kDefaultCapacity);
  ------------------
  |  |  272|   140k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2794|   140k|    ABSL_ASSUME(cap <= kMaxValidCapacity);
  ------------------
  |  |  272|   140k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2795|   140k|    return cap;
 2796|   140k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE6commonEv:
 3837|  1.61G|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE7to_slotEPv:
 3519|   559M|  static ABSL_ATTRIBUTE_ALWAYS_INLINE slot_type* to_slot(void* buf) {
 3520|   559M|    return static_cast<slot_type*>(buf);
 3521|   559M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE14char_alloc_refEv:
 3893|   158k|  CharAlloc& char_alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEED2Ev:
 2746|  15.4k|  ~raw_hash_set() {
 2747|  15.4k|    destructor_impl();
 2748|       |    if constexpr (SwisstableGenerationsOrDebugEnabled()) {
 2749|       |      common().set_capacity(HashtableCapacity::CreateDestroyed());
 2750|       |    }
 2751|  15.4k|  }
_ZN4absl12lts_2026081718container_internal21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EEC2ENS1_19uninitialized_tag_tE:
  520|  3.16G|  explicit HashtableCapacityImpl(uninitialized_tag_t) {}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEEC2Ev:
 2534|      1|      std::is_nothrow_default_constructible_v<allocator_type>) {}
_ZN4absl12lts_2026081718container_internal21HashtableCapacityImplILNS1_28HashtableCapacityStorageModeE1EEC2Em:
  522|  72.2k|      : capacity_data_(static_cast<IntType>(
  523|  72.2k|            StorageMode == kCapacityByValue ? capacity
  ------------------
  |  Branch (523:13): [Folded, False: 72.2k]
  ------------------
  524|  72.2k|                                            : TrailingZeros(capacity + 1))) {
  525|       |    ABSL_SWISSTABLE_ASSERT(capacity == 0 || IsValidCapacity(capacity));
  ------------------
  |  |  257|  72.2k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
  526|  72.2k|  }
_ZN4absl12lts_2026081718container_internal23HashtableInlineDataImplILNS1_28HashtableCapacityStorageModeE1EEC2ENS1_21HashtableCapacityImplILS3_1EEENS1_19no_seed_empty_tag_tE:
  685|  28.1k|      : capacity_internal_(capacity.ToRawData()), data_(0) {}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE15unchecked_derefENSA_8iteratorE:
 3820|    256|  reference unchecked_deref(iterator it) { return it.unchecked_deref(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iterator15unchecked_derefEv:
 2466|  29.2M|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE22find_or_prepare_insertINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEENS4_4pairIPNS1_13map_slot_typeIS8_hEEbEERKT_:
 3777|    256|  std::pair<slot_type*, bool> find_or_prepare_insert(const K& key) {
 3778|    256|    AssertOnFind(key);
 3779|    256|    return is_small() ? find_or_prepare_insert_small(key)
  ------------------
  |  Branch (3779:12): [True: 2, False: 254]
  ------------------
 3780|    256|                      : find_or_prepare_insert_large(key);
 3781|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE12AssertOnFindINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEvRKT_:
 3725|    256|  void AssertOnFind([[maybe_unused]] const K& key) {
 3726|    256|    AssertHashEqConsistent(key);
 3727|    256|    AssertNotDebugCapacity();
 3728|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE22AssertHashEqConsistentINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEvRKT_:
 3736|    256|  void AssertHashEqConsistent(const K& key) {
 3737|    256|#ifdef NDEBUG
 3738|    256|    return;
 3739|      0|#endif
 3740|       |    // If the hash/eq functors are known to be consistent, then skip validation.
 3741|      0|    if (std::is_same_v<hasher, absl::container_internal::StringHash> &&
  ------------------
  |  Branch (3741:9): [True: 0, Folded]
  ------------------
 3742|      0|        std::is_same_v<key_equal, absl::container_internal::StringEq>) {
  ------------------
  |  Branch (3742:9): [True: 0, Folded]
  ------------------
 3743|      0|      return;
 3744|      0|    }
 3745|      0|    if (std::is_scalar_v<key_type> &&
  ------------------
  |  Branch (3745:9): [Folded, False: 0]
  ------------------
 3746|      0|        std::is_same_v<hasher, absl::Hash<key_type>> &&
  ------------------
  |  Branch (3746:9): [Folded, False: 0]
  ------------------
 3747|      0|        std::is_same_v<key_equal, std::equal_to<key_type>>) {
  ------------------
  |  Branch (3747:9): [Folded, False: 0]
  ------------------
 3748|      0|      return;
 3749|      0|    }
 3750|      0|    if (empty()) return;
  ------------------
  |  Branch (3750:9): [True: 0, False: 0]
  ------------------
 3751|       |
 3752|      0|    const size_t hash_of_arg = hash_of(key);
 3753|      0|    const auto assert_consistent = [&](const ctrl_t*, void* slot) {
 3754|      0|      const bool is_key_equal = equal_to(key, to_slot(slot));
 3755|      0|      if (!is_key_equal) return;
 3756|       |
 3757|      0|      [[maybe_unused]] const bool is_hash_equal =
 3758|      0|          hash_of_arg == hash_of(to_slot(slot));
 3759|      0|      assert((!is_key_equal || is_hash_equal) &&
 3760|      0|             "eq(k1, k2) must imply that hash(k1) == hash(k2). "
 3761|      0|             "hash/eq functors are inconsistent.");
 3762|      0|    };
 3763|       |
 3764|      0|    if (is_small()) {
  ------------------
  |  Branch (3764:9): [True: 0, False: 0]
  ------------------
 3765|      0|      assert_consistent(/*unused*/ nullptr, single_slot());
 3766|      0|      return;
 3767|      0|    }
 3768|       |    // We only do validation for small tables so that it's constant time.
 3769|      0|    if (capacity() > 16) return;
  ------------------
  |  Branch (3769:9): [True: 0, False: 0]
  ------------------
 3770|      0|    IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
 3771|      0|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE22AssertNotDebugCapacityEv:
 3731|  58.5M|  void AssertNotDebugCapacity() const { common().AssertNotDebugCapacity(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE6commonEv:
 3838|   175M|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8is_smallEv:
 2312|  29.2M|  bool is_small() const { return common().is_small(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE28find_or_prepare_insert_smallINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEENS4_4pairIPNS1_13map_slot_typeIS8_hEEbEERKT_:
 3660|      2|  find_or_prepare_insert_small(const K& key) {
 3661|      2|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|      2|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3662|       |    if constexpr (SooEnabled()) {
 3663|       |      return find_or_prepare_insert_soo(key);
 3664|       |    }
 3665|      2|    if (!empty()) {
  ------------------
  |  Branch (3665:9): [True: 1, False: 1]
  ------------------
 3666|      1|      if (equal_to(key, single_slot())) {
  ------------------
  |  Branch (3666:11): [True: 0, False: 1]
  ------------------
 3667|      0|        return {single_slot(), false};
 3668|      0|      }
 3669|      1|    }
 3670|      2|    return {to_slot(PrepareInsertSmallNonSoo(
 3671|      2|                common(), GetPolicyFunctions(),
 3672|      2|                HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})),
 3673|      2|            true};
 3674|      2|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE5emptyEv:
 2778|      2|  bool empty() const { return !size(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE4sizeEv:
 2779|      2|  size_t size() const {
 2780|      2|    AssertNotDebugCapacity();
 2781|      2|    const size_t size = common().size();
 2782|      2|    [[maybe_unused]] const size_t kMaxValidSize = MaxValidSize();
 2783|      2|    ABSL_ASSUME(size <= kMaxValidSize);
  ------------------
  |  |  272|      2|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2784|      2|    return size;
 2785|      2|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8equal_toINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEbRKT_PNS1_13map_slot_typeIS8_hEE:
 3502|     31|                                             slot_type* slot) const {
 3503|     31|    return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
 3504|     31|                               PolicyTraits::element(slot));
 3505|     31|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE6eq_refEv:
 3892|  29.2M|  const key_equal& eq_ref() const { return settings_.template get<2>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE11single_slotEv:
 3862|      1|  slot_type* single_slot() {
 3863|      1|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|      1|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3864|      1|    return SooEnabled()
  ------------------
  |  Branch (3864:12): [Folded, False: 1]
  ------------------
 3865|      1|               ? soo_slot()
 3866|      1|               : to_slot(common().slot_array(/*capacity=*/1));
 3867|      1|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE7to_slotEPv:
 3519|  58.5M|  static ABSL_ATTRIBUTE_ALWAYS_INLINE slot_type* to_slot(void* buf) {
 3520|  58.5M|    return static_cast<slot_type*>(buf);
 3521|  58.5M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE6commonEv:
 3837|   117M|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE18GetPolicyFunctionsEv:
 3988|    256|  static const PolicyFunctions& GetPolicyFunctions() {
 3989|    256|    static_assert(sizeof(slot_type) <= (std::numeric_limits<uint32_t>::max)(),
 3990|    256|                  "Slot size is too large. Use std::unique_ptr for value type "
 3991|    256|                  "or use absl::node_hash_{map,set}.");
 3992|    256|    static_assert(alignof(slot_type) <=
 3993|    256|                  size_t{(std::numeric_limits<uint16_t>::max)()});
 3994|    256|    static_assert(sizeof(key_type) <=
 3995|    256|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3996|    256|    static_assert(sizeof(value_type) <=
 3997|    256|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3998|    256|    static constexpr size_t kBackingArrayAlignment =
 3999|    256|        BackingArrayAlignment(alignof(slot_type));
 4000|    256|    static constexpr PolicyFunctions value = {
 4001|    256|        static_cast<uint32_t>(sizeof(key_type)),
 4002|    256|        static_cast<uint32_t>(sizeof(value_type)),
 4003|    256|        static_cast<uint32_t>(sizeof(slot_type)),
 4004|    256|        static_cast<uint16_t>(alignof(slot_type)), SooEnabled(),
 4005|    256|        ShouldSampleHashtablezInfoForAlloc<CharAlloc>(),
 4006|       |        // TODO(b/328722020): try to type erase
 4007|       |        // for standard layout and alignof(Hash) <= alignof(CommonFields).
 4008|    256|        std::is_empty_v<hasher> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4008:9): [True: 0, Folded]
  ------------------
 4009|    256|                                : &raw_hash_set::get_hash_ref_fn,
 4010|    256|        PolicyTraits::template get_hash_slot_fn<hasher, kIsDefaultHash>(),
 4011|    256|        PolicyTraits::transfer_uses_memcpy()
  ------------------
  |  Branch (4011:9): [True: 0, Folded]
  ------------------
 4012|    256|            ? TransferNRelocatable<sizeof(slot_type)>
 4013|    256|            : &raw_hash_set::transfer_n_slots_fn,
 4014|    256|        std::is_empty_v<Alloc> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4014:9): [True: 0, Folded]
  ------------------
 4015|    256|                               : &raw_hash_set::get_char_alloc_ref_fn,
 4016|    256|        &AllocateBackingArray<kBackingArrayAlignment, CharAlloc>,
 4017|    256|        get_dealloc_backing_array_fn(),
 4018|    256|        &raw_hash_set::transfer_unprobed_elements_to_next_capacity_fn};
 4019|    256|    return value;
 4020|    256|  }
_ZN4absl12lts_2026081718container_internal20TransferNRelocatableILm24EEEvPvS3_S3_m:
 2151|     11|                                                  size_t count) {
 2152|       |  // TODO(b/382423690): Experiment with making specialization for power of 2 and
 2153|       |  // non power of 2. This would require passing the size of the slot.
 2154|     11|  memcpy(dst, src, SizeOfSlot * count);
 2155|     11|}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE46transfer_unprobed_elements_to_next_capacity_fnERNS1_12CommonFieldsEPKNS1_6ctrl_tEPvSG_PFvSG_hmmE:
 3935|      5|                                    size_t source_offset, size_t h1)) {
 3936|      5|    const size_t new_capacity = common.capacity();
 3937|      5|    ABSL_ASSUME(new_capacity > kMaxSmallCapacity);
  ------------------
  |  |  272|      5|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3938|      5|    const size_t old_capacity = PreviousCapacity(new_capacity);
 3939|      5|    ABSL_ASSUME(old_capacity + 1 >= Group::kWidth);
  ------------------
  |  |  272|      5|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3940|      5|    ABSL_ASSUME((old_capacity + 1) % Group::kWidth == 0);
  ------------------
  |  |  272|      5|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3941|       |
 3942|      5|    auto* set = reinterpret_cast<raw_hash_set*>(&common);
 3943|      5|    slot_type* old_slots_ptr = to_slot(old_slots);
 3944|      5|    ctrl_t* new_ctrl = common.control();
 3945|      5|    slot_type* new_slots = set->slot_array(new_capacity);
 3946|       |
 3947|     36|    for (size_t group_index = 0; group_index < old_capacity;
  ------------------
  |  Branch (3947:34): [True: 31, False: 5]
  ------------------
 3948|     31|         group_index += Group::kWidth) {
 3949|     31|      GroupFullEmptyOrDeleted old_g(old_ctrl + group_index);
 3950|     31|      std::memset(new_ctrl + group_index, static_cast<int8_t>(ctrl_t::kEmpty),
 3951|     31|                  Group::kWidth);
 3952|     31|      std::memset(new_ctrl + group_index + old_capacity + 1,
 3953|     31|                  static_cast<int8_t>(ctrl_t::kEmpty), Group::kWidth);
 3954|       |      // TODO(b/382423690): try to type erase everything outside of the loop.
 3955|       |      // We will share a lot of code in expense of one function call per group.
 3956|    442|      for (auto in_fixed_group_index : old_g.MaskFull()) {
  ------------------
  |  Branch (3956:38): [True: 442, False: 31]
  ------------------
 3957|    442|        size_t old_index = group_index + in_fixed_group_index;
 3958|    442|        slot_type* old_slot = old_slots_ptr + old_index;
 3959|       |        // TODO(b/382423690): try to avoid entire hash calculation since we need
 3960|       |        // only one new bit of h1.
 3961|    442|        size_t hash = set->hash_of(old_slot);
 3962|    442|        size_t h1 = H1(hash);
 3963|    442|        h2_t h2 = H2(hash);
 3964|    442|        size_t new_index = TryFindNewIndexWithoutProbing(
 3965|    442|            h1, old_index, old_capacity, new_ctrl, new_capacity);
 3966|       |        // Note that encode_probed_element is allowed to use old_ctrl buffer
 3967|       |        // till and included the old_index.
 3968|    442|        if (ABSL_PREDICT_FALSE(new_index == kProbedElementIndexSentinel)) {
  ------------------
  |  |  190|    442|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 8, False: 434]
  |  |  |  Branch (190:49): [Folded, False: 442]
  |  |  |  Branch (190:58): [True: 8, False: 434]
  |  |  ------------------
  ------------------
 3969|      8|          encode_probed_element(probed_storage, h2, old_index, h1);
 3970|      8|          continue;
 3971|      8|        }
 3972|    434|        ABSL_SWISSTABLE_ASSERT((new_index & old_capacity) <= old_index);
  ------------------
  |  |  257|    434|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3973|       |        ABSL_SWISSTABLE_ASSERT(IsEmpty(new_ctrl[new_index]));
  ------------------
  |  |  257|    434|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3974|    434|        new_ctrl[new_index] = static_cast<ctrl_t>(h2);
 3975|    434|        auto* new_slot = new_slots + new_index;
 3976|    434|        SanitizerUnpoisonMemoryRegion(new_slot, sizeof(slot_type));
 3977|    434|        set->transfer(new_slot, old_slot);
 3978|    434|        SanitizerPoisonMemoryRegion(old_slot, sizeof(slot_type));
 3979|    434|      }
 3980|     31|    }
 3981|      5|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE10slot_arrayEm:
 3849|      5|  slot_type* slot_array(size_t capacity) const {
 3850|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|      5|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3851|      5|    return static_cast<slot_type*>(common().slot_array(capacity));
 3852|      5|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE7hash_ofEPNS1_13map_slot_typeIS8_hEE:
 3511|    442|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(slot_type* slot) const {
 3512|    442|    return PolicyTraits::apply(
 3513|    442|        HashElement<hasher, kIsDefaultHash>{hash_ref(), common().seed().seed()},
 3514|    442|        PolicyTraits::element(slot));
 3515|    442|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8hash_refEv:
 3890|  29.2M|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2026081718container_internal29TryFindNewIndexWithoutProbingIvEEmmmmPNS1_6ctrl_tEm:
 1827|  94.3M|                                            size_t new_capacity) {
 1828|  94.3M|  size_t index_diff = old_index - h1;
 1829|       |  // The first probe group starts with h1 & capacity.
 1830|       |  // All following groups start at (h1 + Group::kWidth * K) & capacity.
 1831|       |  // We can find an index within the floating group as index_diff modulo
 1832|       |  // Group::kWidth.
 1833|       |  // Both old and new capacity are larger than Group::kWidth so we can avoid
 1834|       |  // computing `& capacity`.
 1835|  94.3M|  size_t in_floating_group_index = index_diff & (Group::kWidth - 1);
 1836|       |  // By subtracting we will get the difference between the first probe group
 1837|       |  // and the probe group corresponding to old_index.
 1838|  94.3M|  index_diff -= in_floating_group_index;
 1839|  94.3M|  if (ABSL_PREDICT_TRUE((index_diff & old_capacity) == 0)) {
  ------------------
  |  |  191|  94.3M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 90.2M, False: 4.11M]
  |  |  |  Branch (191:48): [Folded, False: 94.3M]
  |  |  |  Branch (191:57): [True: 90.2M, False: 4.11M]
  |  |  ------------------
  ------------------
 1840|  90.2M|    size_t new_index = (h1 + in_floating_group_index) & new_capacity;
 1841|  90.2M|    ABSL_ASSUME(new_index != kProbedElementIndexSentinel);
  ------------------
  |  |  272|  90.2M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1842|  90.2M|    return new_index;
 1843|  90.2M|  }
 1844|  4.11M|  ABSL_SWISSTABLE_ASSERT(((old_index - h1) & old_capacity) >= Group::kWidth);
  ------------------
  |  |  257|  4.11M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 1845|       |  // Try to insert element into the first probe group.
 1846|       |  // new_ctrl is not yet fully initialized so we can't use regular search via
 1847|       |  // find_first_non_full.
 1848|       |
 1849|       |  // We can search in the first probe group only if it is located in already
 1850|       |  // initialized part of the table.
 1851|  4.11M|  if (ABSL_PREDICT_FALSE((h1 & old_capacity) >= old_index)) {
  ------------------
  |  |  190|  4.11M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 26.4k, False: 4.08M]
  |  |  |  Branch (190:49): [Folded, False: 4.11M]
  |  |  |  Branch (190:58): [True: 26.4k, False: 4.08M]
  |  |  ------------------
  ------------------
 1852|  26.4k|    return kProbedElementIndexSentinel;
 1853|  26.4k|  }
 1854|  4.08M|  size_t offset = h1 & new_capacity;
 1855|  4.08M|  Group new_g(new_ctrl + offset);
 1856|  4.08M|  if (auto mask = new_g.MaskNonFull(); ABSL_PREDICT_TRUE(mask)) {
  ------------------
  |  |  191|  4.08M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 4.08M, False: 1.98k]
  |  |  |  Branch (191:48): [Folded, False: 4.08M]
  |  |  |  Branch (191:57): [True: 4.08M, False: 1.98k]
  |  |  ------------------
  ------------------
 1857|  4.08M|    size_t result = offset + mask.LowestBitSet();
 1858|  4.08M|    ABSL_ASSUME(result != kProbedElementIndexSentinel);
  ------------------
  |  |  272|  4.08M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1859|  4.08M|    return result;
 1860|  4.08M|  }
 1861|  1.98k|  return kProbedElementIndexSentinel;
 1862|  4.08M|}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8transferEPNS1_13map_slot_typeIS8_hEESD_:
 3377|    434|  void transfer(slot_type* to, slot_type* from) {
 3378|    434|    common().RunWithReentrancyGuard([&] {
 3379|    434|      allocator_type alloc(char_alloc_ref());
 3380|    434|      PolicyTraits::transfer(&alloc, to, from);
 3381|    434|    });
 3382|    434|  }
_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEhEEJEE8transferEPNS1_13map_slot_typeISA_hEESF_EUlvE_EEvT_:
 1486|    434|  void RunWithReentrancyGuard(F f) {
 1487|    434|#ifdef NDEBUG
 1488|    434|    f();
 1489|    434|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8transferEPNS1_13map_slot_typeIS8_hEESD_ENKUlvE_clEv:
 3378|    434|    common().RunWithReentrancyGuard([&] {
 3379|    434|      allocator_type alloc(char_alloc_ref());
 3380|    434|      PolicyTraits::transfer(&alloc, to, from);
 3381|    434|    });
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE14char_alloc_refEv:
 3893|    691|  CharAlloc& char_alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8hash_refEv:
 3889|      3|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE28find_or_prepare_insert_largeINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEENS4_4pairIPNS1_13map_slot_typeIS8_hEEbEERKT_:
 3677|    254|  std::pair<slot_type*, bool> find_or_prepare_insert_large(const K& key) {
 3678|    254|    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|    254|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3679|    254|    prefetch_heap_block();
 3680|    254|    const size_t cap = capacity();
 3681|    254|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|    254|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3682|    254|    const size_t hash = hash_of(key);
 3683|    254|    auto seq = probe(ProbeCapacity{cap}, hash);
 3684|    254|    const h2_t h2 = H2(hash);
 3685|    254|    const ctrl_t* ctrl = control();
 3686|    254|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3687|    279|    while (true) {
  ------------------
  |  Branch (3687:12): [True: 279, Folded]
  ------------------
 3688|    279|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3689|    279|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3690|    279|#endif
 3691|    279|      Group g{ctrl + seq.offset()};
 3692|    279|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3692:23): [True: 30, False: 279]
  ------------------
 3693|     30|        slot_type* slot = slot_array + seq.offset(i);
 3694|     30|        if (ABSL_PREDICT_TRUE(equal_to(key, slot))) {
  ------------------
  |  |  191|     30|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 30]
  |  |  |  Branch (191:48): [Folded, False: 30]
  |  |  |  Branch (191:57): [True: 0, False: 30]
  |  |  ------------------
  ------------------
 3695|      0|          return {slot, false};
 3696|      0|        }
 3697|     30|      }
 3698|    279|      auto mask_empty = g.MaskEmpty();
 3699|    279|      if (ABSL_PREDICT_TRUE(mask_empty)) {
  ------------------
  |  |  191|    279|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 254, False: 25]
  |  |  |  Branch (191:48): [Folded, False: 279]
  |  |  |  Branch (191:57): [True: 254, False: 25]
  |  |  ------------------
  ------------------
 3700|    254|        size_t target_group_offset = seq.offset();
 3701|    254|        void* slot =
 3702|    254|            SwisstableGenerationsEnabled()
  ------------------
  |  Branch (3702:13): [Folded, False: 254]
  ------------------
 3703|    254|                ? PrepareInsertLargeGenerationsEnabled(
 3704|      0|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3705|      0|                      FindInfo{target_group_offset, seq.index()},
 3706|      0|                      HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
 3707|    254|                : PrepareInsertLarge(
 3708|    254|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3709|    254|                      FindInfo{target_group_offset, seq.index()});
 3710|    254|        return {to_slot(slot), true};
 3711|    254|      }
 3712|     25|      seq.next();
 3713|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
  ------------------
  |  |  257|     25|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3714|     25|    }
 3715|    254|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE19prefetch_heap_blockEv:
 3830|  29.2M|  void prefetch_heap_block() const {
 3831|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  29.2M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3832|  29.2M|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3833|  29.2M|    __builtin_prefetch(control(), 0, 1);
 3834|  29.2M|#endif
 3835|  29.2M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8capacityEv:
 2786|    255|  size_t capacity() const {
 2787|    255|    const size_t cap = common().capacity();
 2788|       |    // Compiler complains when using functions in ASSUME so use local variables.
 2789|    255|    [[maybe_unused]] const bool kIsValid = IsValidCapacity(cap);
 2790|    255|    [[maybe_unused]] const size_t kDefaultCapacity = DefaultCapacity();
 2791|    255|    [[maybe_unused]] const size_t kMaxValidCapacity = MaxValidCapacity();
 2792|    255|    ABSL_ASSUME(kIsValid || cap == 0);
  ------------------
  |  |  272|    256|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  |  |  ------------------
  |  |  |  Branch (272:44): [True: 254, False: 1]
  |  |  |  Branch (272:44): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 2793|    255|    ABSL_ASSUME(cap >= kDefaultCapacity);
  ------------------
  |  |  272|    255|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2794|    255|    ABSL_ASSUME(cap <= kMaxValidCapacity);
  ------------------
  |  |  272|    255|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2795|    255|    return cap;
 2796|    255|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE7hash_ofINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEmRKT_:
 3507|    254|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
 3508|    254|    return HashElement<hasher, kIsDefaultHash>{hash_ref(),
 3509|    254|                                               common().seed().seed()}(key);
 3510|    254|  }
_ZN4absl12lts_2026081718container_internal9probe_seqILm16EEC2ENS1_13ProbeCapacityEm:
 1779|   522M|      : capacity_(capacity.capacity), offset_(hash & capacity_) {}
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE7controlEv:
 3845|  58.5M|  ctrl_t* control() const {
 3846|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  58.5M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3847|  58.5M|    return common().control();
 3848|  58.5M|  }
_ZNK4absl12lts_2026081718container_internal9probe_seqILm16EE6offsetEv:
 1782|  1.14G|  size_t offset() const { return offset_; }
_ZNK4absl12lts_2026081718container_internal9probe_seqILm16EE6offsetEm:
 1783|   209M|  size_t offset(size_t i) const { return (offset_ + i) & capacity_; }
_ZNK4absl12lts_2026081718container_internal9probe_seqILm16EE5indexEv:
 1791|  64.5M|  size_t index() const { return index_; }
_ZN4absl12lts_2026081718container_internal9probe_seqILm16EE4nextEv:
 1785|  19.2M|  void next() {
 1786|  19.2M|    index_ += Width;
 1787|  19.2M|    offset_ += index_;
 1788|  19.2M|    offset_ &= capacity_;
 1789|  19.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEENSF_IJEEEEEEvPNS1_13map_slot_typeIS8_hEEDpOT_:
 3792|    256|  void emplace_at(slot_type* slot, Args&&... args) {
 3793|    256|    construct(slot, std::forward<Args>(args)...);
 3794|       |
 3795|       |    // When is_small, find calls find_small and if size is 0, then it will
 3796|       |    // return an end iterator. This can happen in the raw_hash_set copy ctor.
 3797|       |    assert((is_small() ||
 3798|    256|            PolicyTraits::apply(FindElement{*this}, PolicyTraits::element(slot))
 3799|    256|                    .slot() == slot) &&
 3800|    256|           "constructed value does not match the lookup key");
 3801|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEENSF_IJEEEEEEvPNS1_13map_slot_typeIS8_hEEDpOT_:
 3365|    256|  void construct(slot_type* slot, Args&&... args) {
 3366|    256|    common().RunWithReentrancyGuard([&] {
 3367|    256|      allocator_type alloc(char_alloc_ref());
 3368|    256|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|    256|    });
 3370|    256|  }
_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEhEEJEE9constructIJRKNS6_21piecewise_construct_tENS6_5tupleIJRKNS6_12basic_stringIcS9_NS6_9allocatorIcEEEEEEENSH_IJEEEEEEvPNS1_13map_slot_typeISA_hEEDpOT_EUlvE_EEvT_:
 1486|    256|  void RunWithReentrancyGuard(F f) {
 1487|    256|#ifdef NDEBUG
 1488|    256|    f();
 1489|    256|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEENSF_IJEEEEEEvPNS1_13map_slot_typeIS8_hEEDpOT_ENKUlvE_clEv:
 3366|    256|    common().RunWithReentrancyGuard([&] {
 3367|    256|      allocator_type alloc(char_alloc_ref());
 3368|    256|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|    256|    });
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE29non_iterable_iterator_at_slotEPNS1_13map_slot_typeIS8_hEE:
 3806|    256|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3807|    256|    return {InsertIteratorControl(), slot, common().generation_ptr()};
 3808|    256|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS8_hEEPKh:
 2434|  29.2M|        : HashSetIteratorGenerationInfo(generation_ptr),
 2435|  29.2M|          ctrl_(ctrl),
 2436|  29.2M|          slot_(slot) {
 2437|       |      // This assumption helps the compiler know that any non-end iterator is
 2438|       |      // not equal to any end iterator.
 2439|  29.2M|      ABSL_ASSUME(slot != nullptr);
  ------------------
  |  |  272|  29.2M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2440|  29.2M|    }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEEC2EOSA_:
 2695|      1|        settings_(PolicyTraits::transfer_uses_memcpy() || !that.is_full_soo()
  ------------------
  |  Branch (2695:19): [True: 1, Folded]
  |  Branch (2695:59): [True: 0, False: 0]
  ------------------
 2696|      1|                      ? std::move(that.common())
 2697|      1|                      : CommonFields{full_soo_tag_t{},
 2698|      0|                                     that.common().soo_has_tried_sampling()},
 2699|      1|                  that.hash_ref(), that.eq_ref(), that.char_alloc_ref()) {
 2700|      1|    if (!PolicyTraits::transfer_uses_memcpy() && that.is_full_soo()) {
  ------------------
  |  Branch (2700:9): [Folded, False: 1]
  |  Branch (2700:50): [True: 0, False: 0]
  ------------------
 2701|      0|      transfer(soo_slot(), that.soo_slot());
 2702|      0|    }
 2703|      1|    that.common() = CommonFields::CreateDefault<SooEnabled()>();
 2704|      1|    annotate_for_bug_detection_on_move(that);
 2705|      1|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE6eq_refEv:
 3891|      1|  key_equal& eq_ref() { return settings_.template get<2>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE34annotate_for_bug_detection_on_moveERSA_:
 3557|      1|  void annotate_for_bug_detection_on_move([[maybe_unused]] raw_hash_set& that) {
 3558|       |    // We only enable moved-from validation when generations are enabled (rather
 3559|       |    // than using NDEBUG) to avoid issues in which NDEBUG is enabled in some
 3560|       |    // translation units but not in others.
 3561|      1|    if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (3561:9): [Folded, False: 1]
  ------------------
 3562|      0|      that.common().set_capacity(this == &that
  ------------------
  |  Branch (3562:34): [True: 0, False: 0]
  ------------------
 3563|      0|                                     ? HashtableCapacity::CreateSelfMovedFrom()
 3564|      0|                                     : HashtableCapacity::CreateMovedFrom());
 3565|      0|    }
 3566|      1|    if (!SwisstableGenerationsEnabled() ||
  ------------------
  |  Branch (3566:9): [True: 1, Folded]
  |  Branch (3566:9): [True: 1, Folded]
  ------------------
 3567|      0|        !maybe_invalid_capacity().IsValid() ||
  ------------------
  |  Branch (3567:9): [True: 0, False: 0]
  ------------------
 3568|      1|        capacity() == DefaultCapacity()) {
  ------------------
  |  Branch (3568:9): [True: 0, False: 0]
  ------------------
 3569|      1|      return;
 3570|      1|    }
 3571|      0|    common().increment_generation();
 3572|      0|    if (!empty() && common().should_rehash_for_bug_detection_on_move()) {
  ------------------
  |  Branch (3572:9): [True: 0, False: 0]
  |  Branch (3572:21): [True: 0, False: 0]
  ------------------
 3573|      0|      ResizeAllocatedTableWithSeedChange(common(), GetPolicyFunctions(),
 3574|      0|                                         capacity());
 3575|      0|    }
 3576|      0|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEED2Ev:
 2746|      1|  ~raw_hash_set() {
 2747|      1|    destructor_impl();
 2748|       |    if constexpr (SwisstableGenerationsOrDebugEnabled()) {
 2749|       |      common().set_capacity(HashtableCapacity::CreateDestroyed());
 2750|       |    }
 2751|      1|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE15destructor_implEv:
 3457|      1|  void destructor_impl() {
 3458|      1|    if (SwisstableGenerationsEnabled() &&
  ------------------
  |  Branch (3458:9): [Folded, False: 1]
  |  Branch (3458:9): [Folded, False: 1]
  ------------------
 3459|      0|        maybe_invalid_capacity().IsMovedFrom()) {
  ------------------
  |  Branch (3459:9): [True: 0, False: 0]
  ------------------
 3460|      0|      return;
 3461|      0|    }
 3462|       |    if constexpr (SooEnabled()) {
 3463|       |      if (is_small() &&
 3464|       |          (PolicyTraits::template destroy_is_trivial<Alloc>() || empty())) {
 3465|       |        return;
 3466|       |      }
 3467|       |      DestructSoo(common(), sizeof(slot_type), alignof(slot_type),
 3468|       |                  get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3469|       |                  &char_alloc_ref());
 3470|      1|    } else {
 3471|      1|      if (capacity() == 0) return;
  ------------------
  |  Branch (3471:11): [True: 1, False: 0]
  ------------------
 3472|      0|      DestructNonSoo(common(), sizeof(slot_type), alignof(slot_type),
 3473|      0|                     get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3474|      0|                     &char_alloc_ref());
 3475|      0|    }
 3476|      1|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEEC2Ev:
 2534|  15.4k|      std::is_nothrow_default_constructible_v<allocator_type>) {}
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE4findIS8_EENSA_14const_iteratorERKT_:
 3240|   425M|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3241|   425M|    return const_cast<raw_hash_set*>(this)->find(key);
 3242|   425M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE4findIS8_EENSA_8iteratorERKT_:
 3225|   425M|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3226|   425M|    AssertOnFind(key);
 3227|   425M|    if (is_small()) return find_small(key);
  ------------------
  |  Branch (3227:9): [True: 60.5M, False: 364M]
  ------------------
 3228|   364M|    prefetch_heap_block();
 3229|   364M|    return find_large(key);
 3230|   425M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE12AssertOnFindIS8_EEvRKT_:
 3725|   425M|  void AssertOnFind([[maybe_unused]] const K& key) {
 3726|   425M|    AssertHashEqConsistent(key);
 3727|   425M|    AssertNotDebugCapacity();
 3728|   425M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE22AssertHashEqConsistentIS8_EEvRKT_:
 3736|   425M|  void AssertHashEqConsistent(const K& key) {
 3737|   425M|#ifdef NDEBUG
 3738|   425M|    return;
 3739|      0|#endif
 3740|       |    // If the hash/eq functors are known to be consistent, then skip validation.
 3741|      0|    if (std::is_same_v<hasher, absl::container_internal::StringHash> &&
  ------------------
  |  Branch (3741:9): [True: 0, Folded]
  ------------------
 3742|      0|        std::is_same_v<key_equal, absl::container_internal::StringEq>) {
  ------------------
  |  Branch (3742:9): [True: 0, Folded]
  ------------------
 3743|      0|      return;
 3744|      0|    }
 3745|      0|    if (std::is_scalar_v<key_type> &&
  ------------------
  |  Branch (3745:9): [Folded, False: 0]
  ------------------
 3746|      0|        std::is_same_v<hasher, absl::Hash<key_type>> &&
  ------------------
  |  Branch (3746:9): [Folded, False: 0]
  ------------------
 3747|      0|        std::is_same_v<key_equal, std::equal_to<key_type>>) {
  ------------------
  |  Branch (3747:9): [Folded, False: 0]
  ------------------
 3748|      0|      return;
 3749|      0|    }
 3750|      0|    if (empty()) return;
  ------------------
  |  Branch (3750:9): [True: 0, False: 0]
  ------------------
 3751|       |
 3752|      0|    const size_t hash_of_arg = hash_of(key);
 3753|      0|    const auto assert_consistent = [&](const ctrl_t*, void* slot) {
 3754|      0|      const bool is_key_equal = equal_to(key, to_slot(slot));
 3755|      0|      if (!is_key_equal) return;
 3756|       |
 3757|      0|      [[maybe_unused]] const bool is_hash_equal =
 3758|      0|          hash_of_arg == hash_of(to_slot(slot));
 3759|      0|      assert((!is_key_equal || is_hash_equal) &&
 3760|      0|             "eq(k1, k2) must imply that hash(k1) == hash(k2). "
 3761|      0|             "hash/eq functors are inconsistent.");
 3762|      0|    };
 3763|       |
 3764|      0|    if (is_small()) {
  ------------------
  |  Branch (3764:9): [True: 0, False: 0]
  ------------------
 3765|      0|      assert_consistent(/*unused*/ nullptr, single_slot());
 3766|      0|      return;
 3767|      0|    }
 3768|       |    // We only do validation for small tables so that it's constant time.
 3769|      0|    if (capacity() > 16) return;
  ------------------
  |  Branch (3769:9): [True: 0, False: 0]
  ------------------
 3770|      0|    IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
 3771|      0|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE22AssertNotDebugCapacityEv:
 3731|  1.17G|  void AssertNotDebugCapacity() const { common().AssertNotDebugCapacity(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8is_smallEv:
 2312|   425M|  bool is_small() const { return common().is_small(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE10find_smallIS8_EENSA_8iteratorERKT_:
 3387|  60.5M|  ABSL_ATTRIBUTE_ALWAYS_INLINE iterator find_small(const key_arg<K>& key) {
 3388|  60.5M|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  60.5M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3389|  60.5M|    return empty() || !equal_to(key, single_slot()) ? end() : single_iterator();
  ------------------
  |  Branch (3389:12): [True: 27.9M, False: 32.6M]
  |  Branch (3389:23): [True: 26.9M, False: 5.62M]
  ------------------
 3390|  60.5M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE5emptyEv:
 2778|  60.5M|  bool empty() const { return !size(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE4sizeEv:
 2779|  60.5M|  size_t size() const {
 2780|  60.5M|    AssertNotDebugCapacity();
 2781|  60.5M|    const size_t size = common().size();
 2782|  60.5M|    [[maybe_unused]] const size_t kMaxValidSize = MaxValidSize();
 2783|  60.5M|    ABSL_ASSUME(size <= kMaxValidSize);
  ------------------
  |  |  272|  60.5M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2784|  60.5M|    return size;
 2785|  60.5M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8equal_toIS8_EEbRKT_PNS1_13map_slot_typeIS8_iEE:
 3502|   201M|                                             slot_type* slot) const {
 3503|   201M|    return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
 3504|   201M|                               PolicyTraits::element(slot));
 3505|   201M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE6eq_refEv:
 3892|   201M|  const key_equal& eq_ref() const { return settings_.template get<2>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE11single_slotEv:
 3862|  38.2M|  slot_type* single_slot() {
 3863|  38.2M|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  38.2M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3864|  38.2M|    return SooEnabled()
  ------------------
  |  Branch (3864:12): [Folded, False: 38.2M]
  ------------------
 3865|  38.2M|               ? soo_slot()
 3866|  38.2M|               : to_slot(common().slot_array(/*capacity=*/1));
 3867|  38.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE3endEv:
 2762|   689M|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2763|   689M|    AssertNotDebugCapacity();
 2764|   689M|    return iterator(common().generation_ptr());
 2765|   689M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratorC2EPKh:
 2443|   689M|        : HashSetIteratorGenerationInfo(generation_ptr), slot_(nullptr) {}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE15single_iteratorEv:
 3878|  5.62M|  iterator single_iterator() {
 3879|  5.62M|    return {SooControl(), single_slot(), common().generation_ptr()};
 3880|  5.62M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS8_iEEPKh:
 2434|   161M|        : HashSetIteratorGenerationInfo(generation_ptr),
 2435|   161M|          ctrl_(ctrl),
 2436|   161M|          slot_(slot) {
 2437|       |      // This assumption helps the compiler know that any non-end iterator is
 2438|       |      // not equal to any end iterator.
 2439|   161M|      ABSL_ASSUME(slot != nullptr);
  ------------------
  |  |  272|   161M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2440|   161M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE19prefetch_heap_blockEv:
 3830|   364M|  void prefetch_heap_block() const {
 3831|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|   364M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3832|   364M|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3833|   364M|    __builtin_prefetch(control(), 0, 1);
 3834|   364M|#endif
 3835|   364M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE7controlEv:
 3845|   729M|  ctrl_t* control() const {
 3846|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|   729M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3847|   729M|    return common().control();
 3848|   729M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE10find_largeIS8_EENSA_8iteratorERKT_:
 3393|   364M|  iterator find_large(const key_arg<K>& key) {
 3394|   364M|    ABSL_SWISSTABLE_ASSERT(!is_small());
  ------------------
  |  |  257|   364M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3395|   364M|    const size_t cap = common().capacity();
 3396|   364M|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|   364M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3397|   364M|    const size_t hash = hash_of(key);
 3398|   364M|    auto seq = probe(ProbeCapacity{cap}, hash);
 3399|   364M|    const h2_t h2 = H2(hash);
 3400|   364M|    ctrl_t* ctrl = control();
 3401|   364M|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3402|   369M|    while (true) {
  ------------------
  |  Branch (3402:12): [True: 369M, Folded]
  ------------------
 3403|   369M|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3404|   369M|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3405|   369M|#endif
 3406|   369M|      Group g{ctrl + seq.offset()};
 3407|   369M|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3407:23): [True: 168M, False: 213M]
  ------------------
 3408|   168M|        const size_t offset = seq.offset(i);
 3409|   168M|        if (ABSL_PREDICT_TRUE(equal_to(key, slot_array + offset)))
  ------------------
  |  |  191|   168M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 155M, False: 12.7M]
  |  |  |  Branch (191:48): [Folded, False: 168M]
  |  |  |  Branch (191:57): [True: 155M, False: 12.7M]
  |  |  ------------------
  ------------------
 3410|   155M|          return iterator_at_ptr(ctrl + offset, slot_array + offset);
 3411|   168M|      }
 3412|   213M|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  191|   213M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 208M, False: 5.07M]
  |  |  |  Branch (191:48): [Folded, False: 213M]
  |  |  |  Branch (191:57): [True: 208M, False: 5.07M]
  |  |  ------------------
  ------------------
 3413|  5.07M|      seq.next();
 3414|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= cap && "full table!");
  ------------------
  |  |  257|  5.07M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3415|  5.07M|    }
 3416|   364M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE7hash_ofIS8_EEmRKT_:
 3507|   364M|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
 3508|   364M|    return HashElement<hasher, kIsDefaultHash>{hash_ref(),
 3509|   364M|                                               common().seed().seed()}(key);
 3510|   364M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8hash_refEv:
 3890|   364M|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE15iterator_at_ptrEPNS1_6ctrl_tEPv:
 3816|   155M|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3817|   155M|    return {ctrl, to_slot(slot), common().generation_ptr()};
 3818|   155M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE14const_iteratorC2ENSA_8iteratorE:
 2494|   850M|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE3endEv:
 2770|   425M|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2771|   425M|    return const_cast<raw_hash_set*>(this)->end();
 2772|   425M|  }
_ZN4absl12lts_2026081718container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE14const_iteratorESD_:
 2508|   425M|    friend bool operator!=(const const_iterator& a, const const_iterator& b) {
 2509|   425M|      return !(a == b);
 2510|   425M|    }
_ZN4absl12lts_2026081718container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE14const_iteratorESD_:
 2505|   425M|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2506|   425M|      return a.inner_ == b.inner_;
 2507|   425M|    }
_ZN4absl12lts_2026081718container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratorESD_:
 2418|   425M|    friend bool operator==(const iterator& a, const iterator& b) {
 2419|   425M|      AssertIsValidForComparison(a.ctrl_, a.slot_, a.generation(),
 2420|   425M|                                 a.generation_ptr());
 2421|   425M|      AssertIsValidForComparison(b.ctrl_, b.slot_, b.generation(),
 2422|   425M|                                 b.generation_ptr());
 2423|   425M|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 2424|   425M|                          a.generation_ptr(), b.generation_ptr());
 2425|   425M|      return a.unchecked_equals(b);
 2426|   425M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iterator16unchecked_equalsERKSB_:
 2462|   425M|    bool unchecked_equals(const iterator& b) const { return slot_ == b.slot(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iterator4slotEv:
 2469|   425M|    slot_type* slot() const { return slot_; }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE14const_iteratorptEv:
 2497|   161M|    pointer operator->() const { return inner_.operator->(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratorptEv:
 2397|   161M|    pointer operator->() const {
 2398|   161M|      assert_is_full("operator->");
 2399|   161M|      return &operator*();
 2400|   161M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iterator14assert_is_fullEPKc:
 2445|   322M|    void assert_is_full(const char* operation) const {
 2446|   322M|      AssertIsFull(ctrl_, slot_, generation(), generation_ptr(), operation);
 2447|   322M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratordeEv:
 2391|   161M|    reference operator*() const {
 2392|   161M|      assert_is_full("operator*()");
 2393|   161M|      return unchecked_deref();
 2394|   161M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iterator15unchecked_derefEv:
 2466|   161M|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE5clearEv:
 2799|  18.9k|  ABSL_ATTRIBUTE_REINITIALIZES void clear() {
 2800|  18.9k|    Clear<SooEnabled()>(common(), GetPolicyFunctions(), get_destroy_slot_fn(),
 2801|  18.9k|                        &char_alloc_ref());
 2802|  18.9k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE18GetPolicyFunctionsEv:
 3988|   158k|  static const PolicyFunctions& GetPolicyFunctions() {
 3989|   158k|    static_assert(sizeof(slot_type) <= (std::numeric_limits<uint32_t>::max)(),
 3990|   158k|                  "Slot size is too large. Use std::unique_ptr for value type "
 3991|   158k|                  "or use absl::node_hash_{map,set}.");
 3992|   158k|    static_assert(alignof(slot_type) <=
 3993|   158k|                  size_t{(std::numeric_limits<uint16_t>::max)()});
 3994|   158k|    static_assert(sizeof(key_type) <=
 3995|   158k|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3996|   158k|    static_assert(sizeof(value_type) <=
 3997|   158k|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3998|   158k|    static constexpr size_t kBackingArrayAlignment =
 3999|   158k|        BackingArrayAlignment(alignof(slot_type));
 4000|   158k|    static constexpr PolicyFunctions value = {
 4001|   158k|        static_cast<uint32_t>(sizeof(key_type)),
 4002|   158k|        static_cast<uint32_t>(sizeof(value_type)),
 4003|   158k|        static_cast<uint32_t>(sizeof(slot_type)),
 4004|   158k|        static_cast<uint16_t>(alignof(slot_type)), SooEnabled(),
 4005|   158k|        ShouldSampleHashtablezInfoForAlloc<CharAlloc>(),
 4006|       |        // TODO(b/328722020): try to type erase
 4007|       |        // for standard layout and alignof(Hash) <= alignof(CommonFields).
 4008|   158k|        std::is_empty_v<hasher> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4008:9): [True: 0, Folded]
  ------------------
 4009|   158k|                                : &raw_hash_set::get_hash_ref_fn,
 4010|   158k|        PolicyTraits::template get_hash_slot_fn<hasher, kIsDefaultHash>(),
 4011|   158k|        PolicyTraits::transfer_uses_memcpy()
  ------------------
  |  Branch (4011:9): [True: 0, Folded]
  ------------------
 4012|   158k|            ? TransferNRelocatable<sizeof(slot_type)>
 4013|   158k|            : &raw_hash_set::transfer_n_slots_fn,
 4014|   158k|        std::is_empty_v<Alloc> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4014:9): [True: 0, Folded]
  ------------------
 4015|   158k|                               : &raw_hash_set::get_char_alloc_ref_fn,
 4016|   158k|        &AllocateBackingArray<kBackingArrayAlignment, CharAlloc>,
 4017|   158k|        get_dealloc_backing_array_fn(),
 4018|   158k|        &raw_hash_set::transfer_unprobed_elements_to_next_capacity_fn};
 4019|   158k|    return value;
 4020|   158k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE10slot_arrayEm:
 3849|  2.52k|  slot_type* slot_array(size_t capacity) const {
 3850|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  2.52k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3851|  2.52k|    return static_cast<slot_type*>(common().slot_array(capacity));
 3852|  2.52k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE7reserveEm:
 3178|  15.4k|  void reserve(size_t n) {
 3179|  15.4k|    if (ABSL_PREDICT_TRUE(n > DefaultCapacity())) {
  ------------------
  |  |  191|  15.4k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 11.5k, False: 3.92k]
  |  |  |  Branch (191:48): [Folded, False: 15.4k]
  |  |  |  Branch (191:57): [True: 11.5k, False: 3.92k]
  |  |  ------------------
  ------------------
 3180|  11.5k|      ReserveTableToFitNewSize(common(), GetPolicyFunctions(), n);
 3181|  11.5k|    }
 3182|  15.4k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE7emplaceIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEERiETnNS4_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENS4_4pairINSA_8iteratorEbEEDpOSK_:
 2960|   128k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2961|   128k|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2962|   128k|                               std::forward<Args>(args)...);
 2963|   128k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE19EmplaceDecomposableclINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJRKSG_EEENSK_IJRiEEEEEENS4_4pairINSA_8iteratorEbEERKT_DpOT0_:
 3337|   128k|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 3338|   128k|      auto res = s.find_or_prepare_insert(key);
 3339|   128k|      if (res.second) {
  ------------------
  |  Branch (3339:11): [True: 128k, False: 63]
  ------------------
 3340|   128k|        s.emplace_at(res.first, std::forward<Args>(args)...);
 3341|   128k|      }
 3342|   128k|      return {s.non_iterable_iterator_at_slot(res.first), res.second};
 3343|   128k|    }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE22find_or_prepare_insertINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEENS4_4pairIPNS1_13map_slot_typeIS8_iEEbEERKT_:
 3777|   128k|  std::pair<slot_type*, bool> find_or_prepare_insert(const K& key) {
 3778|   128k|    AssertOnFind(key);
 3779|   128k|    return is_small() ? find_or_prepare_insert_small(key)
  ------------------
  |  Branch (3779:12): [True: 5.37k, False: 122k]
  ------------------
 3780|   128k|                      : find_or_prepare_insert_large(key);
 3781|   128k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE12AssertOnFindINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEvRKT_:
 3725|   128k|  void AssertOnFind([[maybe_unused]] const K& key) {
 3726|   128k|    AssertHashEqConsistent(key);
 3727|   128k|    AssertNotDebugCapacity();
 3728|   128k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE22AssertHashEqConsistentINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEvRKT_:
 3736|   128k|  void AssertHashEqConsistent(const K& key) {
 3737|   128k|#ifdef NDEBUG
 3738|   128k|    return;
 3739|      0|#endif
 3740|       |    // If the hash/eq functors are known to be consistent, then skip validation.
 3741|      0|    if (std::is_same_v<hasher, absl::container_internal::StringHash> &&
  ------------------
  |  Branch (3741:9): [True: 0, Folded]
  ------------------
 3742|      0|        std::is_same_v<key_equal, absl::container_internal::StringEq>) {
  ------------------
  |  Branch (3742:9): [True: 0, Folded]
  ------------------
 3743|      0|      return;
 3744|      0|    }
 3745|      0|    if (std::is_scalar_v<key_type> &&
  ------------------
  |  Branch (3745:9): [Folded, False: 0]
  ------------------
 3746|      0|        std::is_same_v<hasher, absl::Hash<key_type>> &&
  ------------------
  |  Branch (3746:9): [Folded, False: 0]
  ------------------
 3747|      0|        std::is_same_v<key_equal, std::equal_to<key_type>>) {
  ------------------
  |  Branch (3747:9): [Folded, False: 0]
  ------------------
 3748|      0|      return;
 3749|      0|    }
 3750|      0|    if (empty()) return;
  ------------------
  |  Branch (3750:9): [True: 0, False: 0]
  ------------------
 3751|       |
 3752|      0|    const size_t hash_of_arg = hash_of(key);
 3753|      0|    const auto assert_consistent = [&](const ctrl_t*, void* slot) {
 3754|      0|      const bool is_key_equal = equal_to(key, to_slot(slot));
 3755|      0|      if (!is_key_equal) return;
 3756|       |
 3757|      0|      [[maybe_unused]] const bool is_hash_equal =
 3758|      0|          hash_of_arg == hash_of(to_slot(slot));
 3759|      0|      assert((!is_key_equal || is_hash_equal) &&
 3760|      0|             "eq(k1, k2) must imply that hash(k1) == hash(k2). "
 3761|      0|             "hash/eq functors are inconsistent.");
 3762|      0|    };
 3763|       |
 3764|      0|    if (is_small()) {
  ------------------
  |  Branch (3764:9): [True: 0, False: 0]
  ------------------
 3765|      0|      assert_consistent(/*unused*/ nullptr, single_slot());
 3766|      0|      return;
 3767|      0|    }
 3768|       |    // We only do validation for small tables so that it's constant time.
 3769|      0|    if (capacity() > 16) return;
  ------------------
  |  Branch (3769:9): [True: 0, False: 0]
  ------------------
 3770|      0|    IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
 3771|      0|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE28find_or_prepare_insert_smallINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEENS4_4pairIPNS1_13map_slot_typeIS8_iEEbEERKT_:
 3660|  5.37k|  find_or_prepare_insert_small(const K& key) {
 3661|  5.37k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  5.37k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3662|       |    if constexpr (SooEnabled()) {
 3663|       |      return find_or_prepare_insert_soo(key);
 3664|       |    }
 3665|  5.37k|    if (!empty()) {
  ------------------
  |  Branch (3665:9): [True: 0, False: 5.37k]
  ------------------
 3666|      0|      if (equal_to(key, single_slot())) {
  ------------------
  |  Branch (3666:11): [True: 0, False: 0]
  ------------------
 3667|      0|        return {single_slot(), false};
 3668|      0|      }
 3669|      0|    }
 3670|  5.37k|    return {to_slot(PrepareInsertSmallNonSoo(
 3671|  5.37k|                common(), GetPolicyFunctions(),
 3672|  5.37k|                HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})),
 3673|  5.37k|            true};
 3674|  5.37k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8equal_toINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEbRKT_PNS1_13map_slot_typeIS8_iEE:
 3502|  3.48k|                                             slot_type* slot) const {
 3503|  3.48k|    return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
 3504|  3.48k|                               PolicyTraits::element(slot));
 3505|  3.48k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8hash_refEv:
 3889|  5.37k|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE28find_or_prepare_insert_largeINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEENS4_4pairIPNS1_13map_slot_typeIS8_iEEbEERKT_:
 3677|   122k|  std::pair<slot_type*, bool> find_or_prepare_insert_large(const K& key) {
 3678|   122k|    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|   122k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3679|   122k|    prefetch_heap_block();
 3680|   122k|    const size_t cap = capacity();
 3681|   122k|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|   122k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3682|   122k|    const size_t hash = hash_of(key);
 3683|   122k|    auto seq = probe(ProbeCapacity{cap}, hash);
 3684|   122k|    const h2_t h2 = H2(hash);
 3685|   122k|    const ctrl_t* ctrl = control();
 3686|   122k|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3687|   123k|    while (true) {
  ------------------
  |  Branch (3687:12): [True: 123k, Folded]
  ------------------
 3688|   123k|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3689|   123k|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3690|   123k|#endif
 3691|   123k|      Group g{ctrl + seq.offset()};
 3692|   123k|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3692:23): [True: 3.48k, False: 123k]
  ------------------
 3693|  3.48k|        slot_type* slot = slot_array + seq.offset(i);
 3694|  3.48k|        if (ABSL_PREDICT_TRUE(equal_to(key, slot))) {
  ------------------
  |  |  191|  3.48k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 63, False: 3.42k]
  |  |  |  Branch (191:48): [Folded, False: 3.48k]
  |  |  |  Branch (191:57): [True: 63, False: 3.42k]
  |  |  ------------------
  ------------------
 3695|     63|          return {slot, false};
 3696|     63|        }
 3697|  3.48k|      }
 3698|   123k|      auto mask_empty = g.MaskEmpty();
 3699|   123k|      if (ABSL_PREDICT_TRUE(mask_empty)) {
  ------------------
  |  |  191|   123k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 122k, False: 685]
  |  |  |  Branch (191:48): [Folded, False: 123k]
  |  |  |  Branch (191:57): [True: 122k, False: 685]
  |  |  ------------------
  ------------------
 3700|   122k|        size_t target_group_offset = seq.offset();
 3701|   122k|        void* slot =
 3702|   122k|            SwisstableGenerationsEnabled()
  ------------------
  |  Branch (3702:13): [Folded, False: 122k]
  ------------------
 3703|   122k|                ? PrepareInsertLargeGenerationsEnabled(
 3704|      0|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3705|      0|                      FindInfo{target_group_offset, seq.index()},
 3706|      0|                      HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
 3707|   122k|                : PrepareInsertLarge(
 3708|   122k|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3709|   122k|                      FindInfo{target_group_offset, seq.index()});
 3710|   122k|        return {to_slot(slot), true};
 3711|   122k|      }
 3712|    685|      seq.next();
 3713|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
  ------------------
  |  |  257|    685|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3714|    685|    }
 3715|   122k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE7hash_ofINS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEmRKT_:
 3507|   122k|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
 3508|   122k|    return HashElement<hasher, kIsDefaultHash>{hash_ref(),
 3509|   122k|                                               common().seed().seed()}(key);
 3510|   122k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEENSF_IJRiEEEEEEvPNS1_13map_slot_typeIS8_iEEDpOT_:
 3792|   128k|  void emplace_at(slot_type* slot, Args&&... args) {
 3793|   128k|    construct(slot, std::forward<Args>(args)...);
 3794|       |
 3795|       |    // When is_small, find calls find_small and if size is 0, then it will
 3796|       |    // return an end iterator. This can happen in the raw_hash_set copy ctor.
 3797|       |    assert((is_small() ||
 3798|   128k|            PolicyTraits::apply(FindElement{*this}, PolicyTraits::element(slot))
 3799|   128k|                    .slot() == slot) &&
 3800|   128k|           "constructed value does not match the lookup key");
 3801|   128k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEENSF_IJRiEEEEEEvPNS1_13map_slot_typeIS8_iEEDpOT_:
 3365|   128k|  void construct(slot_type* slot, Args&&... args) {
 3366|   128k|    common().RunWithReentrancyGuard([&] {
 3367|   128k|      allocator_type alloc(char_alloc_ref());
 3368|   128k|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|   128k|    });
 3370|   128k|  }
_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEiEEJEE9constructIJRKNS6_21piecewise_construct_tENS6_5tupleIJRKNS6_12basic_stringIcS9_NS6_9allocatorIcEEEEEEENSH_IJRiEEEEEEvPNS1_13map_slot_typeISA_iEEDpOT_EUlvE_EEvT_:
 1486|   128k|  void RunWithReentrancyGuard(F f) {
 1487|   128k|#ifdef NDEBUG
 1488|   128k|    f();
 1489|   128k|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKNS4_12basic_stringIcS7_NS4_9allocatorIcEEEEEEENSF_IJRiEEEEEEvPNS1_13map_slot_typeIS8_iEEDpOT_ENKUlvE_clEv:
 3366|   128k|    common().RunWithReentrancyGuard([&] {
 3367|   128k|      allocator_type alloc(char_alloc_ref());
 3368|   128k|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|   128k|    });
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE29non_iterable_iterator_at_slotEPNS1_13map_slot_typeIS8_iEE:
 3806|   128k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3807|   128k|    return {InsertIteratorControl(), slot, common().generation_ptr()};
 3808|   128k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE4findIS8_EENSA_14const_iteratorERKT_:
 3240|  29.2M|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3241|  29.2M|    return const_cast<raw_hash_set*>(this)->find(key);
 3242|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE4findIS8_EENSA_8iteratorERKT_:
 3225|  29.2M|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3226|  29.2M|    AssertOnFind(key);
 3227|  29.2M|    if (is_small()) return find_small(key);
  ------------------
  |  Branch (3227:9): [True: 0, False: 29.2M]
  ------------------
 3228|  29.2M|    prefetch_heap_block();
 3229|  29.2M|    return find_large(key);
 3230|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE12AssertOnFindIS8_EEvRKT_:
 3725|  29.2M|  void AssertOnFind([[maybe_unused]] const K& key) {
 3726|  29.2M|    AssertHashEqConsistent(key);
 3727|  29.2M|    AssertNotDebugCapacity();
 3728|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE22AssertHashEqConsistentIS8_EEvRKT_:
 3736|  29.2M|  void AssertHashEqConsistent(const K& key) {
 3737|  29.2M|#ifdef NDEBUG
 3738|  29.2M|    return;
 3739|      0|#endif
 3740|       |    // If the hash/eq functors are known to be consistent, then skip validation.
 3741|      0|    if (std::is_same_v<hasher, absl::container_internal::StringHash> &&
  ------------------
  |  Branch (3741:9): [True: 0, Folded]
  ------------------
 3742|      0|        std::is_same_v<key_equal, absl::container_internal::StringEq>) {
  ------------------
  |  Branch (3742:9): [True: 0, Folded]
  ------------------
 3743|      0|      return;
 3744|      0|    }
 3745|      0|    if (std::is_scalar_v<key_type> &&
  ------------------
  |  Branch (3745:9): [Folded, False: 0]
  ------------------
 3746|      0|        std::is_same_v<hasher, absl::Hash<key_type>> &&
  ------------------
  |  Branch (3746:9): [Folded, False: 0]
  ------------------
 3747|      0|        std::is_same_v<key_equal, std::equal_to<key_type>>) {
  ------------------
  |  Branch (3747:9): [Folded, False: 0]
  ------------------
 3748|      0|      return;
 3749|      0|    }
 3750|      0|    if (empty()) return;
  ------------------
  |  Branch (3750:9): [True: 0, False: 0]
  ------------------
 3751|       |
 3752|      0|    const size_t hash_of_arg = hash_of(key);
 3753|      0|    const auto assert_consistent = [&](const ctrl_t*, void* slot) {
 3754|      0|      const bool is_key_equal = equal_to(key, to_slot(slot));
 3755|      0|      if (!is_key_equal) return;
 3756|       |
 3757|      0|      [[maybe_unused]] const bool is_hash_equal =
 3758|      0|          hash_of_arg == hash_of(to_slot(slot));
 3759|      0|      assert((!is_key_equal || is_hash_equal) &&
 3760|      0|             "eq(k1, k2) must imply that hash(k1) == hash(k2). "
 3761|      0|             "hash/eq functors are inconsistent.");
 3762|      0|    };
 3763|       |
 3764|      0|    if (is_small()) {
  ------------------
  |  Branch (3764:9): [True: 0, False: 0]
  ------------------
 3765|      0|      assert_consistent(/*unused*/ nullptr, single_slot());
 3766|      0|      return;
 3767|      0|    }
 3768|       |    // We only do validation for small tables so that it's constant time.
 3769|      0|    if (capacity() > 16) return;
  ------------------
  |  Branch (3769:9): [True: 0, False: 0]
  ------------------
 3770|      0|    IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
 3771|      0|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8equal_toIS8_EEbRKT_PNS1_13map_slot_typeIS8_hEE:
 3502|  29.2M|                                             slot_type* slot) const {
 3503|  29.2M|    return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
 3504|  29.2M|                               PolicyTraits::element(slot));
 3505|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE3endEv:
 2762|  29.2M|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2763|  29.2M|    AssertNotDebugCapacity();
 2764|  29.2M|    return iterator(common().generation_ptr());
 2765|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iteratorC2EPKh:
 2443|  29.2M|        : HashSetIteratorGenerationInfo(generation_ptr), slot_(nullptr) {}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE10find_largeIS8_EENSA_8iteratorERKT_:
 3393|  29.2M|  iterator find_large(const key_arg<K>& key) {
 3394|  29.2M|    ABSL_SWISSTABLE_ASSERT(!is_small());
  ------------------
  |  |  257|  29.2M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3395|  29.2M|    const size_t cap = common().capacity();
 3396|  29.2M|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  29.2M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3397|  29.2M|    const size_t hash = hash_of(key);
 3398|  29.2M|    auto seq = probe(ProbeCapacity{cap}, hash);
 3399|  29.2M|    const h2_t h2 = H2(hash);
 3400|  29.2M|    ctrl_t* ctrl = control();
 3401|  29.2M|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3402|  29.2M|    while (true) {
  ------------------
  |  Branch (3402:12): [True: 29.2M, Folded]
  ------------------
 3403|  29.2M|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3404|  29.2M|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3405|  29.2M|#endif
 3406|  29.2M|      Group g{ctrl + seq.offset()};
 3407|  29.2M|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3407:23): [True: 29.2M, False: 27]
  ------------------
 3408|  29.2M|        const size_t offset = seq.offset(i);
 3409|  29.2M|        if (ABSL_PREDICT_TRUE(equal_to(key, slot_array + offset)))
  ------------------
  |  |  191|  29.2M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 29.2M, False: 41.0k]
  |  |  |  Branch (191:48): [Folded, False: 29.2M]
  |  |  |  Branch (191:57): [True: 29.2M, False: 41.0k]
  |  |  ------------------
  ------------------
 3410|  29.2M|          return iterator_at_ptr(ctrl + offset, slot_array + offset);
 3411|  29.2M|      }
 3412|     27|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  191|     27|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 27, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 27]
  |  |  |  Branch (191:57): [True: 27, False: 0]
  |  |  ------------------
  ------------------
 3413|      0|      seq.next();
 3414|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= cap && "full table!");
  ------------------
  |  |  257|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3415|      0|    }
 3416|  29.2M|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE7hash_ofIS8_EEmRKT_:
 3507|  29.2M|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
 3508|  29.2M|    return HashElement<hasher, kIsDefaultHash>{hash_ref(),
 3509|  29.2M|                                               common().seed().seed()}(key);
 3510|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE15iterator_at_ptrEPNS1_6ctrl_tEPv:
 3816|  29.2M|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3817|  29.2M|    return {ctrl, to_slot(slot), common().generation_ptr()};
 3818|  29.2M|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE14const_iteratorC2ENSA_8iteratorE:
 2494|  58.5M|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE3endEv:
 2770|  29.2M|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2771|  29.2M|    return const_cast<raw_hash_set*>(this)->end();
 2772|  29.2M|  }
_ZN4absl12lts_2026081718container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE14const_iteratorESD_:
 2508|  29.2M|    friend bool operator!=(const const_iterator& a, const const_iterator& b) {
 2509|  29.2M|      return !(a == b);
 2510|  29.2M|    }
_ZN4absl12lts_2026081718container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE14const_iteratorESD_:
 2505|  29.2M|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2506|  29.2M|      return a.inner_ == b.inner_;
 2507|  29.2M|    }
_ZN4absl12lts_2026081718container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iteratorESD_:
 2418|  29.2M|    friend bool operator==(const iterator& a, const iterator& b) {
 2419|  29.2M|      AssertIsValidForComparison(a.ctrl_, a.slot_, a.generation(),
 2420|  29.2M|                                 a.generation_ptr());
 2421|  29.2M|      AssertIsValidForComparison(b.ctrl_, b.slot_, b.generation(),
 2422|  29.2M|                                 b.generation_ptr());
 2423|  29.2M|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 2424|  29.2M|                          a.generation_ptr(), b.generation_ptr());
 2425|  29.2M|      return a.unchecked_equals(b);
 2426|  29.2M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iterator16unchecked_equalsERKSB_:
 2462|  29.2M|    bool unchecked_equals(const iterator& b) const { return slot_ == b.slot(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iterator4slotEv:
 2469|  29.2M|    slot_type* slot() const { return slot_; }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE14const_iteratorptEv:
 2497|  29.2M|    pointer operator->() const { return inner_.operator->(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iteratorptEv:
 2397|  29.2M|    pointer operator->() const {
 2398|  29.2M|      assert_is_full("operator->");
 2399|  29.2M|      return &operator*();
 2400|  29.2M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iterator14assert_is_fullEPKc:
 2445|  58.5M|    void assert_is_full(const char* operation) const {
 2446|  58.5M|      AssertIsFull(ctrl_, slot_, generation(), generation_ptr(), operation);
 2447|  58.5M|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEhEEJEE8iteratordeEv:
 2391|  29.2M|    reference operator*() const {
 2392|  29.2M|      assert_is_full("operator*()");
 2393|  29.2M|      return unchecked_deref();
 2394|  29.2M|    }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE4findIS9_EENSC_8iteratorERKT_:
 3225|  64.1M|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3226|  64.1M|    AssertOnFind(key);
 3227|  64.1M|    if (is_small()) return find_small(key);
  ------------------
  |  Branch (3227:9): [True: 5.03k, False: 64.0M]
  ------------------
 3228|  64.0M|    prefetch_heap_block();
 3229|  64.0M|    return find_large(key);
 3230|  64.1M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE12AssertOnFindIS9_EEvRKT_:
 3725|   128M|  void AssertOnFind([[maybe_unused]] const K& key) {
 3726|   128M|    AssertHashEqConsistent(key);
 3727|   128M|    AssertNotDebugCapacity();
 3728|   128M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE22AssertHashEqConsistentIS9_EEvRKT_:
 3736|   128M|  void AssertHashEqConsistent(const K& key) {
 3737|   128M|#ifdef NDEBUG
 3738|   128M|    return;
 3739|      0|#endif
 3740|       |    // If the hash/eq functors are known to be consistent, then skip validation.
 3741|      0|    if (std::is_same_v<hasher, absl::container_internal::StringHash> &&
  ------------------
  |  Branch (3741:9): [Folded, False: 0]
  ------------------
 3742|      0|        std::is_same_v<key_equal, absl::container_internal::StringEq>) {
  ------------------
  |  Branch (3742:9): [Folded, False: 0]
  ------------------
 3743|      0|      return;
 3744|      0|    }
 3745|      0|    if (std::is_scalar_v<key_type> &&
  ------------------
  |  Branch (3745:9): [True: 0, Folded]
  ------------------
 3746|      0|        std::is_same_v<hasher, absl::Hash<key_type>> &&
  ------------------
  |  Branch (3746:9): [Folded, False: 0]
  ------------------
 3747|      0|        std::is_same_v<key_equal, std::equal_to<key_type>>) {
  ------------------
  |  Branch (3747:9): [Folded, False: 0]
  ------------------
 3748|      0|      return;
 3749|      0|    }
 3750|      0|    if (empty()) return;
  ------------------
  |  Branch (3750:9): [True: 0, False: 0]
  ------------------
 3751|       |
 3752|      0|    const size_t hash_of_arg = hash_of(key);
 3753|      0|    const auto assert_consistent = [&](const ctrl_t*, void* slot) {
 3754|      0|      const bool is_key_equal = equal_to(key, to_slot(slot));
 3755|      0|      if (!is_key_equal) return;
 3756|       |
 3757|      0|      [[maybe_unused]] const bool is_hash_equal =
 3758|      0|          hash_of_arg == hash_of(to_slot(slot));
 3759|      0|      assert((!is_key_equal || is_hash_equal) &&
 3760|      0|             "eq(k1, k2) must imply that hash(k1) == hash(k2). "
 3761|      0|             "hash/eq functors are inconsistent.");
 3762|      0|    };
 3763|       |
 3764|      0|    if (is_small()) {
  ------------------
  |  Branch (3764:9): [True: 0, False: 0]
  ------------------
 3765|      0|      assert_consistent(/*unused*/ nullptr, single_slot());
 3766|      0|      return;
 3767|      0|    }
 3768|       |    // We only do validation for small tables so that it's constant time.
 3769|      0|    if (capacity() > 16) return;
  ------------------
  |  Branch (3769:9): [True: 0, False: 0]
  ------------------
 3770|      0|    IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
 3771|      0|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE22AssertNotDebugCapacityEv:
 3731|   256M|  void AssertNotDebugCapacity() const { common().AssertNotDebugCapacity(); }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE6commonEv:
 3838|   927M|  const CommonFields& common() const { return settings_.template get<0>(); }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8is_smallEv:
 2312|   128M|  bool is_small() const { return common().is_small(); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE10find_smallIS9_EENSC_8iteratorERKT_:
 3387|  5.03k|  ABSL_ATTRIBUTE_ALWAYS_INLINE iterator find_small(const key_arg<K>& key) {
 3388|  5.03k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  5.03k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3389|  5.03k|    return empty() || !equal_to(key, single_slot()) ? end() : single_iterator();
  ------------------
  |  Branch (3389:12): [True: 2.51k, False: 2.51k]
  |  Branch (3389:23): [True: 2.51k, False: 0]
  ------------------
 3390|  5.03k|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE5emptyEv:
 2778|  10.0k|  bool empty() const { return !size(); }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE4sizeEv:
 2779|  10.0k|  size_t size() const {
 2780|  10.0k|    AssertNotDebugCapacity();
 2781|  10.0k|    const size_t size = common().size();
 2782|  10.0k|    [[maybe_unused]] const size_t kMaxValidSize = MaxValidSize();
 2783|  10.0k|    ABSL_ASSUME(size <= kMaxValidSize);
  ------------------
  |  |  272|  10.0k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2784|  10.0k|    return size;
 2785|  10.0k|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8equal_toIS9_EEbRKT_PNS1_13map_slot_typeIS9_SA_EE:
 3502|  11.5M|                                             slot_type* slot) const {
 3503|  11.5M|    return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
 3504|  11.5M|                               PolicyTraits::element(slot));
 3505|  11.5M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE6eq_refEv:
 3892|  11.5M|  const key_equal& eq_ref() const { return settings_.template get<2>(); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE11single_slotEv:
 3862|  5.03k|  slot_type* single_slot() {
 3863|  5.03k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  5.03k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3864|  5.03k|    return SooEnabled()
  ------------------
  |  Branch (3864:12): [Folded, False: 5.03k]
  ------------------
 3865|  5.03k|               ? soo_slot()
 3866|  5.03k|               : to_slot(common().slot_array(/*capacity=*/1));
 3867|  5.03k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE7to_slotEPv:
 3519|   192M|  static ABSL_ATTRIBUTE_ALWAYS_INLINE slot_type* to_slot(void* buf) {
 3520|   192M|    return static_cast<slot_type*>(buf);
 3521|   192M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE6commonEv:
 3837|   606M|  CommonFields& common() { return settings_.template get<0>(); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS9_SA_EEPKh:
 2434|  64.1M|        : HashSetIteratorGenerationInfo(generation_ptr),
 2435|  64.1M|          ctrl_(ctrl),
 2436|  64.1M|          slot_(slot) {
 2437|       |      // This assumption helps the compiler know that any non-end iterator is
 2438|       |      // not equal to any end iterator.
 2439|  64.1M|      ABSL_ASSUME(slot != nullptr);
  ------------------
  |  |  272|  64.1M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2440|  64.1M|    }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE19prefetch_heap_blockEv:
 3830|   128M|  void prefetch_heap_block() const {
 3831|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|   128M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3832|   128M|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3833|   128M|    __builtin_prefetch(control(), 0, 1);
 3834|   128M|#endif
 3835|   128M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE7controlEv:
 3845|   256M|  ctrl_t* control() const {
 3846|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|   256M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3847|   256M|    return common().control();
 3848|   256M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE10find_largeIS9_EENSC_8iteratorERKT_:
 3393|  64.0M|  iterator find_large(const key_arg<K>& key) {
 3394|  64.0M|    ABSL_SWISSTABLE_ASSERT(!is_small());
  ------------------
  |  |  257|  64.0M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3395|  64.0M|    const size_t cap = common().capacity();
 3396|  64.0M|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  64.0M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3397|  64.0M|    const size_t hash = hash_of(key);
 3398|  64.0M|    auto seq = probe(ProbeCapacity{cap}, hash);
 3399|  64.0M|    const h2_t h2 = H2(hash);
 3400|  64.0M|    ctrl_t* ctrl = control();
 3401|  64.0M|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3402|  71.1M|    while (true) {
  ------------------
  |  Branch (3402:12): [True: 71.1M, Folded]
  ------------------
 3403|  71.1M|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3404|  71.1M|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3405|  71.1M|#endif
 3406|  71.1M|      Group g{ctrl + seq.offset()};
 3407|  71.1M|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3407:23): [True: 5.78M, False: 71.1M]
  ------------------
 3408|  5.78M|        const size_t offset = seq.offset(i);
 3409|  5.78M|        if (ABSL_PREDICT_TRUE(equal_to(key, slot_array + offset)))
  ------------------
  |  |  191|  5.78M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 47.8k, False: 5.74M]
  |  |  |  Branch (191:48): [Folded, False: 5.78M]
  |  |  |  Branch (191:57): [True: 47.8k, False: 5.74M]
  |  |  ------------------
  ------------------
 3410|  47.8k|          return iterator_at_ptr(ctrl + offset, slot_array + offset);
 3411|  5.78M|      }
 3412|  71.1M|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  191|  71.1M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 64.0M, False: 7.07M]
  |  |  |  Branch (191:48): [Folded, False: 71.1M]
  |  |  |  Branch (191:57): [True: 64.0M, False: 7.07M]
  |  |  ------------------
  ------------------
 3413|  7.07M|      seq.next();
 3414|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= cap && "full table!");
  ------------------
  |  |  257|  7.07M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3415|  7.07M|    }
 3416|  64.0M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE7hash_ofIS9_EEmRKT_:
 3507|   128M|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
 3508|   128M|    return HashElement<hasher, kIsDefaultHash>{hash_ref(),
 3509|   128M|                                               common().seed().seed()}(key);
 3510|   128M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8hash_refEv:
 3890|   222M|  const hasher& hash_ref() const { return settings_.template get<1>(); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE15iterator_at_ptrEPNS1_6ctrl_tEPv:
 3816|  47.8k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3817|  47.8k|    return {ctrl, to_slot(slot), common().generation_ptr()};
 3818|  47.8k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iteratorESF_:
 2427|  64.1M|    friend bool operator!=(const iterator& a, const iterator& b) {
 2428|  64.1M|      return !(a == b);
 2429|  64.1M|    }
unigram_model.cc:_ZN4absl12lts_2026081718container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iteratorESF_:
 2418|  64.1M|    friend bool operator==(const iterator& a, const iterator& b) {
 2419|  64.1M|      AssertIsValidForComparison(a.ctrl_, a.slot_, a.generation(),
 2420|  64.1M|                                 a.generation_ptr());
 2421|  64.1M|      AssertIsValidForComparison(b.ctrl_, b.slot_, b.generation(),
 2422|  64.1M|                                 b.generation_ptr());
 2423|  64.1M|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 2424|  64.1M|                          a.generation_ptr(), b.generation_ptr());
 2425|  64.1M|      return a.unchecked_equals(b);
 2426|  64.1M|    }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iterator16unchecked_equalsERKSD_:
 2462|  64.1M|    bool unchecked_equals(const iterator& b) const { return slot_ == b.slot(); }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iterator4slotEv:
 2469|  64.1M|    slot_type* slot() const { return slot_; }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE3endEv:
 2762|   128M|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2763|   128M|    AssertNotDebugCapacity();
 2764|   128M|    return iterator(common().generation_ptr());
 2765|   128M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iteratorC2EPKh:
 2443|   128M|        : HashSetIteratorGenerationInfo(generation_ptr), slot_(nullptr) {}
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iteratorptEv:
 2397|  47.8k|    pointer operator->() const {
 2398|  47.8k|      assert_is_full("operator->");
 2399|  47.8k|      return &operator*();
 2400|  47.8k|    }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iterator14assert_is_fullEPKc:
 2445|  95.7k|    void assert_is_full(const char* operation) const {
 2446|  95.7k|      AssertIsFull(ctrl_, slot_, generation(), generation_ptr(), operation);
 2447|  95.7k|    }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iteratordeEv:
 2391|  47.8k|    reference operator*() const {
 2392|  47.8k|      assert_is_full("operator*()");
 2393|  47.8k|      return unchecked_deref();
 2394|  47.8k|    }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8iterator15unchecked_derefEv:
 2466|  47.8k|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE6insertEONSt3__14pairIS9_SA_EEQntsr29IsLifetimeBoundAssignmentFromINS1_18hash_policy_traitsIT_vE9init_typeEEE5value:
 2868|  64.0M|  {
 2869|  64.0M|    return emplace(std::move(value));
 2870|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE7emplaceIJNSt3__14pairIS9_SA_EEETnNSE_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSF_INSC_8iteratorEbEEDpOSI_:
 2960|  64.0M|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2961|  64.0M|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2962|  64.0M|                               std::forward<Args>(args)...);
 2963|  64.0M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE19EmplaceDecomposableclIS9_JRKNSt3__121piecewise_construct_tENSF_5tupleIJOS9_EEENSJ_IJOSA_EEEEEENSF_4pairINSC_8iteratorEbEERKT_DpOT0_:
 3337|  64.0M|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 3338|  64.0M|      auto res = s.find_or_prepare_insert(key);
 3339|  64.0M|      if (res.second) {
  ------------------
  |  Branch (3339:11): [True: 64.0M, False: 0]
  ------------------
 3340|  64.0M|        s.emplace_at(res.first, std::forward<Args>(args)...);
 3341|  64.0M|      }
 3342|  64.0M|      return {s.non_iterable_iterator_at_slot(res.first), res.second};
 3343|  64.0M|    }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE22find_or_prepare_insertIS9_EENSt3__14pairIPNS1_13map_slot_typeIS9_SA_EEbEERKT_:
 3777|  64.0M|  std::pair<slot_type*, bool> find_or_prepare_insert(const K& key) {
 3778|  64.0M|    AssertOnFind(key);
 3779|  64.0M|    return is_small() ? find_or_prepare_insert_small(key)
  ------------------
  |  Branch (3779:12): [True: 5.03k, False: 64.0M]
  ------------------
 3780|  64.0M|                      : find_or_prepare_insert_large(key);
 3781|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE28find_or_prepare_insert_smallIS9_EENSt3__14pairIPNS1_13map_slot_typeIS9_SA_EEbEERKT_:
 3660|  5.03k|  find_or_prepare_insert_small(const K& key) {
 3661|  5.03k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  5.03k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3662|       |    if constexpr (SooEnabled()) {
 3663|       |      return find_or_prepare_insert_soo(key);
 3664|       |    }
 3665|  5.03k|    if (!empty()) {
  ------------------
  |  Branch (3665:9): [True: 2.51k, False: 2.51k]
  ------------------
 3666|  2.51k|      if (equal_to(key, single_slot())) {
  ------------------
  |  Branch (3666:11): [True: 0, False: 2.51k]
  ------------------
 3667|      0|        return {single_slot(), false};
 3668|      0|      }
 3669|  2.51k|    }
 3670|  5.03k|    return {to_slot(PrepareInsertSmallNonSoo(
 3671|  5.03k|                common(), GetPolicyFunctions(),
 3672|  5.03k|                HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})),
 3673|  5.03k|            true};
 3674|  5.03k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE18GetPolicyFunctionsEv:
 3988|  64.0M|  static const PolicyFunctions& GetPolicyFunctions() {
 3989|  64.0M|    static_assert(sizeof(slot_type) <= (std::numeric_limits<uint32_t>::max)(),
 3990|  64.0M|                  "Slot size is too large. Use std::unique_ptr for value type "
 3991|  64.0M|                  "or use absl::node_hash_{map,set}.");
 3992|  64.0M|    static_assert(alignof(slot_type) <=
 3993|  64.0M|                  size_t{(std::numeric_limits<uint16_t>::max)()});
 3994|  64.0M|    static_assert(sizeof(key_type) <=
 3995|  64.0M|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3996|  64.0M|    static_assert(sizeof(value_type) <=
 3997|  64.0M|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3998|  64.0M|    static constexpr size_t kBackingArrayAlignment =
 3999|  64.0M|        BackingArrayAlignment(alignof(slot_type));
 4000|  64.0M|    static constexpr PolicyFunctions value = {
 4001|  64.0M|        static_cast<uint32_t>(sizeof(key_type)),
 4002|  64.0M|        static_cast<uint32_t>(sizeof(value_type)),
 4003|  64.0M|        static_cast<uint32_t>(sizeof(slot_type)),
 4004|  64.0M|        static_cast<uint16_t>(alignof(slot_type)), SooEnabled(),
 4005|  64.0M|        ShouldSampleHashtablezInfoForAlloc<CharAlloc>(),
 4006|       |        // TODO(b/328722020): try to type erase
 4007|       |        // for standard layout and alignof(Hash) <= alignof(CommonFields).
 4008|  64.0M|        std::is_empty_v<hasher> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4008:9): [True: 0, Folded]
  ------------------
 4009|  64.0M|                                : &raw_hash_set::get_hash_ref_fn,
 4010|  64.0M|        PolicyTraits::template get_hash_slot_fn<hasher, kIsDefaultHash>(),
 4011|  64.0M|        PolicyTraits::transfer_uses_memcpy()
  ------------------
  |  Branch (4011:9): [True: 0, Folded]
  ------------------
 4012|  64.0M|            ? TransferNRelocatable<sizeof(slot_type)>
 4013|  64.0M|            : &raw_hash_set::transfer_n_slots_fn,
 4014|  64.0M|        std::is_empty_v<Alloc> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4014:9): [True: 0, Folded]
  ------------------
 4015|  64.0M|                               : &raw_hash_set::get_char_alloc_ref_fn,
 4016|  64.0M|        &AllocateBackingArray<kBackingArrayAlignment, CharAlloc>,
 4017|  64.0M|        get_dealloc_backing_array_fn(),
 4018|  64.0M|        &raw_hash_set::transfer_unprobed_elements_to_next_capacity_fn};
 4019|  64.0M|    return value;
 4020|  64.0M|  }
_ZN4absl12lts_2026081718container_internal20TransferNRelocatableILm16EEEvPvS3_S3_m:
 2151|  35.9k|                                                  size_t count) {
 2152|       |  // TODO(b/382423690): Experiment with making specialization for power of 2 and
 2153|       |  // non power of 2. This would require passing the size of the slot.
 2154|  35.9k|  memcpy(dst, src, SizeOfSlot * count);
 2155|  35.9k|}
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE46transfer_unprobed_elements_to_next_capacity_fnERNS1_12CommonFieldsEPKNS1_6ctrl_tEPvSI_PFvSI_hmmE:
 3935|  20.4k|                                    size_t source_offset, size_t h1)) {
 3936|  20.4k|    const size_t new_capacity = common.capacity();
 3937|  20.4k|    ABSL_ASSUME(new_capacity > kMaxSmallCapacity);
  ------------------
  |  |  272|  20.4k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3938|  20.4k|    const size_t old_capacity = PreviousCapacity(new_capacity);
 3939|  20.4k|    ABSL_ASSUME(old_capacity + 1 >= Group::kWidth);
  ------------------
  |  |  272|  20.4k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3940|  20.4k|    ABSL_ASSUME((old_capacity + 1) % Group::kWidth == 0);
  ------------------
  |  |  272|  20.4k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3941|       |
 3942|  20.4k|    auto* set = reinterpret_cast<raw_hash_set*>(&common);
 3943|  20.4k|    slot_type* old_slots_ptr = to_slot(old_slots);
 3944|  20.4k|    ctrl_t* new_ctrl = common.control();
 3945|  20.4k|    slot_type* new_slots = set->slot_array(new_capacity);
 3946|       |
 3947|  6.75M|    for (size_t group_index = 0; group_index < old_capacity;
  ------------------
  |  Branch (3947:34): [True: 6.73M, False: 20.4k]
  ------------------
 3948|  6.73M|         group_index += Group::kWidth) {
 3949|  6.73M|      GroupFullEmptyOrDeleted old_g(old_ctrl + group_index);
 3950|  6.73M|      std::memset(new_ctrl + group_index, static_cast<int8_t>(ctrl_t::kEmpty),
 3951|  6.73M|                  Group::kWidth);
 3952|  6.73M|      std::memset(new_ctrl + group_index + old_capacity + 1,
 3953|  6.73M|                  static_cast<int8_t>(ctrl_t::kEmpty), Group::kWidth);
 3954|       |      // TODO(b/382423690): try to type erase everything outside of the loop.
 3955|       |      // We will share a lot of code in expense of one function call per group.
 3956|  94.3M|      for (auto in_fixed_group_index : old_g.MaskFull()) {
  ------------------
  |  Branch (3956:38): [True: 94.3M, False: 6.73M]
  ------------------
 3957|  94.3M|        size_t old_index = group_index + in_fixed_group_index;
 3958|  94.3M|        slot_type* old_slot = old_slots_ptr + old_index;
 3959|       |        // TODO(b/382423690): try to avoid entire hash calculation since we need
 3960|       |        // only one new bit of h1.
 3961|  94.3M|        size_t hash = set->hash_of(old_slot);
 3962|  94.3M|        size_t h1 = H1(hash);
 3963|  94.3M|        h2_t h2 = H2(hash);
 3964|  94.3M|        size_t new_index = TryFindNewIndexWithoutProbing(
 3965|  94.3M|            h1, old_index, old_capacity, new_ctrl, new_capacity);
 3966|       |        // Note that encode_probed_element is allowed to use old_ctrl buffer
 3967|       |        // till and included the old_index.
 3968|  94.3M|        if (ABSL_PREDICT_FALSE(new_index == kProbedElementIndexSentinel)) {
  ------------------
  |  |  190|  94.3M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 28.3k, False: 94.3M]
  |  |  |  Branch (190:49): [Folded, False: 94.3M]
  |  |  |  Branch (190:58): [True: 28.3k, False: 94.3M]
  |  |  ------------------
  ------------------
 3969|  28.3k|          encode_probed_element(probed_storage, h2, old_index, h1);
 3970|  28.3k|          continue;
 3971|  28.3k|        }
 3972|  94.3M|        ABSL_SWISSTABLE_ASSERT((new_index & old_capacity) <= old_index);
  ------------------
  |  |  257|  94.3M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3973|       |        ABSL_SWISSTABLE_ASSERT(IsEmpty(new_ctrl[new_index]));
  ------------------
  |  |  257|  94.3M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3974|  94.3M|        new_ctrl[new_index] = static_cast<ctrl_t>(h2);
 3975|  94.3M|        auto* new_slot = new_slots + new_index;
 3976|  94.3M|        SanitizerUnpoisonMemoryRegion(new_slot, sizeof(slot_type));
 3977|  94.3M|        set->transfer(new_slot, old_slot);
 3978|  94.3M|        SanitizerPoisonMemoryRegion(old_slot, sizeof(slot_type));
 3979|  94.3M|      }
 3980|  6.73M|    }
 3981|  20.4k|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE10slot_arrayEm:
 3849|  20.4k|  slot_type* slot_array(size_t capacity) const {
 3850|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  20.4k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3851|  20.4k|    return static_cast<slot_type*>(common().slot_array(capacity));
 3852|  20.4k|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE7hash_ofEPNS1_13map_slot_typeIS9_SA_EE:
 3511|  94.3M|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(slot_type* slot) const {
 3512|  94.3M|    return PolicyTraits::apply(
 3513|  94.3M|        HashElement<hasher, kIsDefaultHash>{hash_ref(), common().seed().seed()},
 3514|  94.3M|        PolicyTraits::element(slot));
 3515|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8transferEPNS1_13map_slot_typeIS9_SA_EESF_:
 3377|  94.3M|  void transfer(slot_type* to, slot_type* from) {
 3378|  94.3M|    common().RunWithReentrancyGuard([&] {
 3379|  94.3M|      allocator_type alloc(char_alloc_ref());
 3380|  94.3M|      PolicyTraits::transfer(&alloc, to, from);
 3381|  94.3M|    });
 3382|  94.3M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS9_EEJEE8transferEPNS1_13map_slot_typeISB_SC_EESH_EUlvE_EEvT_:
 1486|  94.3M|  void RunWithReentrancyGuard(F f) {
 1487|  94.3M|#ifdef NDEBUG
 1488|  94.3M|    f();
 1489|  94.3M|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
unigram_model.cc:_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8transferEPNS1_13map_slot_typeIS9_SA_EESF_ENKUlvE_clEv:
 3378|  94.3M|    common().RunWithReentrancyGuard([&] {
 3379|  94.3M|      allocator_type alloc(char_alloc_ref());
 3380|  94.3M|      PolicyTraits::transfer(&alloc, to, from);
 3381|  94.3M|    });
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE14char_alloc_refEv:
 3893|   158M|  CharAlloc& char_alloc_ref() { return settings_.template get<3>(); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8hash_refEv:
 3889|  5.03k|  hasher& hash_ref() { return settings_.template get<1>(); }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE28find_or_prepare_insert_largeIS9_EENSt3__14pairIPNS1_13map_slot_typeIS9_SA_EEbEERKT_:
 3677|  64.0M|  std::pair<slot_type*, bool> find_or_prepare_insert_large(const K& key) {
 3678|  64.0M|    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  64.0M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3679|  64.0M|    prefetch_heap_block();
 3680|  64.0M|    const size_t cap = capacity();
 3681|  64.0M|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  64.0M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3682|  64.0M|    const size_t hash = hash_of(key);
 3683|  64.0M|    auto seq = probe(ProbeCapacity{cap}, hash);
 3684|  64.0M|    const h2_t h2 = H2(hash);
 3685|  64.0M|    const ctrl_t* ctrl = control();
 3686|  64.0M|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3687|  71.1M|    while (true) {
  ------------------
  |  Branch (3687:12): [True: 71.1M, Folded]
  ------------------
 3688|  71.1M|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3689|  71.1M|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3690|  71.1M|#endif
 3691|  71.1M|      Group g{ctrl + seq.offset()};
 3692|  71.1M|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3692:23): [True: 5.74M, False: 71.1M]
  ------------------
 3693|  5.74M|        slot_type* slot = slot_array + seq.offset(i);
 3694|  5.74M|        if (ABSL_PREDICT_TRUE(equal_to(key, slot))) {
  ------------------
  |  |  191|  5.74M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 5.74M]
  |  |  |  Branch (191:48): [Folded, False: 5.74M]
  |  |  |  Branch (191:57): [True: 0, False: 5.74M]
  |  |  ------------------
  ------------------
 3695|      0|          return {slot, false};
 3696|      0|        }
 3697|  5.74M|      }
 3698|  71.1M|      auto mask_empty = g.MaskEmpty();
 3699|  71.1M|      if (ABSL_PREDICT_TRUE(mask_empty)) {
  ------------------
  |  |  191|  71.1M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 64.0M, False: 7.07M]
  |  |  |  Branch (191:48): [Folded, False: 71.1M]
  |  |  |  Branch (191:57): [True: 64.0M, False: 7.07M]
  |  |  ------------------
  ------------------
 3700|  64.0M|        size_t target_group_offset = seq.offset();
 3701|  64.0M|        void* slot =
 3702|  64.0M|            SwisstableGenerationsEnabled()
  ------------------
  |  Branch (3702:13): [Folded, False: 64.0M]
  ------------------
 3703|  64.0M|                ? PrepareInsertLargeGenerationsEnabled(
 3704|      0|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3705|      0|                      FindInfo{target_group_offset, seq.index()},
 3706|      0|                      HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
 3707|  64.0M|                : PrepareInsertLarge(
 3708|  64.0M|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3709|  64.0M|                      FindInfo{target_group_offset, seq.index()});
 3710|  64.0M|        return {to_slot(slot), true};
 3711|  64.0M|      }
 3712|  7.07M|      seq.next();
 3713|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
  ------------------
  |  |  257|  7.07M|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3714|  7.07M|    }
 3715|  64.0M|  }
unigram_model.cc:_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE8capacityEv:
 2786|  64.0M|  size_t capacity() const {
 2787|  64.0M|    const size_t cap = common().capacity();
 2788|       |    // Compiler complains when using functions in ASSUME so use local variables.
 2789|  64.0M|    [[maybe_unused]] const bool kIsValid = IsValidCapacity(cap);
 2790|  64.0M|    [[maybe_unused]] const size_t kDefaultCapacity = DefaultCapacity();
 2791|  64.0M|    [[maybe_unused]] const size_t kMaxValidCapacity = MaxValidCapacity();
 2792|  64.0M|    ABSL_ASSUME(kIsValid || cap == 0);
  ------------------
  |  |  272|  64.0M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  |  |  ------------------
  |  |  |  Branch (272:44): [True: 64.0M, False: 0]
  |  |  |  Branch (272:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2793|  64.0M|    ABSL_ASSUME(cap >= kDefaultCapacity);
  ------------------
  |  |  272|  64.0M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2794|  64.0M|    ABSL_ASSUME(cap <= kMaxValidCapacity);
  ------------------
  |  |  272|  64.0M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2795|  64.0M|    return cap;
 2796|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE10emplace_atIJRKNSt3__121piecewise_construct_tENSE_5tupleIJOS9_EEENSI_IJOSA_EEEEEEvPNS1_13map_slot_typeIS9_SA_EEDpOT_:
 3792|  64.0M|  void emplace_at(slot_type* slot, Args&&... args) {
 3793|  64.0M|    construct(slot, std::forward<Args>(args)...);
 3794|       |
 3795|       |    // When is_small, find calls find_small and if size is 0, then it will
 3796|       |    // return an end iterator. This can happen in the raw_hash_set copy ctor.
 3797|       |    assert((is_small() ||
 3798|  64.0M|            PolicyTraits::apply(FindElement{*this}, PolicyTraits::element(slot))
 3799|  64.0M|                    .slot() == slot) &&
 3800|  64.0M|           "constructed value does not match the lookup key");
 3801|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE9constructIJRKNSt3__121piecewise_construct_tENSE_5tupleIJOS9_EEENSI_IJOSA_EEEEEEvPNS1_13map_slot_typeIS9_SA_EEDpOT_:
 3365|  64.0M|  void construct(slot_type* slot, Args&&... args) {
 3366|  64.0M|    common().RunWithReentrancyGuard([&] {
 3367|  64.0M|      allocator_type alloc(char_alloc_ref());
 3368|  64.0M|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|  64.0M|    });
 3370|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS9_EEJEE9constructIJRKNSt3__121piecewise_construct_tENSG_5tupleIJOSB_EEENSK_IJOSC_EEEEEEvPNS1_13map_slot_typeISB_SC_EEDpOT_EUlvE_EEvT_:
 1486|  64.0M|  void RunWithReentrancyGuard(F f) {
 1487|  64.0M|#ifdef NDEBUG
 1488|  64.0M|    f();
 1489|  64.0M|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
unigram_model.cc:_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE9constructIJRKNSt3__121piecewise_construct_tENSE_5tupleIJOS9_EEENSI_IJOSA_EEEEEEvPNS1_13map_slot_typeIS9_SA_EEDpOT_ENKUlvE_clEv:
 3366|  64.0M|    common().RunWithReentrancyGuard([&] {
 3367|  64.0M|      allocator_type alloc(char_alloc_ref());
 3368|  64.0M|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|  64.0M|    });
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE29non_iterable_iterator_at_slotEPNS1_13map_slot_typeIS9_SA_EE:
 3806|  64.0M|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3807|  64.0M|    return {InsertIteratorControl(), slot, common().generation_ptr()};
 3808|  64.0M|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEED2Ev:
 2746|  2.51k|  ~raw_hash_set() {
 2747|  2.51k|    destructor_impl();
 2748|       |    if constexpr (SwisstableGenerationsOrDebugEnabled()) {
 2749|       |      common().set_capacity(HashtableCapacity::CreateDestroyed());
 2750|       |    }
 2751|  2.51k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE15destructor_implEv:
 3457|  2.51k|  void destructor_impl() {
 3458|  2.51k|    if (SwisstableGenerationsEnabled() &&
  ------------------
  |  Branch (3458:9): [Folded, False: 2.51k]
  |  Branch (3458:9): [Folded, False: 2.51k]
  ------------------
 3459|      0|        maybe_invalid_capacity().IsMovedFrom()) {
  ------------------
  |  Branch (3459:9): [True: 0, False: 0]
  ------------------
 3460|      0|      return;
 3461|      0|    }
 3462|       |    if constexpr (SooEnabled()) {
 3463|       |      if (is_small() &&
 3464|       |          (PolicyTraits::template destroy_is_trivial<Alloc>() || empty())) {
 3465|       |        return;
 3466|       |      }
 3467|       |      DestructSoo(common(), sizeof(slot_type), alignof(slot_type),
 3468|       |                  get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3469|       |                  &char_alloc_ref());
 3470|  2.51k|    } else {
 3471|  2.51k|      if (capacity() == 0) return;
  ------------------
  |  Branch (3471:11): [True: 0, False: 2.51k]
  ------------------
 3472|  2.51k|      DestructNonSoo(common(), sizeof(slot_type), alignof(slot_type),
 3473|  2.51k|                     get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3474|  2.51k|                     &char_alloc_ref());
 3475|  2.51k|    }
 3476|  2.51k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE19get_destroy_slot_fnEv:
 3922|  2.51k|  static constexpr DestroySlotFn get_destroy_slot_fn() {
 3923|  2.51k|    return PolicyTraits::template destroy_is_trivial<Alloc>()
  ------------------
  |  Branch (3923:12): [True: 2.51k, Folded]
  ------------------
 3924|  2.51k|               ? nullptr
 3925|  2.51k|               : &raw_hash_set::destroy_slot_fn_impl;
 3926|  2.51k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEE28get_dealloc_backing_array_fnEv:
 3983|  2.51k|  static constexpr DeallocBackingArrayFn get_dealloc_backing_array_fn() {
 3984|  2.51k|    return &DeallocateBackingArray<BackingArrayAlignment(alignof(slot_type)),
 3985|  2.51k|                                   CharAlloc>;
 3986|  2.51k|  }
unigram_model.cc:_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEPS7_EEJEEC2Ev:
 2534|  2.51k|      std::is_nothrow_default_constructible_v<allocator_type>) {}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE5beginEv:
 2753|  4.13k|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2754|  4.13k|    if (ABSL_PREDICT_FALSE(empty())) return end();
  ------------------
  |  |  190|  4.13k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 358, False: 3.77k]
  |  |  |  Branch (190:49): [Folded, False: 4.13k]
  |  |  |  Branch (190:58): [True: 358, False: 3.77k]
  |  |  ------------------
  ------------------
 2755|  3.77k|    if (is_small()) return single_iterator();
  ------------------
  |  Branch (2755:9): [True: 1.24k, False: 2.52k]
  ------------------
 2756|  2.52k|    iterator it = {control(), slot_array(capacity()),
 2757|  2.52k|                   common().generation_ptr()};
 2758|  2.52k|    it.skip_empty_or_deleted();
 2759|       |    ABSL_SWISSTABLE_ASSERT(IsFull(*it.control()));
  ------------------
  |  |  257|  2.52k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 2760|  2.52k|    return it;
 2761|  3.77k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iterator21skip_empty_or_deletedEv:
 2451|  32.8k|    void skip_empty_or_deleted() {
 2452|  2.07M|      while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (2452:14): [True: 2.04M, False: 32.8k]
  ------------------
 2453|  2.04M|        ++ctrl_;
 2454|  2.04M|        ++slot_;
 2455|  2.04M|      }
 2456|  32.8k|    }
_ZN4absl12lts_2026081718container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratorESD_:
 2427|  34.4k|    friend bool operator!=(const iterator& a, const iterator& b) {
 2428|  34.4k|      return !(a == b);
 2429|  34.4k|    }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiEEJEE8iteratorppEv:
 2403|  30.3k|    iterator& operator++() {
 2404|  30.3k|      assert_is_full("operator++");
 2405|  30.3k|      ++ctrl_;
 2406|  30.3k|      ++slot_;
 2407|  30.3k|      skip_empty_or_deleted();
 2408|  30.3k|      if (ABSL_PREDICT_FALSE(*ctrl_ == ctrl_t::kSentinel)) slot_ = nullptr;
  ------------------
  |  |  190|  30.3k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 3.77k, False: 26.5k]
  |  |  |  Branch (190:49): [Folded, False: 30.3k]
  |  |  |  Branch (190:58): [True: 3.77k, False: 26.5k]
  |  |  ------------------
  ------------------
 2409|  30.3k|      return *this;
 2410|  30.3k|    }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEED2Ev:
 2746|  10.1k|  ~raw_hash_set() {
 2747|  10.1k|    destructor_impl();
 2748|       |    if constexpr (SwisstableGenerationsOrDebugEnabled()) {
 2749|       |      common().set_capacity(HashtableCapacity::CreateDestroyed());
 2750|       |    }
 2751|  10.1k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE15destructor_implEv:
 3457|  10.1k|  void destructor_impl() {
 3458|  10.1k|    if (SwisstableGenerationsEnabled() &&
  ------------------
  |  Branch (3458:9): [Folded, False: 10.1k]
  |  Branch (3458:9): [Folded, False: 10.1k]
  ------------------
 3459|      0|        maybe_invalid_capacity().IsMovedFrom()) {
  ------------------
  |  Branch (3459:9): [True: 0, False: 0]
  ------------------
 3460|      0|      return;
 3461|      0|    }
 3462|       |    if constexpr (SooEnabled()) {
 3463|       |      if (is_small() &&
 3464|       |          (PolicyTraits::template destroy_is_trivial<Alloc>() || empty())) {
 3465|       |        return;
 3466|       |      }
 3467|       |      DestructSoo(common(), sizeof(slot_type), alignof(slot_type),
 3468|       |                  get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3469|       |                  &char_alloc_ref());
 3470|  10.1k|    } else {
 3471|  10.1k|      if (capacity() == 0) return;
  ------------------
  |  Branch (3471:11): [True: 8.88k, False: 1.24k]
  ------------------
 3472|  1.24k|      DestructNonSoo(common(), sizeof(slot_type), alignof(slot_type),
 3473|  1.24k|                     get_destroy_slot_fn(), get_dealloc_backing_array_fn(),
 3474|  1.24k|                     &char_alloc_ref());
 3475|  1.24k|    }
 3476|  10.1k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8capacityEv:
 2786|  32.6k|  size_t capacity() const {
 2787|  32.6k|    const size_t cap = common().capacity();
 2788|       |    // Compiler complains when using functions in ASSUME so use local variables.
 2789|  32.6k|    [[maybe_unused]] const bool kIsValid = IsValidCapacity(cap);
 2790|  32.6k|    [[maybe_unused]] const size_t kDefaultCapacity = DefaultCapacity();
 2791|  32.6k|    [[maybe_unused]] const size_t kMaxValidCapacity = MaxValidCapacity();
 2792|  32.6k|    ABSL_ASSUME(kIsValid || cap == 0);
  ------------------
  |  |  272|  41.5k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  |  |  ------------------
  |  |  |  Branch (272:44): [True: 23.8k, False: 8.88k]
  |  |  |  Branch (272:44): [True: 8.88k, False: 0]
  |  |  ------------------
  ------------------
 2793|  32.6k|    ABSL_ASSUME(cap >= kDefaultCapacity);
  ------------------
  |  |  272|  32.6k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2794|  32.6k|    ABSL_ASSUME(cap <= kMaxValidCapacity);
  ------------------
  |  |  272|  32.6k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2795|  32.6k|    return cap;
 2796|  32.6k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE6commonEv:
 3838|   610k|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE6commonEv:
 3837|   355k|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE19get_destroy_slot_fnEv:
 3922|  1.24k|  static constexpr DestroySlotFn get_destroy_slot_fn() {
 3923|  1.24k|    return PolicyTraits::template destroy_is_trivial<Alloc>()
  ------------------
  |  Branch (3923:12): [True: 1.24k, Folded]
  ------------------
 3924|  1.24k|               ? nullptr
 3925|  1.24k|               : &raw_hash_set::destroy_slot_fn_impl;
 3926|  1.24k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE28get_dealloc_backing_array_fnEv:
 3983|  1.24k|  static constexpr DeallocBackingArrayFn get_dealloc_backing_array_fn() {
 3984|  1.24k|    return &DeallocateBackingArray<BackingArrayAlignment(alignof(slot_type)),
 3985|  1.24k|                                   CharAlloc>;
 3986|  1.24k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE14char_alloc_refEv:
 3893|  4.53k|  CharAlloc& char_alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEEC2Ev:
 2534|  10.1k|      std::is_nothrow_default_constructible_v<allocator_type>) {}
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE15unchecked_derefENSC_8iteratorE:
 3820|  47.7k|  reference unchecked_deref(iterator it) { return it.unchecked_deref(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iterator15unchecked_derefEv:
 2466|   124k|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE22find_or_prepare_insertIS8_EENS9_IPNS1_13map_slot_typeIS8_SA_EEbEERKT_:
 3777|  47.7k|  std::pair<slot_type*, bool> find_or_prepare_insert(const K& key) {
 3778|  47.7k|    AssertOnFind(key);
 3779|  47.7k|    return is_small() ? find_or_prepare_insert_small(key)
  ------------------
  |  Branch (3779:12): [True: 25.1k, False: 22.5k]
  ------------------
 3780|  47.7k|                      : find_or_prepare_insert_large(key);
 3781|  47.7k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE12AssertOnFindIS8_EEvRKT_:
 3725|   110k|  void AssertOnFind([[maybe_unused]] const K& key) {
 3726|   110k|    AssertHashEqConsistent(key);
 3727|   110k|    AssertNotDebugCapacity();
 3728|   110k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE22AssertHashEqConsistentIS8_EEvRKT_:
 3736|   110k|  void AssertHashEqConsistent(const K& key) {
 3737|   110k|#ifdef NDEBUG
 3738|   110k|    return;
 3739|      0|#endif
 3740|       |    // If the hash/eq functors are known to be consistent, then skip validation.
 3741|      0|    if (std::is_same_v<hasher, absl::container_internal::StringHash> &&
  ------------------
  |  Branch (3741:9): [True: 0, Folded]
  ------------------
 3742|      0|        std::is_same_v<key_equal, absl::container_internal::StringEq>) {
  ------------------
  |  Branch (3742:9): [True: 0, Folded]
  ------------------
 3743|      0|      return;
 3744|      0|    }
 3745|      0|    if (std::is_scalar_v<key_type> &&
  ------------------
  |  Branch (3745:9): [Folded, False: 0]
  ------------------
 3746|      0|        std::is_same_v<hasher, absl::Hash<key_type>> &&
  ------------------
  |  Branch (3746:9): [Folded, False: 0]
  ------------------
 3747|      0|        std::is_same_v<key_equal, std::equal_to<key_type>>) {
  ------------------
  |  Branch (3747:9): [Folded, False: 0]
  ------------------
 3748|      0|      return;
 3749|      0|    }
 3750|      0|    if (empty()) return;
  ------------------
  |  Branch (3750:9): [True: 0, False: 0]
  ------------------
 3751|       |
 3752|      0|    const size_t hash_of_arg = hash_of(key);
 3753|      0|    const auto assert_consistent = [&](const ctrl_t*, void* slot) {
 3754|      0|      const bool is_key_equal = equal_to(key, to_slot(slot));
 3755|      0|      if (!is_key_equal) return;
 3756|       |
 3757|      0|      [[maybe_unused]] const bool is_hash_equal =
 3758|      0|          hash_of_arg == hash_of(to_slot(slot));
 3759|      0|      assert((!is_key_equal || is_hash_equal) &&
 3760|      0|             "eq(k1, k2) must imply that hash(k1) == hash(k2). "
 3761|      0|             "hash/eq functors are inconsistent.");
 3762|      0|    };
 3763|       |
 3764|      0|    if (is_small()) {
  ------------------
  |  Branch (3764:9): [True: 0, False: 0]
  ------------------
 3765|      0|      assert_consistent(/*unused*/ nullptr, single_slot());
 3766|      0|      return;
 3767|      0|    }
 3768|       |    // We only do validation for small tables so that it's constant time.
 3769|      0|    if (capacity() > 16) return;
  ------------------
  |  Branch (3769:9): [True: 0, False: 0]
  ------------------
 3770|      0|    IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
 3771|      0|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE22AssertNotDebugCapacityEv:
 3731|   257k|  void AssertNotDebugCapacity() const { common().AssertNotDebugCapacity(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8is_smallEv:
 2312|   110k|  bool is_small() const { return common().is_small(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE28find_or_prepare_insert_smallIS8_EENS9_IPNS1_13map_slot_typeIS8_SA_EEbEERKT_:
 3660|  25.1k|  find_or_prepare_insert_small(const K& key) {
 3661|  25.1k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  25.1k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3662|       |    if constexpr (SooEnabled()) {
 3663|       |      return find_or_prepare_insert_soo(key);
 3664|       |    }
 3665|  25.1k|    if (!empty()) {
  ------------------
  |  Branch (3665:9): [True: 23.9k, False: 1.24k]
  ------------------
 3666|  23.9k|      if (equal_to(key, single_slot())) {
  ------------------
  |  Branch (3666:11): [True: 23.3k, False: 558]
  ------------------
 3667|  23.3k|        return {single_slot(), false};
 3668|  23.3k|      }
 3669|  23.9k|    }
 3670|  1.80k|    return {to_slot(PrepareInsertSmallNonSoo(
 3671|  1.80k|                common(), GetPolicyFunctions(),
 3672|  1.80k|                HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})),
 3673|  1.80k|            true};
 3674|  25.1k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE5emptyEv:
 2778|  60.4k|  bool empty() const { return !size(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE4sizeEv:
 2779|  60.4k|  size_t size() const {
 2780|  60.4k|    AssertNotDebugCapacity();
 2781|  60.4k|    const size_t size = common().size();
 2782|  60.4k|    [[maybe_unused]] const size_t kMaxValidSize = MaxValidSize();
 2783|  60.4k|    ABSL_ASSUME(size <= kMaxValidSize);
  ------------------
  |  |  272|  60.4k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2784|  60.4k|    return size;
 2785|  60.4k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8equal_toIS8_EEbRKT_PNS1_13map_slot_typeIS8_SA_EE:
 3502|   105k|                                             slot_type* slot) const {
 3503|   105k|    return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
 3504|   105k|                               PolicyTraits::element(slot));
 3505|   105k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE6eq_refEv:
 3892|   105k|  const key_equal& eq_ref() const { return settings_.template get<2>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE11single_slotEv:
 3862|  98.8k|  slot_type* single_slot() {
 3863|  98.8k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  98.8k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3864|  98.8k|    return SooEnabled()
  ------------------
  |  Branch (3864:12): [Folded, False: 98.8k]
  ------------------
 3865|  98.8k|               ? soo_slot()
 3866|  98.8k|               : to_slot(common().slot_array(/*capacity=*/1));
 3867|  98.8k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE7to_slotEPv:
 3519|   173k|  static ABSL_ATTRIBUTE_ALWAYS_INLINE slot_type* to_slot(void* buf) {
 3520|   173k|    return static_cast<slot_type*>(buf);
 3521|   173k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE18GetPolicyFunctionsEv:
 3988|  2.23k|  static const PolicyFunctions& GetPolicyFunctions() {
 3989|  2.23k|    static_assert(sizeof(slot_type) <= (std::numeric_limits<uint32_t>::max)(),
 3990|  2.23k|                  "Slot size is too large. Use std::unique_ptr for value type "
 3991|  2.23k|                  "or use absl::node_hash_{map,set}.");
 3992|  2.23k|    static_assert(alignof(slot_type) <=
 3993|  2.23k|                  size_t{(std::numeric_limits<uint16_t>::max)()});
 3994|  2.23k|    static_assert(sizeof(key_type) <=
 3995|  2.23k|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3996|  2.23k|    static_assert(sizeof(value_type) <=
 3997|  2.23k|                  size_t{(std::numeric_limits<uint32_t>::max)()});
 3998|  2.23k|    static constexpr size_t kBackingArrayAlignment =
 3999|  2.23k|        BackingArrayAlignment(alignof(slot_type));
 4000|  2.23k|    static constexpr PolicyFunctions value = {
 4001|  2.23k|        static_cast<uint32_t>(sizeof(key_type)),
 4002|  2.23k|        static_cast<uint32_t>(sizeof(value_type)),
 4003|  2.23k|        static_cast<uint32_t>(sizeof(slot_type)),
 4004|  2.23k|        static_cast<uint16_t>(alignof(slot_type)), SooEnabled(),
 4005|  2.23k|        ShouldSampleHashtablezInfoForAlloc<CharAlloc>(),
 4006|       |        // TODO(b/328722020): try to type erase
 4007|       |        // for standard layout and alignof(Hash) <= alignof(CommonFields).
 4008|  2.23k|        std::is_empty_v<hasher> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4008:9): [True: 0, Folded]
  ------------------
 4009|  2.23k|                                : &raw_hash_set::get_hash_ref_fn,
 4010|  2.23k|        PolicyTraits::template get_hash_slot_fn<hasher, kIsDefaultHash>(),
 4011|  2.23k|        PolicyTraits::transfer_uses_memcpy()
  ------------------
  |  Branch (4011:9): [Folded, False: 2.23k]
  ------------------
 4012|  2.23k|            ? TransferNRelocatable<sizeof(slot_type)>
 4013|  2.23k|            : &raw_hash_set::transfer_n_slots_fn,
 4014|  2.23k|        std::is_empty_v<Alloc> ? &GetRefForEmptyClass
  ------------------
  |  Branch (4014:9): [True: 0, Folded]
  ------------------
 4015|  2.23k|                               : &raw_hash_set::get_char_alloc_ref_fn,
 4016|  2.23k|        &AllocateBackingArray<kBackingArrayAlignment, CharAlloc>,
 4017|  2.23k|        get_dealloc_backing_array_fn(),
 4018|  2.23k|        &raw_hash_set::transfer_unprobed_elements_to_next_capacity_fn};
 4019|  2.23k|    return value;
 4020|  2.23k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE19transfer_n_slots_fnEPvSD_SD_m:
 3908|    723|                                  size_t count) {
 3909|    723|    auto* src_slot = to_slot(src);
 3910|    723|    auto* dst_slot = to_slot(dst);
 3911|       |
 3912|    723|    auto* h = static_cast<raw_hash_set*>(set);
 3913|  1.77k|    for (; count > 0; --count, ++src_slot, ++dst_slot) {
  ------------------
  |  Branch (3913:12): [True: 1.05k, False: 723]
  ------------------
 3914|  1.05k|      h->transfer(dst_slot, src_slot);
 3915|  1.05k|    }
 3916|    723|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8transferEPNS1_13map_slot_typeIS8_SA_EESF_:
 3377|  1.05k|  void transfer(slot_type* to, slot_type* from) {
 3378|  1.05k|    common().RunWithReentrancyGuard([&] {
 3379|  1.05k|      allocator_type alloc(char_alloc_ref());
 3380|  1.05k|      PolicyTraits::transfer(&alloc, to, from);
 3381|  1.05k|    });
 3382|  1.05k|  }
_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEENS6_4pairISA_SA_EEEEJEE8transferEPNS1_13map_slot_typeISA_SC_EESH_EUlvE_EEvT_:
 1486|  1.05k|  void RunWithReentrancyGuard(F f) {
 1487|  1.05k|#ifdef NDEBUG
 1488|  1.05k|    f();
 1489|  1.05k|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8transferEPNS1_13map_slot_typeIS8_SA_EESF_ENKUlvE_clEv:
 3378|  1.05k|    common().RunWithReentrancyGuard([&] {
 3379|  1.05k|      allocator_type alloc(char_alloc_ref());
 3380|  1.05k|      PolicyTraits::transfer(&alloc, to, from);
 3381|  1.05k|    });
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8hash_refEv:
 3890|  49.9k|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8hash_refEv:
 3889|  1.80k|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE28find_or_prepare_insert_largeIS8_EENS9_IPNS1_13map_slot_typeIS8_SA_EEbEERKT_:
 3677|  22.5k|  std::pair<slot_type*, bool> find_or_prepare_insert_large(const K& key) {
 3678|  22.5k|    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  22.5k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3679|  22.5k|    prefetch_heap_block();
 3680|  22.5k|    const size_t cap = capacity();
 3681|  22.5k|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  22.5k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3682|  22.5k|    const size_t hash = hash_of(key);
 3683|  22.5k|    auto seq = probe(ProbeCapacity{cap}, hash);
 3684|  22.5k|    const h2_t h2 = H2(hash);
 3685|  22.5k|    const ctrl_t* ctrl = control();
 3686|  22.5k|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3687|  22.5k|    while (true) {
  ------------------
  |  Branch (3687:12): [True: 22.5k, Folded]
  ------------------
 3688|  22.5k|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3689|  22.5k|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3690|  22.5k|#endif
 3691|  22.5k|      Group g{ctrl + seq.offset()};
 3692|  23.6k|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3692:23): [True: 23.6k, False: 432]
  ------------------
 3693|  23.6k|        slot_type* slot = slot_array + seq.offset(i);
 3694|  23.6k|        if (ABSL_PREDICT_TRUE(equal_to(key, slot))) {
  ------------------
  |  |  191|  23.6k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 22.1k, False: 1.51k]
  |  |  |  Branch (191:48): [Folded, False: 23.6k]
  |  |  |  Branch (191:57): [True: 22.1k, False: 1.51k]
  |  |  ------------------
  ------------------
 3695|  22.1k|          return {slot, false};
 3696|  22.1k|        }
 3697|  23.6k|      }
 3698|    432|      auto mask_empty = g.MaskEmpty();
 3699|    432|      if (ABSL_PREDICT_TRUE(mask_empty)) {
  ------------------
  |  |  191|    432|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 432, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 432]
  |  |  |  Branch (191:57): [True: 432, False: 0]
  |  |  ------------------
  ------------------
 3700|    432|        size_t target_group_offset = seq.offset();
 3701|    432|        void* slot =
 3702|    432|            SwisstableGenerationsEnabled()
  ------------------
  |  Branch (3702:13): [Folded, False: 432]
  ------------------
 3703|    432|                ? PrepareInsertLargeGenerationsEnabled(
 3704|      0|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3705|      0|                      FindInfo{target_group_offset, seq.index()},
 3706|      0|                      HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
 3707|    432|                : PrepareInsertLarge(
 3708|    432|                      common(), GetPolicyFunctions(), hash, mask_empty,
 3709|    432|                      FindInfo{target_group_offset, seq.index()});
 3710|    432|        return {to_slot(slot), true};
 3711|    432|      }
 3712|      0|      seq.next();
 3713|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
  ------------------
  |  |  257|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3714|      0|    }
 3715|  22.5k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE19prefetch_heap_blockEv:
 3830|  49.9k|  void prefetch_heap_block() const {
 3831|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  49.9k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3832|  49.9k|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3833|  49.9k|    __builtin_prefetch(control(), 0, 1);
 3834|  49.9k|#endif
 3835|  49.9k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE7hash_ofIS8_EEmRKT_:
 3507|  49.9k|  ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
 3508|  49.9k|    return HashElement<hasher, kIsDefaultHash>{hash_ref(),
 3509|  49.9k|                                               common().seed().seed()}(key);
 3510|  49.9k|  }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE7controlEv:
 3845|  99.8k|  ctrl_t* control() const {
 3846|       |    ABSL_SWISSTABLE_ASSERT(!is_soo());
  ------------------
  |  |  257|  99.8k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3847|  99.8k|    return common().control();
 3848|  99.8k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKS8_EEENSH_IJEEEEEEvPNS1_13map_slot_typeIS8_SA_EEDpOT_:
 3792|  2.23k|  void emplace_at(slot_type* slot, Args&&... args) {
 3793|  2.23k|    construct(slot, std::forward<Args>(args)...);
 3794|       |
 3795|       |    // When is_small, find calls find_small and if size is 0, then it will
 3796|       |    // return an end iterator. This can happen in the raw_hash_set copy ctor.
 3797|       |    assert((is_small() ||
 3798|  2.23k|            PolicyTraits::apply(FindElement{*this}, PolicyTraits::element(slot))
 3799|  2.23k|                    .slot() == slot) &&
 3800|  2.23k|           "constructed value does not match the lookup key");
 3801|  2.23k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKS8_EEENSH_IJEEEEEEvPNS1_13map_slot_typeIS8_SA_EEDpOT_:
 3365|  2.23k|  void construct(slot_type* slot, Args&&... args) {
 3366|  2.23k|    common().RunWithReentrancyGuard([&] {
 3367|  2.23k|      allocator_type alloc(char_alloc_ref());
 3368|  2.23k|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|  2.23k|    });
 3370|  2.23k|  }
_ZN4absl12lts_2026081718container_internal12CommonFields22RunWithReentrancyGuardIZNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEENS6_4pairISA_SA_EEEEJEE9constructIJRKNS6_21piecewise_construct_tENS6_5tupleIJRKSA_EEENSJ_IJEEEEEEvPNS1_13map_slot_typeISA_SC_EEDpOT_EUlvE_EEvT_:
 1486|  2.23k|  void RunWithReentrancyGuard(F f) {
 1487|  2.23k|#ifdef NDEBUG
 1488|  2.23k|    f();
 1489|  2.23k|    return;
 1490|      0|#endif
 1491|      0|    const HashtableCapacity cap = maybe_invalid_capacity();
 1492|      0|    set_capacity(HashtableCapacity::CreateReentrance());
 1493|      0|    f();
 1494|      0|    set_capacity(cap);
 1495|      0|  }
_ZZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRKS8_EEENSH_IJEEEEEEvPNS1_13map_slot_typeIS8_SA_EEDpOT_ENKUlvE_clEv:
 3366|  2.23k|    common().RunWithReentrancyGuard([&] {
 3367|  2.23k|      allocator_type alloc(char_alloc_ref());
 3368|  2.23k|      PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
 3369|  2.23k|    });
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE29non_iterable_iterator_at_slotEPNS1_13map_slot_typeIS8_SA_EE:
 3806|  47.7k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3807|  47.7k|    return {InsertIteratorControl(), slot, common().generation_ptr()};
 3808|  47.7k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS8_SA_EEPKh:
 2434|  86.3k|        : HashSetIteratorGenerationInfo(generation_ptr),
 2435|  86.3k|          ctrl_(ctrl),
 2436|  86.3k|          slot_(slot) {
 2437|       |      // This assumption helps the compiler know that any non-end iterator is
 2438|       |      // not equal to any end iterator.
 2439|  86.3k|      ABSL_ASSUME(slot != nullptr);
  ------------------
  |  |  272|  86.3k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 2440|  86.3k|    }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE4findIS8_EENSC_8iteratorERKT_:
 3225|  62.6k|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3226|  62.6k|    AssertOnFind(key);
 3227|  62.6k|    if (is_small()) return find_small(key);
  ------------------
  |  Branch (3227:9): [True: 35.2k, False: 27.3k]
  ------------------
 3228|  27.3k|    prefetch_heap_block();
 3229|  27.3k|    return find_large(key);
 3230|  62.6k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE10find_smallIS8_EENSC_8iteratorERKT_:
 3387|  35.2k|  ABSL_ATTRIBUTE_ALWAYS_INLINE iterator find_small(const key_arg<K>& key) {
 3388|  35.2k|    ABSL_SWISSTABLE_ASSERT(is_small());
  ------------------
  |  |  257|  35.2k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3389|  35.2k|    return empty() || !equal_to(key, single_slot()) ? end() : single_iterator();
  ------------------
  |  Branch (3389:12): [True: 827, False: 34.4k]
  |  Branch (3389:23): [True: 17.2k, False: 17.1k]
  ------------------
 3390|  35.2k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE15single_iteratorEv:
 3878|  17.1k|  iterator single_iterator() {
 3879|  17.1k|    return {SooControl(), single_slot(), common().generation_ptr()};
 3880|  17.1k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE10find_largeIS8_EENSC_8iteratorERKT_:
 3393|  27.3k|  iterator find_large(const key_arg<K>& key) {
 3394|  27.3k|    ABSL_SWISSTABLE_ASSERT(!is_small());
  ------------------
  |  |  257|  27.3k|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3395|  27.3k|    const size_t cap = common().capacity();
 3396|  27.3k|    ABSL_ASSUME(cap > kMaxSmallCapacity);
  ------------------
  |  |  272|  27.3k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 3397|  27.3k|    const size_t hash = hash_of(key);
 3398|  27.3k|    auto seq = probe(ProbeCapacity{cap}, hash);
 3399|  27.3k|    const h2_t h2 = H2(hash);
 3400|  27.3k|    ctrl_t* ctrl = control();
 3401|  27.3k|    slot_type* slot_array = to_slot(common().slot_array(cap));
 3402|  27.3k|    while (true) {
  ------------------
  |  Branch (3402:12): [True: 27.3k, Folded]
  ------------------
 3403|  27.3k|#ifndef ABSL_HAVE_MEMORY_SANITIZER
 3404|  27.3k|      absl::PrefetchToLocalCache(slot_array + seq.offset());
 3405|  27.3k|#endif
 3406|  27.3k|      Group g{ctrl + seq.offset()};
 3407|  27.3k|      for (uint32_t i : g.Match(h2)) {
  ------------------
  |  Branch (3407:23): [True: 23.9k, False: 5.88k]
  ------------------
 3408|  23.9k|        const size_t offset = seq.offset(i);
 3409|  23.9k|        if (ABSL_PREDICT_TRUE(equal_to(key, slot_array + offset)))
  ------------------
  |  |  191|  23.9k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 21.4k, False: 2.45k]
  |  |  |  Branch (191:48): [Folded, False: 23.9k]
  |  |  |  Branch (191:57): [True: 21.4k, False: 2.45k]
  |  |  ------------------
  ------------------
 3410|  21.4k|          return iterator_at_ptr(ctrl + offset, slot_array + offset);
 3411|  23.9k|      }
 3412|  5.88k|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  191|  5.88k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 5.88k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 5.88k]
  |  |  |  Branch (191:57): [True: 5.88k, False: 0]
  |  |  ------------------
  ------------------
 3413|      0|      seq.next();
 3414|       |      ABSL_SWISSTABLE_ASSERT(seq.index() <= cap && "full table!");
  ------------------
  |  |  257|      0|  assert((CONDITION) && "Try enabling sanitizers.")
  ------------------
 3415|      0|    }
 3416|  27.3k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE15iterator_at_ptrEPNS1_6ctrl_tEPv:
 3816|  21.4k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3817|  21.4k|    return {ctrl, to_slot(slot), common().generation_ptr()};
 3818|  21.4k|  }
_ZN4absl12lts_2026081718container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iteratorESF_:
 2418|  62.6k|    friend bool operator==(const iterator& a, const iterator& b) {
 2419|  62.6k|      AssertIsValidForComparison(a.ctrl_, a.slot_, a.generation(),
 2420|  62.6k|                                 a.generation_ptr());
 2421|  62.6k|      AssertIsValidForComparison(b.ctrl_, b.slot_, b.generation(),
 2422|  62.6k|                                 b.generation_ptr());
 2423|  62.6k|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 2424|  62.6k|                          a.generation_ptr(), b.generation_ptr());
 2425|  62.6k|      return a.unchecked_equals(b);
 2426|  62.6k|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iterator16unchecked_equalsERKSD_:
 2462|  62.6k|    bool unchecked_equals(const iterator& b) const { return slot_ == b.slot(); }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iterator4slotEv:
 2469|  62.6k|    slot_type* slot() const { return slot_; }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE3endEv:
 2762|  86.6k|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2763|  86.6k|    AssertNotDebugCapacity();
 2764|  86.6k|    return iterator(common().generation_ptr());
 2765|  86.6k|  }
_ZN4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iteratorC2EPKh:
 2443|  86.6k|        : HashSetIteratorGenerationInfo(generation_ptr), slot_(nullptr) {}
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iteratorptEv:
 2397|  77.2k|    pointer operator->() const {
 2398|  77.2k|      assert_is_full("operator->");
 2399|  77.2k|      return &operator*();
 2400|  77.2k|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iterator14assert_is_fullEPKc:
 2445|   154k|    void assert_is_full(const char* operation) const {
 2446|   154k|      AssertIsFull(ctrl_, slot_, generation(), generation_ptr(), operation);
 2447|   154k|    }
_ZNK4absl12lts_2026081718container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_4pairIS8_S8_EEEEJEE8iteratordeEv:
 2391|  77.2k|    reference operator*() const {
 2392|  77.2k|      assert_is_full("operator*()");
 2393|  77.2k|      return unchecked_deref();
 2394|  77.2k|    }
_ZN4absl12lts_2026081718container_internal20AllocateBackingArrayILm8ENSt3__19allocatorIcEEEEPvS6_m:
 1900|  44.0k|void* AllocateBackingArray(void* alloc, size_t n) {
 1901|  44.0k|  return Allocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), n);
 1902|  44.0k|}
_ZN4absl12lts_2026081718container_internal22DeallocateBackingArrayILm8ENSt3__19allocatorIcEEEEvPvmPNS1_6ctrl_tEmmbm:
 1907|  44.0k|                            size_t blocked_element_count) {
 1908|  44.0k|  RawHashSetLayout layout(capacity, slot_size, slot_align, had_infoz,
 1909|  44.0k|                          blocked_element_count);
 1910|  44.0k|  void* backing_array = ctrl - layout.control_offset();
 1911|       |  // Unpoison before returning the memory to the allocator.
 1912|  44.0k|  SanitizerUnpoisonMemoryRegion(backing_array, layout.alloc_size());
 1913|  44.0k|  Deallocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), backing_array,
 1914|  44.0k|                                  layout.alloc_size());
 1915|  44.0k|}

_ZN4absl12lts_2026081718container_internal14ProbedItemImplIjLm32EEC2Ehmm:
   59|  21.4k|      : h2(h2_arg),
   60|  21.4k|        source_offset(static_cast<IntType>(source_offset_arg)),
   61|  21.4k|        h1(static_cast<IntType>(h1_arg)) {}
_ZN4absl12lts_2026081718container_internal14ProbedItemImplImLm64EEC2Ehmm:
   59|  6.90k|      : h2(h2_arg),
   60|  6.90k|        source_offset(static_cast<IntType>(source_offset_arg)),
   61|  6.90k|        h1(static_cast<IntType>(h1_arg)) {}

_ZNK4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEclES5_S7_:
  164|  95.9M|  R operator()(Args... args) const {
  165|  95.9M|    return invoker_(ptr_, std::forward<Args>(args)...);
  166|  95.9M|  }
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEE10GetNewFuncEvEUlS5_S7_E_vEEOT_:
  112|  92.7M|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEE10GetNewFuncEvEUlS5_S7_E_EENSt3__110in_place_tEOT_:
  100|  92.7M|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|  92.7M|    absl::functional_internal::AssertNonNull(f);
  102|  92.7M|    ptr_.obj = &f;
  103|  92.7M|  }
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEE10GetNewFuncEvEUlS5_S7_E_vEEOT_:
  112|  4.55k|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEE10GetNewFuncEvEUlS5_S7_E_EENSt3__110in_place_tEOT_:
  100|  4.55k|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|  4.55k|    absl::functional_internal::AssertNonNull(f);
  102|  4.55k|    ptr_.obj = &f;
  103|  4.55k|  }
_ZN4absl12lts_2026081711FunctionRefIFmmEEC2INS0_18container_internal7HashKeyINS5_10StringHashENSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEELb1EEEvEEOT_:
  112|  5.37k|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
_ZN4absl12lts_2026081711FunctionRefIFmmEEC2INS0_18container_internal7HashKeyINS5_10StringHashENSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEELb1EEEEENS8_10in_place_tEOT_:
  100|  5.37k|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|  5.37k|    absl::functional_internal::AssertNonNull(f);
  102|  5.37k|    ptr_.obj = &f;
  103|  5.37k|  }
unigram_model.cc:_ZN4absl12lts_2026081711FunctionRefIFmmEEC2INS0_18container_internal7HashKeyINS5_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashESD_Lb0EEEvEEOT_:
  112|  5.03k|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
unigram_model.cc:_ZN4absl12lts_2026081711FunctionRefIFmmEEC2INS0_18container_internal7HashKeyINS5_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashESD_Lb0EEEEENSt3__110in_place_tEOT_:
  100|  5.03k|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|  5.03k|    absl::functional_internal::AssertNonNull(f);
  102|  5.03k|    ptr_.obj = &f;
  103|  5.03k|  }
_ZN4absl12lts_2026081711FunctionRefIFmmEEC2INS0_18container_internal7HashKeyINS5_10StringHashENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEELb1EEEvEEOT_:
  112|  1.80k|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
_ZN4absl12lts_2026081711FunctionRefIFmmEEC2INS0_18container_internal7HashKeyINS5_10StringHashENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEELb1EEEEENS8_10in_place_tEOT_:
  100|  1.80k|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|  1.80k|    absl::functional_internal::AssertNonNull(f);
  102|  1.80k|    ptr_.obj = &f;
  103|  1.80k|  }
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerINS3_11MessageLiteEE23GetNewFromPrototypeFuncEPKSD_EUlS5_S7_E_vEEOT_:
  112|  2.32M|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerINS3_11MessageLiteEE23GetNewFromPrototypeFuncEPKSD_EUlS5_S7_E_EENSt3__110in_place_tEOT_:
  100|  2.32M|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|  2.32M|    absl::functional_internal::AssertNonNull(f);
  102|  2.32M|    ptr_.obj = &f;
  103|  2.32M|  }
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerINSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEEE10GetNewFuncEvEUlS5_S7_E_vEEOT_:
  112|   796k|      : FunctionRef(std::in_place, std::forward<F>(f)) {}
_ZN4absl12lts_2026081711FunctionRefIFvPN6google8protobuf5ArenaERPvEEC2IZNS3_8internal18GenericTypeHandlerINSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEEE10GetNewFuncEvEUlS5_S7_E_EENSD_10in_place_tEOT_:
  100|   796k|      : invoker_(&absl::functional_internal::InvokeObject<F&, R, Args...>) {
  101|   796k|    absl::functional_internal::AssertNonNull(f);
  102|   796k|    ptr_.obj = &f;
  103|   796k|  }
_ZNK4absl12lts_2026081711FunctionRefIFmmEEclEm:
  164|  3.07k|  R operator()(Args... args) const {
  165|  3.07k|    return invoker_(ptr_, std::forward<Args>(args)...);
  166|  3.07k|  }

_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEE10GetNewFuncEvEUlPNS4_5ArenaERPvE_vJSB_SD_EEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|  92.7M|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|  92.7M|  using T = std::remove_reference_t<Obj>;
   74|  92.7M|  return static_cast<R>(std::invoke(
   75|  92.7M|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|  92.7M|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|  92.7M|}
_ZN4absl12lts_2026081719functional_internal13AssertNonNullIZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEE10GetNewFuncEvEUlPNS4_5ArenaERPvE_EEvRKT_:
  134|  92.7M|void AssertNonNull(const F&) {}
_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEE10GetNewFuncEvEUlPNS4_5ArenaERPvE_vJSB_SD_EEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|  4.55k|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|  4.55k|  using T = std::remove_reference_t<Obj>;
   74|  4.55k|  return static_cast<R>(std::invoke(
   75|  4.55k|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|  4.55k|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|  4.55k|}
_ZN4absl12lts_2026081719functional_internal13AssertNonNullIZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEE10GetNewFuncEvEUlPNS4_5ArenaERPvE_EEvRKT_:
  134|  4.55k|void AssertNonNull(const F&) {}
_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRZN6google8protobuf8internal18GenericTypeHandlerINS4_11MessageLiteEE23GetNewFromPrototypeFuncEPKS7_EUlPNS4_5ArenaERPvE_vJSC_SE_EEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|  2.32M|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|  2.32M|  using T = std::remove_reference_t<Obj>;
   74|  2.32M|  return static_cast<R>(std::invoke(
   75|  2.32M|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|  2.32M|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|  2.32M|}
_ZN4absl12lts_2026081719functional_internal13AssertNonNullIZN6google8protobuf8internal18GenericTypeHandlerINS4_11MessageLiteEE23GetNewFromPrototypeFuncEPKS7_EUlPNS4_5ArenaERPvE_EEvRKT_:
  134|  2.32M|void AssertNonNull(const F&) {}
_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEE10GetNewFuncEvEUlPNS4_5ArenaERPvE_vJSG_SI_EEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|   796k|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|   796k|  using T = std::remove_reference_t<Obj>;
   74|   796k|  return static_cast<R>(std::invoke(
   75|   796k|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|   796k|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|   796k|}
_ZN4absl12lts_2026081719functional_internal13AssertNonNullIZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEE10GetNewFuncEvEUlPNS4_5ArenaERPvE_EEvRKT_:
  134|   796k|void AssertNonNull(const F&) {}
_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRNS0_18container_internal7HashKeyINS3_10StringHashENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEELb1EEEmJmEEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|      1|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|      1|  using T = std::remove_reference_t<Obj>;
   74|      1|  return static_cast<R>(std::invoke(
   75|      1|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|      1|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|      1|}
_ZN4absl12lts_2026081719functional_internal13AssertNonNullINS0_18container_internal7HashKeyINS3_10StringHashENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEELb1EEEEEvRKT_:
  134|  5.37k|void AssertNonNull(const F&) {}
unigram_model.cc:_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRNS0_18container_internal7HashKeyINS3_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashESB_Lb0EEEmJmEEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|  2.51k|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|  2.51k|  using T = std::remove_reference_t<Obj>;
   74|  2.51k|  return static_cast<R>(std::invoke(
   75|  2.51k|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|  2.51k|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|  2.51k|}
unigram_model.cc:_ZN4absl12lts_2026081719functional_internal13AssertNonNullINS0_18container_internal7HashKeyINS3_6HashEqIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEvE4HashESB_Lb0EEEEEvRKT_:
  134|  5.03k|void AssertNonNull(const F&) {}
_ZN4absl12lts_2026081719functional_internal12InvokeObjectIRNS0_18container_internal7HashKeyINS3_10StringHashENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEELb1EEEmJmEEET0_NS1_7VoidPtrEDpNS1_8ForwardTIT1_E4typeE:
   72|    558|R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
   73|    558|  using T = std::remove_reference_t<Obj>;
   74|    558|  return static_cast<R>(std::invoke(
   75|    558|      std::forward<Obj>(*const_cast<T*>(static_cast<const T*>(ptr.obj))),
   76|    558|      std::forward<typename ForwardT<Args>::type>(args)...));
   77|    558|}
_ZN4absl12lts_2026081719functional_internal13AssertNonNullINS0_18container_internal7HashKeyINS3_10StringHashENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEELb1EEEEEvRKT_:
  134|  1.80k|void AssertNonNull(const F&) {}

_ZN4absl12lts_2026081713hash_internal43CombineLargeContiguousImplOn64BitLengthGt32EmPKhm:
  417|  70.7k|                                                     size_t len) {
  418|  70.7k|  assert(len > 32);
  419|  70.7k|  assert(sizeof(size_t) == 8);  // NOLINT(misc-static-assert)
  420|  70.7k|  if (ABSL_PREDICT_TRUE(len <= PiecewiseChunkSize())) {
  ------------------
  |  |  191|  70.7k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 64.1k, False: 6.52k]
  |  |  |  Branch (191:48): [Folded, False: 70.7k]
  |  |  |  Branch (191:57): [True: 64.1k, False: 6.52k]
  |  |  ------------------
  ------------------
  421|  64.1k|    return HashBlockOn64Bit(state, first, len);
  422|  64.1k|  }
  423|  6.52k|  return SplitAndCombineOn64Bit(state, first, len);
  424|  70.7k|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_116HashBlockOn64BitEmPKhm:
  376|   158k|    uint64_t state, const unsigned char* data, size_t len) {
  377|   158k|#ifdef ABSL_HAVE_INTRINSIC_INT128
  378|   158k|  return LowLevelHashLenGt32(state, data, len);
  379|       |#else
  380|       |  return hash_internal::CityHash64WithSeed(reinterpret_cast<const char*>(data),
  381|       |                                           len, state);
  382|       |#endif
  383|   158k|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_119LowLevelHashLenGt32EmPKvm:
  341|   158k|                                              size_t len) {
  342|   158k|  assert(len > 32);
  343|   158k|  if (ABSL_PREDICT_FALSE(len > 64)) {
  ------------------
  |  |  190|   158k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 131k, False: 26.9k]
  |  |  |  Branch (190:49): [Folded, False: 158k]
  |  |  |  Branch (190:58): [True: 131k, False: 26.9k]
  |  |  ------------------
  ------------------
  344|   131k|    return LowLevelHashLenGt64(seed, data, len);
  345|   131k|  }
  346|  26.9k|  return LowLevelHash33To64(seed, static_cast<const uint8_t*>(data), len);
  347|   158k|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_119LowLevelHashLenGt64EmPKvm:
  291|   131k|LowLevelHashLenGt64(uint64_t seed, const void* data, size_t len) {
  292|   131k|  assert(len > 64);
  293|   131k|  const uint8_t* ptr = static_cast<const uint8_t*>(data);
  294|   131k|  uint64_t current_state = seed ^ kStaticRandomData[0] ^ len;
  295|   131k|  const uint8_t* last_32_ptr = ptr + len - 32;
  296|       |  // If we have more than 64 bytes, we're going to handle chunks of 64
  297|       |  // bytes at a time. We're going to build up four separate hash states
  298|       |  // which we will then hash together. This avoids short dependency chains.
  299|   131k|  uint64_t duplicated_state0 = current_state;
  300|   131k|  uint64_t duplicated_state1 = current_state;
  301|   131k|  uint64_t duplicated_state2 = current_state;
  302|       |
  303|  1.56M|  do {
  304|  1.56M|    PrefetchFutureDataToLocalCache(ptr);
  305|       |
  306|  1.56M|    uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
  307|  1.56M|    uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
  308|  1.56M|    uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
  309|  1.56M|    uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
  310|  1.56M|    uint64_t e = absl::base_internal::UnalignedLoad64(ptr + 32);
  311|  1.56M|    uint64_t f = absl::base_internal::UnalignedLoad64(ptr + 40);
  312|  1.56M|    uint64_t g = absl::base_internal::UnalignedLoad64(ptr + 48);
  313|  1.56M|    uint64_t h = absl::base_internal::UnalignedLoad64(ptr + 56);
  314|       |
  315|  1.56M|    current_state = Mix(a ^ kStaticRandomData[1], b ^ current_state);
  316|  1.56M|    duplicated_state0 = Mix(c ^ kStaticRandomData[2], d ^ duplicated_state0);
  317|       |
  318|  1.56M|    duplicated_state1 = Mix(e ^ kStaticRandomData[3], f ^ duplicated_state1);
  319|  1.56M|    duplicated_state2 = Mix(g ^ kStaticRandomData[4], h ^ duplicated_state2);
  320|       |
  321|  1.56M|    ptr += 64;
  322|  1.56M|    len -= 64;
  323|  1.56M|  } while (len > 64);
  ------------------
  |  Branch (323:12): [True: 1.43M, False: 131k]
  ------------------
  324|       |
  325|   131k|  current_state = (current_state ^ duplicated_state0) ^
  326|   131k|                  (duplicated_state1 + duplicated_state2);
  327|       |  // We now have a data `ptr` with at most 64 bytes and the current state
  328|       |  // of the hashing state machine stored in current_state.
  329|   131k|  if (len > 32) {
  ------------------
  |  Branch (329:7): [True: 110k, False: 21.2k]
  ------------------
  330|   110k|    current_state = Mix32Bytes(ptr, current_state);
  331|   110k|  }
  332|       |
  333|       |  // We now have a data `ptr` with at most 32 bytes and the current state
  334|       |  // of the hashing state machine stored in current_state. But we can
  335|       |  // safely read from `ptr + len - 32`.
  336|   131k|  return Mix32Bytes(last_32_ptr, current_state);
  337|   131k|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_130PrefetchFutureDataToLocalCacheEPKh:
   55|  1.56M|void PrefetchFutureDataToLocalCache(const uint8_t* ptr) {
   56|  1.56M|  PrefetchToLocalCache(ptr + 5 * ABSL_CACHELINE_SIZE);
  ------------------
  |  |   89|  1.56M|#define ABSL_CACHELINE_SIZE 64
  ------------------
   57|  1.56M|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_110Mix32BytesEPKhm:
  271|   296k|uint64_t Mix32Bytes(const uint8_t* ptr, uint64_t current_state) {
  272|   296k|  uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
  273|   296k|  uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
  274|   296k|  uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
  275|   296k|  uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
  276|       |
  277|   296k|  uint64_t cs0 = Mix(a ^ kStaticRandomData[1], b ^ current_state);
  278|   296k|  uint64_t cs1 = Mix(c ^ kStaticRandomData[2], d ^ current_state);
  279|   296k|  return cs0 ^ cs1;
  280|   296k|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_118LowLevelHash33To64EmPKhm:
  282|  26.9k|uint64_t LowLevelHash33To64(uint64_t seed, const uint8_t* ptr, size_t len) {
  283|  26.9k|  assert(len > 32);
  284|       |  assert(len <= 64);
  285|  26.9k|  uint64_t current_state = seed ^ kStaticRandomData[0] ^ len;
  286|  26.9k|  const uint8_t* last_32_ptr = ptr + len - 32;
  287|  26.9k|  return Mix32Bytes(last_32_ptr, Mix32Bytes(ptr, current_state));
  288|  26.9k|}
hash.cc:_ZN4absl12lts_2026081713hash_internal12_GLOBAL__N_122SplitAndCombineOn64BitEmPKhm:
  386|  6.52k|SplitAndCombineOn64Bit(uint64_t state, const unsigned char* first, size_t len) {
  387|   101k|  while (len >= PiecewiseChunkSize()) {
  ------------------
  |  Branch (387:10): [True: 94.7k, False: 6.52k]
  ------------------
  388|  94.7k|    state = HashBlockOn64Bit(state, first, PiecewiseChunkSize());
  389|  94.7k|    len -= PiecewiseChunkSize();
  390|  94.7k|    first += PiecewiseChunkSize();
  391|  94.7k|  }
  392|       |  // Do not call CombineContiguousImpl for empty range since it is modifying
  393|       |  // state.
  394|  6.52k|  if (len == 0) {
  ------------------
  |  Branch (394:7): [True: 76, False: 6.45k]
  ------------------
  395|     76|    return state;
  396|     76|  }
  397|       |  // Handle the remainder.
  398|  6.45k|  return CombineContiguousImpl(state, first, len,
  399|  6.45k|                               std::integral_constant<int, 8>{});
  400|  6.52k|}

_ZN4absl12lts_2026081713hash_internal15MixingHashState18combine_contiguousES2_PKhm:
 1449|   394M|                                            size_t size) {
 1450|   394M|    return MixingHashState(
 1451|   394M|        CombineContiguousImpl(hash_state.state_, first, size,
 1452|   394M|                              std::integral_constant<int, sizeof(size_t)>{}));
 1453|   394M|  }
_ZN4absl12lts_2026081713hash_internal15MixingHashStateC2Em:
 1500|  1.23G|  explicit MixingHashState(uint64_t state) : state_(state) {}
_ZN4absl12lts_2026081713hash_internal15MixingHashState11combine_rawES2_m:
 1506|   222M|                                     uint64_t value) {
 1507|   222M|    return MixingHashState(CombineRawImpl(hash_state.state_, value));
 1508|   222M|  }
_ZN4absl12lts_2026081713hash_internal15MixingHashState4SeedEv:
 1552|   222M|  ABSL_ATTRIBUTE_ALWAYS_INLINE static size_t Seed() {
 1553|   222M|#if (!defined(__clang__) || __clang_major__ > 11) && \
 1554|   222M|    (!defined(__apple_build_version__) ||            \
 1555|   222M|     __apple_build_version__ >= 19558921)  // Xcode 12
 1556|   222M|    return static_cast<size_t>(reinterpret_cast<uintptr_t>(&kSeed));
 1557|       |#else
 1558|       |    // Workaround the absence of
 1559|       |    // https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021.
 1560|       |    return static_cast<size_t>(reinterpret_cast<uintptr_t>(kSeed));
 1561|       |#endif
 1562|   222M|  }
_ZN4absl12lts_2026081713hash_internal18PiecewiseChunkSizeEv:
  157|   456k|constexpr size_t PiecewiseChunkSize() { return 1024; }
_ZN4absl12lts_2026081713hash_internal19PrecombineLengthMixEmm:
 1056|   394M|inline uint64_t PrecombineLengthMix(uint64_t state, size_t len) {
 1057|   394M|  ABSL_ASSUME(len + sizeof(uint64_t) <= sizeof(kStaticRandomData));
  ------------------
  |  |  272|   394M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1058|   394M|  uint64_t data = absl::base_internal::UnalignedLoad64(
 1059|   394M|      reinterpret_cast<const unsigned char*>(&kStaticRandomData[0]) + len);
 1060|   394M|  return state ^ data;
 1061|   394M|}
_ZN4absl12lts_2026081713hash_internal3MixEmm:
 1063|   623M|ABSL_ATTRIBUTE_ALWAYS_INLINE inline uint64_t Mix(uint64_t lhs, uint64_t rhs) {
 1064|       |  // Though the 128-bit product needs multiple instructions on non-x86-64
 1065|       |  // platforms, it is still a good balance between speed and hash quality.
 1066|   623M|  absl::uint128 m = lhs;
 1067|   623M|  m *= rhs;
 1068|   623M|  return Uint128High64(m) ^ Uint128Low64(m);
 1069|   623M|}
_ZN4absl12lts_2026081713hash_internal5Read8EPKh:
 1079|   457k|inline uint64_t Read8(const unsigned char* p) {
 1080|   457k|  return absl::base_internal::UnalignedLoad64(p);
 1081|   457k|}
_ZN4absl12lts_2026081713hash_internal9Read9To16EPKhm:
 1090|  98.9k|                                               size_t len) {
 1091|  98.9k|  return {Read8(p), Read8(p + len - 8)};
 1092|  98.9k|}
_ZN4absl12lts_2026081713hash_internal8Read4To8EPKhm:
 1096|   137M|inline uint64_t Read4To8(const unsigned char* p, size_t len) {
 1097|       |  // If `len < 8`, we duplicate bytes. We always put low memory at the end.
 1098|       |  // E.g., on little endian platforms:
 1099|       |  // `ABCD` will be read as `ABCDABCD`.
 1100|       |  // `ABCDE` will be read as `BCDEABCD`.
 1101|       |  // `ABCDEF` will be read as `CDEFABCD`.
 1102|       |  // `ABCDEFG` will be read as `DEFGABCD`.
 1103|       |  // `ABCDEFGH` will be read as `EFGHABCD`.
 1104|       |  // We also do not care about endianness. On big-endian platforms, bytes will
 1105|       |  // be permuted differently. We always shift low memory by 32, because that
 1106|       |  // can be pipelined earlier. Reading high memory requires computing
 1107|       |  // `p + len - 4`.
 1108|   137M|  uint64_t most_significant =
 1109|   137M|      static_cast<uint64_t>(absl::base_internal::UnalignedLoad32(p)) << 32;
 1110|   137M|  uint64_t least_significant =
 1111|   137M|      absl::base_internal::UnalignedLoad32(p + len - 4);
 1112|   137M|  return most_significant | least_significant;
 1113|   137M|}
_ZN4absl12lts_2026081713hash_internal8Read1To3EPKhm:
 1116|   256M|inline uint32_t Read1To3(const unsigned char* p, size_t len) {
 1117|       |  // The trick used by this implementation is to avoid branches.
 1118|       |  // We always read three bytes by duplicating.
 1119|       |  // E.g.,
 1120|       |  // `A` is read as `AAA`.
 1121|       |  // `AB` is read as `ABB`.
 1122|       |  // `ABC` is read as `ABC`.
 1123|       |  // We always shift `p[0]` so that it can be pipelined better.
 1124|       |  // Other bytes require extra computation to find indices.
 1125|   256M|  uint32_t mem0 = (static_cast<uint32_t>(p[0]) << 16) | p[len - 1];
 1126|   256M|  uint32_t mem1 = static_cast<uint32_t>(p[len / 2]) << 8;
 1127|   256M|  return mem0 | mem1;
 1128|   256M|}
_ZN4absl12lts_2026081713hash_internal14CombineRawImplEmm:
 1171|   616M|                                                            uint64_t value) {
 1172|   616M|  return Mix(state ^ value, kMul);
 1173|   616M|}
_ZN4absl12lts_2026081713hash_internal26CombineSmallContiguousImplEmPKhm:
 1187|   393M|    uint64_t state, const unsigned char* first, size_t len) {
 1188|   393M|  ABSL_ASSUME(len <= 8);
  ------------------
  |  |  272|   393M|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1189|   393M|  uint64_t v;
 1190|   393M|  if (len >= 4) {
  ------------------
  |  Branch (1190:7): [True: 137M, False: 256M]
  ------------------
 1191|   137M|    v = Read4To8(first, len);
 1192|   256M|  } else if (len > 0) {
  ------------------
  |  Branch (1192:14): [True: 256M, False: 283]
  ------------------
 1193|   256M|    v = Read1To3(first, len);
 1194|   256M|  } else {
 1195|       |    // Empty string must modify the state.
 1196|    283|    v = 0x57;
 1197|    283|  }
 1198|   393M|  return CombineRawImpl(state, v);
 1199|   393M|}
_ZN4absl12lts_2026081713hash_internal26CombineContiguousImpl9to16EmPKhm:
 1202|  98.9k|    uint64_t state, const unsigned char* first, size_t len) {
 1203|  98.9k|  ABSL_ASSUME(len >= 9);
  ------------------
  |  |  272|  98.9k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1204|  98.9k|  ABSL_ASSUME(len <= 16);
  ------------------
  |  |  272|  98.9k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1205|       |  // Note: any time one half of the mix function becomes zero it will fail to
 1206|       |  // incorporate any bits from the other half. However, there is exactly 1 in
 1207|       |  // 2^64 values for each side that achieve this, and only when the size is
 1208|       |  // exactly 16 -- for smaller sizes there is an overlapping byte that makes
 1209|       |  // this impossible unless the seed is *also* incredibly unlucky.
 1210|  98.9k|  auto p = Read9To16(first, len);
 1211|  98.9k|  return Mix(state ^ p.first, kMul ^ p.second);
 1212|  98.9k|}
_ZN4absl12lts_2026081713hash_internal27CombineContiguousImpl17to32EmPKhm:
 1215|  64.9k|    uint64_t state, const unsigned char* first, size_t len) {
 1216|  64.9k|  ABSL_ASSUME(len >= 17);
  ------------------
  |  |  272|  64.9k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1217|  64.9k|  ABSL_ASSUME(len <= 32);
  ------------------
  |  |  272|  64.9k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1218|       |  // Do two mixes of overlapping 16-byte ranges in parallel to minimize
 1219|       |  // latency.
 1220|  64.9k|  const uint64_t m0 =
 1221|  64.9k|      Mix(Read8(first) ^ kStaticRandomData[1], Read8(first + 8) ^ state);
 1222|       |
 1223|  64.9k|  const unsigned char* tail_16b_ptr = first + (len - 16);
 1224|  64.9k|  const uint64_t m1 = Mix(Read8(tail_16b_ptr) ^ kStaticRandomData[3],
 1225|  64.9k|                          Read8(tail_16b_ptr + 8) ^ state);
 1226|  64.9k|  return m0 ^ m1;
 1227|  64.9k|}
_ZN4absl12lts_2026081713hash_internal21CombineContiguousImplEmPKhmNSt3__117integral_constantIiLi8EEE:
 1311|   394M|    std::integral_constant<int, 8> /* sizeof_size_t */) {
 1312|       |  // For large values we use LowLevelHash or CityHash depending on the platform,
 1313|       |  // for small ones we use custom low latency hash.
 1314|   394M|  if (len <= 8) {
  ------------------
  |  Branch (1314:7): [True: 393M, False: 234k]
  ------------------
 1315|   393M|    return CombineSmallContiguousImpl(PrecombineLengthMix(state, len), first,
 1316|   393M|                                      len);
 1317|   393M|  }
 1318|   234k|  if (len <= 16) {
  ------------------
  |  Branch (1318:7): [True: 98.9k, False: 135k]
  ------------------
 1319|  98.9k|    return CombineContiguousImpl9to16(PrecombineLengthMix(state, len), first,
 1320|  98.9k|                                      len);
 1321|  98.9k|  }
 1322|   135k|  if (len <= 32) {
  ------------------
  |  Branch (1322:7): [True: 64.9k, False: 70.7k]
  ------------------
 1323|  64.9k|    return CombineContiguousImpl17to32(PrecombineLengthMix(state, len), first,
 1324|  64.9k|                                       len);
 1325|  64.9k|  }
 1326|       |  // We must not mix length into the state here because calling
 1327|       |  // CombineContiguousImpl twice with PiecewiseChunkSize() must be equivalent
 1328|       |  // to calling CombineLargeContiguousImpl once with 2 * PiecewiseChunkSize().
 1329|  70.7k|  return CombineLargeContiguousImplOn64BitLengthGt32(state, first, len);
 1330|   135k|}
_ZN4absl12lts_2026081713hash_internal15MixingHashState14hash_with_seedINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSA_m:
 1473|   394M|  static size_t hash_with_seed(const T& value, size_t seed) {
 1474|   394M|    return static_cast<size_t>(combine(MixingHashState{seed}, value).state_);
 1475|   394M|  }
_ZN4absl12lts_2026081713hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEJEEES3_S3_RKT_DpRKT0_:
 1598|   394M|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1599|   394M|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1600|   394M|                        std::move(state), value),
 1601|   394M|                    values...);
 1602|   394M|}
_ZN4absl12lts_2026081713hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEENS6_9enable_ifIXsr3stdE9is_same_vIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEESC_E4typeESC_RKT0_:
 1376|   394M|        H> {
 1377|   394M|      return AbslHashValue(std::move(state), value);
 1378|   394M|    }
_ZN4absl12lts_2026081713hash_internal13AbslHashValueINS1_15MixingHashStateEEET_S4_NSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  659|   394M|H AbslHashValue(H hash_state, absl::string_view str) {
  660|   394M|  return H::combine_contiguous(std::move(hash_state), str.data(), str.size());
  661|   394M|}
_ZN4absl12lts_2026081713hash_internal13HashStateBaseINS1_15MixingHashStateEE18combine_contiguousIcEES3_S3_PKT_m:
 1606|   394M|H HashStateBase<H>::combine_contiguous(H state, const T* data, size_t size) {
 1607|   394M|  return hash_internal::hash_range_or_bytes(std::move(state), data, size);
 1608|   394M|}
_ZN4absl12lts_2026081713hash_internal19hash_range_or_bytesINS1_15MixingHashStateEcEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES7_PKS6_m:
 1029|   394M|    H hash_state, const T* data, size_t size) {
 1030|   394M|  const auto* bytes = reinterpret_cast<const unsigned char*>(data);
 1031|   394M|  return H::combine_contiguous(std::move(hash_state), bytes, sizeof(T) * size);
 1032|   394M|}
_ZN4absl12lts_2026081713hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineES3_:
  299|   839M|  static H combine(H state) { return state; }
_ZNK4absl12lts_2026081713hash_internal12HashWithSeed4hashINS1_4HashINSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEEES9_EEmRKT_RKT0_m:
  412|   394M|  size_t hash(const Hasher& hasher, const T& value, size_t seed) const {
  413|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  414|   394M|    return hasher.hash_with_seed(value, seed);
  415|   394M|  }
_ZNK4absl12lts_2026081713hash_internal8HashImplINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEE14hash_with_seedERKS7_m:
 1587|   394M|  size_t hash_with_seed(const T& value, size_t seed) const {
 1588|   394M|    return MixingHashState::hash_with_seed(value, seed);
 1589|   394M|  }
_ZN4absl12lts_2026081713hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineImJEEES3_S3_RKT_DpRKT0_:
 1598|   222M|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1599|   222M|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1600|   222M|                        std::move(state), value),
 1601|   222M|                    values...);
 1602|   222M|}
_ZN4absl12lts_2026081713hash_internal10HashSelect24UniquelyRepresentedProbe6InvokeINS1_15MixingHashStateEmEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES9_RKS8_:
 1367|   222M|        -> std::enable_if_t<is_uniquely_represented<T>::value, H> {
 1368|   222M|      return hash_internal::hash_bytes(std::move(state), value);
 1369|   222M|    }
_ZN4absl12lts_2026081713hash_internal10hash_bytesINS1_15MixingHashStateEmTnNSt3__19enable_ifIXsr12FitsIn64BitsIT0_EE5valueEiE4typeELi0EEET_S9_RKS6_:
  422|   222M|H hash_bytes(H hash_state, const T& value) {
  423|   222M|  const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
  424|   222M|  uint64_t v;
  425|       |  if constexpr (sizeof(T) == 1) {
  426|       |    v = *start;
  427|       |  } else if constexpr (sizeof(T) == 2) {
  428|       |    v = absl::base_internal::UnalignedLoad16(start);
  429|       |  } else if constexpr (sizeof(T) == 4) {
  430|       |    v = absl::base_internal::UnalignedLoad32(start);
  431|   222M|  } else {
  432|   222M|    static_assert(sizeof(T) == 8);
  433|   222M|    v = absl::base_internal::UnalignedLoad64(start);
  434|   222M|  }
  435|   222M|  return CombineRaw()(std::move(hash_state), v);
  436|   222M|}
_ZNK4absl12lts_2026081713hash_internal10CombineRawclINS1_15MixingHashStateEEET_S5_m:
  404|   222M|  H operator()(H state, uint64_t value) const {
  405|   222M|    return H::combine_raw(std::move(state), value);
  406|   222M|  }
_ZNK4absl12lts_2026081713hash_internal12HashWithSeed4hashINS0_18container_internal10StringHashENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEEmRKT_RKT0_m:
  412|   394M|  size_t hash(const Hasher& hasher, const T& value, size_t seed) const {
  413|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  414|   394M|    return hasher.hash_with_seed(value, seed);
  415|   394M|  }
_ZNK4absl12lts_2026081713hash_internal12HashWithSeed4hashINS0_18container_internal10StringHashENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEmRKT_RKT0_m:
  412|   123k|  size_t hash(const Hasher& hasher, const T& value, size_t seed) const {
  413|       |    // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
  414|   123k|    return hasher.hash_with_seed(value, seed);
  415|   123k|  }
unigram_model.cc:_ZNK4absl12lts_2026081713hash_internal8HashImplIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEEclERKS8_:
 1580|   222M|  size_t operator()(const T& value) const {
 1581|   222M|    return MixingHashState::hash(value);
 1582|   222M|  }
unigram_model.cc:_ZN4absl12lts_2026081713hash_internal15MixingHashState4hashIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEEEmRKT_:
 1457|   222M|  static size_t hash(const T& value) {
 1458|   222M|    return hash_with_seed(value, Seed());
 1459|   222M|  }
unigram_model.cc:_ZN4absl12lts_2026081713hash_internal15MixingHashState14hash_with_seedIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisETnNSt3__19enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSC_m:
 1473|   222M|  static size_t hash_with_seed(const T& value, size_t seed) {
 1474|   222M|    return static_cast<size_t>(combine(MixingHashState{seed}, value).state_);
 1475|   222M|  }
unigram_model.cc:_ZN4absl12lts_2026081713hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEJEEES3_S3_RKT_DpRKT0_:
 1598|   222M|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1599|   222M|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1600|   222M|                        std::move(state), value),
 1601|   222M|                    values...);
 1602|   222M|}
unigram_model.cc:_ZN4absl12lts_2026081713hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEEENSt3__19enable_ifIXsr3stdE9is_same_vIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEESE_E4typeESE_RKT0_:
 1376|   222M|        H> {
 1377|   222M|      return AbslHashValue(std::move(state), value);
 1378|   222M|    }
unigram_model.cc:_ZN4absl12lts_2026081713hash_internal13AbslHashValueINS1_15MixingHashStateEPKN13sentencepiece7unigram12_GLOBAL__N_110HypothesisEEENSt3__19enable_ifIXsr3stdE12is_pointer_vIT0_EET_E4typeESD_SC_:
  541|   222M|std::enable_if_t<std::is_pointer_v<T>, H> AbslHashValue(H hash_state, T ptr) {
  542|   222M|  auto v = reinterpret_cast<uintptr_t>(ptr);
  543|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  544|       |  // bits follow a pattern since they are also multiples of some base value.
  545|       |  // The PointerAlignment test verifies that our mixing is good enough to handle
  546|       |  // these cases.
  547|   222M|  return H::combine(std::move(hash_state), v);
  548|   222M|}

_ZN4absl12lts_2026081711MinLogLevelEv:
   87|  5.60k|absl::LogSeverityAtLeast MinLogLevel() {
   88|  5.60k|  return static_cast<absl::LogSeverityAtLeast>(
   89|  5.60k|      min_log_level.load(std::memory_order_acquire));
   90|  5.60k|}
_ZN4absl12lts_2026081715StderrThresholdEv:
  109|  5.60k|absl::LogSeverityAtLeast StderrThreshold() {
  110|  5.60k|  return static_cast<absl::LogSeverityAtLeast>(
  111|  5.60k|      stderrthreshold.load(std::memory_order_acquire));
  112|  5.60k|}
_ZN4absl12lts_2026081722ShouldPrependLogPrefixEv:
  168|  5.60k|bool ShouldPrependLogPrefix() {
  169|  5.60k|  return prepend_log_prefix.load(std::memory_order_acquire);
  170|  5.60k|}

_ZN4absl12lts_2026081712log_internal15AppendTruncatedENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERNS0_4SpanIcEE:
   32|  40.5k|inline size_t AppendTruncated(absl::string_view src, absl::Span<char> &dst) {
   33|  40.5k|  if (src.size() > dst.size()) src = src.substr(0, dst.size());
  ------------------
  |  Branch (33:7): [True: 0, False: 40.5k]
  ------------------
   34|  40.5k|  memcpy(dst.data(), src.data(), src.size());
   35|  40.5k|  dst.remove_prefix(src.size());
   36|  40.5k|  return src.size();
   37|  40.5k|}

_ZN4absl12lts_2026081712log_internal21GetReferenceableValueEm:
  544|   783k|constexpr unsigned long GetReferenceableValue(unsigned long t) { return t; }
_ZN4absl12lts_2026081712log_internal12Check_LEImplImmEEPKcRKT_RKT0_S4_:
  489|   391k|      const T1& v1, const T2& v2, const char* absl_nonnull exprtext) {     \
  490|   391k|    using U1 = CheckOpStreamType<T1, T2>;                                  \
  491|   391k|    using U2 = CheckOpStreamType<T2, T1>;                                  \
  492|   391k|    return ABSL_PREDICT_TRUE(v1 op v2)                                     \
  ------------------
  |  |  191|   391k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 391k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 391k]
  |  |  |  Branch (191:57): [True: 391k, False: 0]
  |  |  ------------------
  ------------------
  493|   391k|               ? nullptr                                                   \
  494|   391k|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, U1(v1),    \
  ------------------
  |  |  479|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  495|   391k|                                                        U2(v2), exprtext); \
  496|   391k|  }                                                                        \

_ZN4absl12lts_2026081712log_internal13IsInitializedEv:
   54|  11.2k|bool IsInitialized() {
   55|  11.2k|  return logging_initialized.load(std::memory_order_acquire);
   56|  11.2k|}
_ZN4absl12lts_2026081712log_internal13WriteToStderrENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEENS0_11LogSeverityE:
   62|  5.60k|void WriteToStderr(absl::string_view message, absl::LogSeverity severity) {
   63|  5.60k|  if (message.empty()) return;
  ------------------
  |  Branch (63:7): [True: 0, False: 5.60k]
  ------------------
   64|       |#if defined(__EMSCRIPTEN__)
   65|       |  // In WebAssembly, bypass filesystem emulation via fwrite.
   66|       |  // Skip a trailing newline character as emscripten_errn adds one itself.
   67|       |  const auto message_minus_newline = absl::StripSuffix(message, "\n");
   68|       |  // emscripten_errn was introduced in 3.1.41 but broken in standalone mode
   69|       |  // until 3.1.43.
   70|       |#if ABSL_INTERNAL_EMSCRIPTEN_VERSION >= 3001043
   71|       |  emscripten_errn(message_minus_newline.data(), message_minus_newline.size());
   72|       |#else
   73|       |  std::string null_terminated_message(message_minus_newline);
   74|       |  _emscripten_err(null_terminated_message.c_str());
   75|       |#endif
   76|       |#else
   77|       |  // Avoid using std::cerr from this module since we may get called during
   78|       |  // exit code, and cerr may be partially or fully destroyed by then.
   79|  5.60k|  std::fwrite(message.data(), message.size(), 1, stderr);
   80|  5.60k|#endif
   81|       |
   82|       |#if defined(_WIN64) || defined(_WIN32) || defined(_WIN16)
   83|       |  // C99 requires stderr to not be fully-buffered by default (7.19.3.7), but
   84|       |  // MS CRT buffers it anyway, so we must `fflush` to ensure the string hits
   85|       |  // the console/file before the program dies (and takes the libc buffers
   86|       |  // with it).
   87|       |  // https://docs.microsoft.com/en-us/cpp/c-runtime-library/stream-i-o
   88|       |  if (severity >= absl::LogSeverity::kWarning) {
   89|       |    std::fflush(stderr);
   90|       |  }
   91|       |#else
   92|       |  // Avoid unused parameter warning in this branch.
   93|  5.60k|  (void)severity;
   94|  5.60k|#endif
   95|  5.60k|}
_ZN4absl12lts_2026081712log_internal8TimeZoneEv:
  109|  5.60k|const absl::TimeZone* TimeZone() {
  110|  5.60k|  return timezone_ptr.load(std::memory_order_acquire);
  111|  5.60k|}

_ZN4absl12lts_2026081712log_internal15FormatLogPrefixENS0_11LogSeverityENS0_4TimeEiNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiNS1_12PrefixFormatERNS0_4SpanIcEE:
  194|  5.60k|                       int line, PrefixFormat format, absl::Span<char>& buf) {
  195|  5.60k|  auto prefix_size = FormatBoundedFields(severity, timestamp, tid, buf);
  196|  5.60k|  prefix_size += log_internal::AppendTruncated(basename, buf);
  197|  5.60k|  prefix_size += FormatLineNumber(line, buf);
  198|  5.60k|  if (format == PrefixFormat::kRaw)
  ------------------
  |  Branch (198:7): [True: 0, False: 5.60k]
  ------------------
  199|      0|    prefix_size += log_internal::AppendTruncated("RAW: ", buf);
  200|  5.60k|  return prefix_size;
  201|  5.60k|}
log_format.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_119FormatBoundedFieldsENS0_11LogSeverityENS0_4TimeEiRNS0_4SpanIcEE:
   78|  5.60k|                           log_internal::Tid tid, absl::Span<char>& buf) {
   79|  5.60k|  constexpr size_t kBoundedFieldsMaxLen =
   80|  5.60k|      sizeof("SMMDD HH:MM:SS.NNNNNN  ") +
   81|  5.60k|      (1 + std::numeric_limits<log_internal::Tid>::digits10 + 1) - sizeof("");
   82|  5.60k|  if (ABSL_PREDICT_FALSE(buf.size() < kBoundedFieldsMaxLen)) {
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
   83|       |    // We don't bother trying to truncate these fields if the buffer is too
   84|       |    // short (or almost too short) because it would require doing a lot more
   85|       |    // length checking (slow) and it should never happen.  A 15kB buffer should
   86|       |    // be enough for anyone.  Instead we mark `buf` full without writing
   87|       |    // anything.
   88|      0|    buf.remove_suffix(buf.size());
   89|      0|    return 0;
   90|      0|  }
   91|       |
   92|       |  // We can't call absl::LocalTime(), localtime_r(), or anything else here that
   93|       |  // isn't async-signal-safe. We can only use the time zone if it has already
   94|       |  // been loaded.
   95|  5.60k|  const absl::TimeZone* tz = absl::log_internal::TimeZone();
   96|  5.60k|  if (ABSL_PREDICT_FALSE(tz == nullptr)) {
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 5.60k, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 5.60k, False: 0]
  |  |  ------------------
  ------------------
   97|       |    // If a time zone hasn't been set yet because we are logging before the
   98|       |    // logging library has been initialized, we fallback to a simpler, slower
   99|       |    // method. Just report the raw Unix time in seconds. We cram this into the
  100|       |    // normal time format for the benefit of parsers.
  101|  5.60k|    auto tv = absl::ToTimeval(timestamp);
  102|  5.60k|    int snprintf_result = absl::SNPrintF(
  103|  5.60k|        buf.data(), buf.size(), "%c0000 00:00:%02d.%06d %7d ",
  104|  5.60k|        absl::LogSeverityName(severity)[0], static_cast<int>(tv.tv_sec),
  105|  5.60k|        static_cast<int>(tv.tv_usec), static_cast<int>(tid));
  106|  5.60k|    if (snprintf_result >= 0) {
  ------------------
  |  Branch (106:9): [True: 5.60k, False: 0]
  ------------------
  107|  5.60k|      buf.remove_prefix(static_cast<size_t>(snprintf_result));
  108|  5.60k|      return static_cast<size_t>(snprintf_result);
  109|  5.60k|    }
  110|      0|    return 0;
  111|  5.60k|  }
  112|       |
  113|      0|  char* p = buf.data();
  114|      0|  *p++ = absl::LogSeverityName(severity)[0];
  115|      0|  const absl::TimeZone::CivilInfo ci = tz->At(timestamp);
  116|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.month()), p);
  117|      0|  p += 2;
  118|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.day()), p);
  119|      0|  p += 2;
  120|      0|  *p++ = ' ';
  121|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.hour()), p);
  122|      0|  p += 2;
  123|      0|  *p++ = ':';
  124|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.minute()),
  125|      0|                                       p);
  126|      0|  p += 2;
  127|      0|  *p++ = ':';
  128|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.second()),
  129|      0|                                       p);
  130|      0|  p += 2;
  131|      0|  *p++ = '.';
  132|      0|  const int64_t usecs = absl::ToInt64Microseconds(ci.subsecond);
  133|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(usecs / 10000), p);
  134|      0|  p += 2;
  135|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(usecs / 100 % 100),
  136|      0|                                       p);
  137|      0|  p += 2;
  138|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(usecs % 100), p);
  139|      0|  p += 2;
  140|      0|  *p++ = ' ';
  141|      0|  PutLeadingWhitespace(tid, p);
  142|      0|  p = absl::numbers_internal::FastIntToBuffer(tid, p);
  143|      0|  *p++ = ' ';
  144|      0|  const size_t bytes_formatted = static_cast<size_t>(p - buf.data());
  145|      0|  buf.remove_prefix(bytes_formatted);
  146|      0|  return bytes_formatted;
  147|  5.60k|}
log_format.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_116FormatLineNumberEiRNS0_4SpanIcEE:
  149|  5.60k|size_t FormatLineNumber(int line, absl::Span<char>& buf) {
  150|  5.60k|  constexpr size_t kLineFieldMaxLen =
  151|  5.60k|      sizeof(":] ") + (1 + std::numeric_limits<int>::digits10 + 1) - sizeof("");
  152|  5.60k|  if (ABSL_PREDICT_FALSE(buf.size() < kLineFieldMaxLen)) {
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
  153|       |    // As above, we don't bother trying to truncate this if the buffer is too
  154|       |    // short and it should never happen.
  155|      0|    buf.remove_suffix(buf.size());
  156|      0|    return 0;
  157|      0|  }
  158|  5.60k|  char* p = buf.data();
  159|  5.60k|  *p++ = ':';
  160|  5.60k|  p = absl::numbers_internal::FastIntToBuffer(line, p);
  161|  5.60k|  *p++ = ']';
  162|  5.60k|  *p++ = ' ';
  163|  5.60k|  const size_t bytes_formatted = static_cast<size_t>(p - buf.data());
  164|  5.60k|  buf.remove_prefix(bytes_formatted);
  165|  5.60k|  return bytes_formatted;
  166|  5.60k|}

_ZN4absl12lts_2026081712log_internal10LogMessage19CopyToEncodedBufferILNS2_10StringTypeE0EEEvNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  607|  21.7k|void LogMessage::CopyToEncodedBuffer(absl::string_view str) {
  608|  21.7k|  auto encoded_remaining_copy = data_->encoded_remaining();
  609|  21.7k|  constexpr uint8_t tag_value = str_type == StringType::kLiteral
  ------------------
  |  Branch (609:33): [True: 0, Folded]
  ------------------
  610|  21.7k|                                    ? ValueTag::kStringLiteral
  611|  21.7k|                                    : ValueTag::kString;
  612|  21.7k|  auto start = EncodeMessageStart(
  613|  21.7k|      EventTag::kValue,
  614|  21.7k|      BufferSizeFor(tag_value, WireType::kLengthDelimited) + str.size(),
  615|  21.7k|      &encoded_remaining_copy);
  616|       |  // If the `logging.proto.Event.value` field header did not fit,
  617|       |  // `EncodeMessageStart` will have zeroed `encoded_remaining_copy`'s size and
  618|       |  // `EncodeStringTruncate` will fail too.
  619|  21.7k|  if (EncodeStringTruncate(tag_value, str, &encoded_remaining_copy)) {
  ------------------
  |  Branch (619:7): [True: 21.7k, False: 0]
  ------------------
  620|       |    // The string may have been truncated, but the field header fit.
  621|  21.7k|    EncodeMessageLength(start, &encoded_remaining_copy);
  622|  21.7k|    data_->encoded_remaining() = encoded_remaining_copy;
  623|  21.7k|  } else {
  624|       |    // The field header(s) did not fit; zero `encoded_remaining()` so we don't
  625|       |    // write anything else later.
  626|      0|    data_->encoded_remaining().remove_suffix(data_->encoded_remaining().size());
  627|      0|  }
  628|  21.7k|}
_ZN4absl12lts_2026081712log_internal10LogMessage14LogMessageDataC2ENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiNS0_11LogSeverityENS0_4TimeE:
  206|  5.60k|    : extra_sinks_only(false), manipulated(nullptr) {
  207|       |  // Legacy defaults for LOG's ostream:
  208|  5.60k|  manipulated.setf(std::ios_base::showbase | std::ios_base::boolalpha);
  209|  5.60k|  entry.full_filename_ = file;
  210|  5.60k|  entry.base_filename_ = Basename(file);
  211|  5.60k|  entry.line_ = line;
  212|  5.60k|  entry.prefix_ = absl::ShouldPrependLogPrefix();
  213|  5.60k|  entry.severity_ = absl::NormalizeLogSeverity(severity);
  214|  5.60k|  entry.verbose_level_ = absl::LogEntry::kNoVerbosityLevel;
  215|  5.60k|  entry.timestamp_ = timestamp;
  216|  5.60k|  entry.tid_ = absl::base_internal::GetCachedTID();
  217|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessage14LogMessageData27InitializeEncodingAndFormatEv:
  219|  5.60k|void LogMessage::LogMessageData::InitializeEncodingAndFormat() {
  220|  5.60k|  EncodeStringTruncate(EventTag::kFileName, entry.source_filename(),
  221|  5.60k|                       &encoded_remaining());
  222|  5.60k|  EncodeVarint(EventTag::kFileLine, entry.source_line(), &encoded_remaining());
  223|  5.60k|  EncodeVarint(EventTag::kTimeNsecs, absl::ToUnixNanos(entry.timestamp()),
  224|  5.60k|               &encoded_remaining());
  225|  5.60k|  EncodeVarint(EventTag::kSeverity,
  226|  5.60k|               ProtoSeverity(entry.log_severity(), entry.verbosity()),
  227|  5.60k|               &encoded_remaining());
  228|  5.60k|  EncodeVarint(EventTag::kThreadId, static_cast<uint64_t>(entry.tid()),
  229|  5.60k|               &encoded_remaining());
  230|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessage14LogMessageData25FinalizeEncodingAndFormatEv:
  232|  5.60k|void LogMessage::LogMessageData::FinalizeEncodingAndFormat() {
  233|       |  // Note that `encoded_remaining()` may have zero size without pointing past
  234|       |  // the end of `encoded_buf`, so the difference between `data()` pointers is
  235|       |  // used to compute the size of `encoded_data`.
  236|  5.60k|  absl::Span<const char> encoded_data(
  237|  5.60k|      encoded_buf.data(),
  238|  5.60k|      static_cast<size_t>(encoded_remaining().data() - encoded_buf.data()));
  239|       |  // `string_remaining` is the suffix of `string_buf` that has not been filled
  240|       |  // yet.
  241|  5.60k|  absl::Span<char> string_remaining(string_buf);
  242|       |  // We may need to write a newline and nul-terminator at the end of the decoded
  243|       |  // string data.  Rather than worry about whether those should overwrite the
  244|       |  // end of the string (if the buffer is full) or be appended, we avoid writing
  245|       |  // into the last two bytes so we always have space to append.
  246|  5.60k|  string_remaining.remove_suffix(2);
  247|  5.60k|  entry.prefix_len_ =
  248|  5.60k|      entry.prefix() ? log_internal::FormatLogPrefix(
  ------------------
  |  Branch (248:7): [True: 5.60k, False: 0]
  ------------------
  249|  5.60k|                           entry.log_severity(), entry.timestamp(), entry.tid(),
  250|  5.60k|                           entry.source_basename(), entry.source_line(),
  251|  5.60k|                           log_internal::ThreadIsLoggingToLogSink()
  ------------------
  |  Branch (251:28): [True: 0, False: 5.60k]
  ------------------
  252|  5.60k|                               ? PrefixFormat::kRaw
  253|  5.60k|                               : PrefixFormat::kNotRaw,
  254|  5.60k|                           string_remaining)
  255|  5.60k|                     : 0;
  256|       |  // Decode data from `encoded_buf` until we run out of data or we run out of
  257|       |  // `string_remaining`.
  258|  5.60k|  ProtoField field;
  259|  68.5k|  while (field.DecodeFrom(&encoded_data)) {
  ------------------
  |  Branch (259:10): [True: 62.9k, False: 5.60k]
  ------------------
  260|  62.9k|    switch (field.tag()) {
  ------------------
  |  Branch (260:13): [True: 34.9k, False: 28.0k]
  ------------------
  261|  34.9k|      case EventTag::kValue:
  ------------------
  |  Branch (261:7): [True: 34.9k, False: 28.0k]
  ------------------
  262|  34.9k|        if (field.type() != WireType::kLengthDelimited) continue;
  ------------------
  |  Branch (262:13): [True: 0, False: 34.9k]
  ------------------
  263|  34.9k|        if (PrintValue(string_remaining, field.bytes_value())) continue;
  ------------------
  |  Branch (263:13): [True: 34.9k, False: 0]
  ------------------
  264|      0|        break;
  265|  62.9k|    }
  266|  62.9k|  }
  267|  5.60k|  auto chars_written =
  268|  5.60k|      static_cast<size_t>(string_remaining.data() - string_buf.data());
  269|  5.60k|    string_buf[chars_written++] = '\n';
  270|  5.60k|  string_buf[chars_written++] = '\0';
  271|  5.60k|  entry.text_message_with_prefix_and_newline_and_nul_ =
  272|  5.60k|      absl::MakeSpan(string_buf).subspan(0, chars_written);
  273|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessageC2EPKciNS0_11LogSeverityE:
  277|  5.60k|  : LogMessage(absl::string_view(file), line, severity) {}
_ZN4absl12lts_2026081712log_internal10LogMessageC2ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEiNS0_11LogSeverityE:
  281|  5.60k|          std::make_unique<LogMessageData>(file, line, severity, absl::Now())) {
  282|  5.60k|  data_->first_fatal = false;
  283|  5.60k|  data_->is_perror = false;
  284|  5.60k|  data_->fail_quietly = false;
  285|       |
  286|       |  // This logs a backtrace even if the location is subsequently changed using
  287|       |  // AtLocation.  This quirk, and the behavior when AtLocation is called twice,
  288|       |  // are fixable but probably not worth fixing.
  289|  5.60k|  LogBacktraceIfNeeded();
  290|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessageC2EPKciNS2_10WarningTagE:
  295|  5.60k|    : LogMessage(file, line, absl::LogSeverity::kWarning) {}
_ZN4absl12lts_2026081712log_internal10LogMessageD2Ev:
  300|  5.60k|LogMessage::~LogMessage() = default;
_ZN4absl12lts_2026081712log_internal10LogMessage5FlushEv:
  470|  5.60k|void LogMessage::Flush() {
  471|  5.60k|  if (data_->entry.log_severity() < absl::MinLogLevel()) return;
  ------------------
  |  Branch (471:7): [True: 0, False: 5.60k]
  ------------------
  472|       |
  473|  5.60k|  if (data_->is_perror) {
  ------------------
  |  Branch (473:7): [True: 0, False: 5.60k]
  ------------------
  474|      0|    InternalStream() << ": " << absl::base_internal::StrError(errno_saver_())
  475|      0|                     << " [" << errno_saver_() << "]";
  476|      0|  }
  477|       |
  478|       |  // Have we already seen a fatal message?
  479|  5.60k|  ABSL_CONST_INIT static std::atomic<bool> seen_fatal(false);
  ------------------
  |  |  847|  5.60k|#define ABSL_CONST_INIT constinit
  ------------------
  480|  5.60k|  if (data_->entry.log_severity() == absl::LogSeverity::kFatal &&
  ------------------
  |  Branch (480:7): [True: 0, False: 5.60k]
  ------------------
  481|      0|      absl::log_internal::ExitOnDFatal()) {
  ------------------
  |  Branch (481:7): [True: 0, False: 0]
  ------------------
  482|       |    // Exactly one LOG(FATAL) message is responsible for aborting the process,
  483|       |    // even if multiple threads LOG(FATAL) concurrently.
  484|      0|    bool expected_seen_fatal = false;
  485|      0|    if (seen_fatal.compare_exchange_strong(expected_seen_fatal, true,
  ------------------
  |  Branch (485:9): [True: 0, False: 0]
  ------------------
  486|      0|                                           std::memory_order_relaxed)) {
  487|      0|      data_->first_fatal = true;
  488|      0|    }
  489|      0|  }
  490|       |
  491|  5.60k|  data_->FinalizeEncodingAndFormat();
  492|  5.60k|  data_->entry.encoding_ =
  493|  5.60k|      absl::string_view(data_->encoded_buf.data(),
  494|  5.60k|                        static_cast<size_t>(data_->encoded_remaining().data() -
  495|  5.60k|                                            data_->encoded_buf.data()));
  496|  5.60k|  SendToLog();
  497|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessage11OstreamViewC2ERNS2_14LogMessageDataE:
  502|  13.2k|    : data_(message_data), encoded_remaining_copy_(data_.encoded_remaining()) {
  503|       |  // This constructor sets the `streambuf` up so that streaming into an attached
  504|       |  // ostream encodes string data in-place.  To do that, we write appropriate
  505|       |  // headers into the buffer using a copy of the buffer view so that we can
  506|       |  // decide not to keep them later if nothing is ever streamed in.  We don't
  507|       |  // know how much data we'll get, but we can use the size of the remaining
  508|       |  // buffer as an upper bound and fill in the right size once we know it.
  509|  13.2k|  message_start_ =
  510|  13.2k|      EncodeMessageStart(EventTag::kValue, encoded_remaining_copy_.size(),
  511|  13.2k|                         &encoded_remaining_copy_);
  512|  13.2k|  string_start_ =
  513|  13.2k|      EncodeMessageStart(ValueTag::kString, encoded_remaining_copy_.size(),
  514|  13.2k|                         &encoded_remaining_copy_);
  515|  13.2k|  setp(encoded_remaining_copy_.data(),
  516|  13.2k|       encoded_remaining_copy_.data() + encoded_remaining_copy_.size());
  517|  13.2k|  data_.manipulated.rdbuf(this);
  518|  13.2k|}
_ZN4absl12lts_2026081712log_internal10LogMessage11OstreamViewD2Ev:
  520|  13.2k|LogMessage::OstreamView::~OstreamView() {
  521|  13.2k|  data_.manipulated.rdbuf(nullptr);
  522|  13.2k|  if (!string_start_.data()) {
  ------------------
  |  Branch (522:7): [True: 0, False: 13.2k]
  ------------------
  523|       |    // The second field header didn't fit.  Whether the first one did or not, we
  524|       |    // shouldn't commit `encoded_remaining_copy_`, and we also need to zero the
  525|       |    // size of `data_->encoded_remaining()` so that no more data are encoded.
  526|      0|    data_.encoded_remaining().remove_suffix(data_.encoded_remaining().size());
  527|      0|    return;
  528|      0|  }
  529|  13.2k|  const absl::Span<const char> contents(pbase(),
  530|  13.2k|                                        static_cast<size_t>(pptr() - pbase()));
  531|  13.2k|  if (contents.empty()) return;
  ------------------
  |  Branch (531:7): [True: 0, False: 13.2k]
  ------------------
  532|  13.2k|  encoded_remaining_copy_.remove_prefix(contents.size());
  533|  13.2k|  EncodeMessageLength(string_start_, &encoded_remaining_copy_);
  534|  13.2k|  EncodeMessageLength(message_start_, &encoded_remaining_copy_);
  535|  13.2k|  data_.encoded_remaining() = encoded_remaining_copy_;
  536|  13.2k|}
_ZN4absl12lts_2026081712log_internal10LogMessage11OstreamView6streamEv:
  538|  13.2k|std::ostream& LogMessage::OstreamView::stream() { return data_.manipulated; }
_ZNK4absl12lts_2026081712log_internal10LogMessage7IsFatalEv:
  540|  11.2k|bool LogMessage::IsFatal() const {
  541|  11.2k|  return data_->entry.log_severity() == absl::LogSeverity::kFatal &&
  ------------------
  |  Branch (541:10): [True: 0, False: 11.2k]
  ------------------
  542|      0|         absl::log_internal::ExitOnDFatal();
  ------------------
  |  Branch (542:10): [True: 0, False: 0]
  ------------------
  543|  11.2k|}
_ZN4absl12lts_2026081712log_internal10LogMessage9SendToLogEv:
  579|  5.60k|void LogMessage::SendToLog() {
  580|  5.60k|  if (IsFatal()) PrepareToDie();
  ------------------
  |  Branch (580:7): [True: 0, False: 5.60k]
  ------------------
  581|       |  // Also log to all registered sinks, even if OnlyLogToStderr() is set.
  582|  5.60k|  log_internal::LogToSinks(data_->entry, absl::MakeSpan(data_->extra_sinks),
  583|  5.60k|                           data_->extra_sinks_only);
  584|  5.60k|  if (IsFatal()) Die();
  ------------------
  |  Branch (584:7): [True: 0, False: 5.60k]
  ------------------
  585|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessage20LogBacktraceIfNeededEv:
  587|  5.60k|void LogMessage::LogBacktraceIfNeeded() {
  588|  5.60k|  if (!absl::log_internal::IsInitialized()) return;
  ------------------
  |  Branch (588:7): [True: 5.60k, False: 0]
  ------------------
  589|       |
  590|      0|  if (!absl::log_internal::ShouldLogBacktraceAt(data_->entry.source_basename(),
  ------------------
  |  Branch (590:7): [True: 0, False: 0]
  ------------------
  591|      0|                                                data_->entry.source_line()))
  592|      0|    return;
  593|      0|  OstreamView view(*data_);
  594|      0|  view.stream() << " (stacktrace:\n";
  595|      0|  debugging_internal::DumpStackTrace(
  596|      0|      1, log_internal::MaxFramesInLogStackTrace(),
  597|      0|      log_internal::ShouldSymbolizeLogStackTrace(), WriteToStream,
  598|      0|      &view.stream());
  599|      0|  view.stream() << ") ";
  600|      0|}
_ZN4absl12lts_2026081712log_internal10LogMessage14LogMessageData17encoded_remainingEv:
  186|   109k|  absl::Span<char>& encoded_remaining() {
  187|   109k|    if (encoded_remaining_actual_do_not_use_directly.data() == nullptr) {
  ------------------
  |  Branch (187:9): [True: 5.60k, False: 103k]
  ------------------
  188|  5.60k|      encoded_remaining_actual_do_not_use_directly =
  189|  5.60k|          absl::MakeSpan(encoded_buf);
  190|  5.60k|      InitializeEncodingAndFormat();
  191|  5.60k|    }
  192|   109k|    return encoded_remaining_actual_do_not_use_directly;
  193|   109k|  }
log_message.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_18BasenameENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  131|  5.60k|absl::string_view Basename(absl::string_view filepath) {
  132|       |#ifdef _WIN32
  133|       |  size_t path = filepath.find_last_of("/\\");
  134|       |#else
  135|  5.60k|  size_t path = filepath.find_last_of('/');
  136|  5.60k|#endif
  137|  5.60k|  if (path != filepath.npos) filepath.remove_prefix(path + 1);
  ------------------
  |  Branch (137:7): [True: 5.60k, False: 0]
  ------------------
  138|  5.60k|  return filepath;
  139|  5.60k|}
log_message.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_113ProtoSeverityENS0_11LogSeverityEi:
  115|  5.60k|int32_t ProtoSeverity(absl::LogSeverity severity, int verbose_level) {
  116|  5.60k|  switch (severity) {
  117|      0|    case absl::LogSeverity::kInfo:
  ------------------
  |  Branch (117:5): [True: 0, False: 5.60k]
  ------------------
  118|      0|      if (verbose_level == absl::LogEntry::kNoVerbosityLevel) return 800;
  ------------------
  |  Branch (118:11): [True: 0, False: 0]
  ------------------
  119|      0|      return 600 - verbose_level;
  120|  5.60k|    case absl::LogSeverity::kWarning:
  ------------------
  |  Branch (120:5): [True: 5.60k, False: 0]
  ------------------
  121|  5.60k|      return 900;
  122|      0|    case absl::LogSeverity::kError:
  ------------------
  |  Branch (122:5): [True: 0, False: 5.60k]
  ------------------
  123|      0|      return 950;
  124|      0|    case absl::LogSeverity::kFatal:
  ------------------
  |  Branch (124:5): [True: 0, False: 5.60k]
  ------------------
  125|      0|      return 1100;
  126|      0|    default:
  ------------------
  |  Branch (126:5): [True: 0, False: 5.60k]
  ------------------
  127|      0|      return 800;
  128|  5.60k|  }
  129|  5.60k|}
log_message.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_110PrintValueERNS0_4SpanIcEENS3_IKcEE:
   98|  34.9k|bool PrintValue(absl::Span<char>& dst, absl::Span<const char> buf) {
   99|  34.9k|  if (dst.size() <= 1) return false;
  ------------------
  |  Branch (99:7): [True: 0, False: 34.9k]
  ------------------
  100|  34.9k|  ProtoField field;
  101|  69.9k|  while (field.DecodeFrom(&buf)) {
  ------------------
  |  Branch (101:10): [True: 34.9k, False: 34.9k]
  ------------------
  102|  34.9k|    switch (field.tag()) {
  ------------------
  |  Branch (102:13): [True: 34.9k, False: 0]
  ------------------
  103|  13.2k|      case ValueTag::kString:
  ------------------
  |  Branch (103:7): [True: 13.2k, False: 21.7k]
  ------------------
  104|  34.9k|      case ValueTag::kStringLiteral:
  ------------------
  |  Branch (104:7): [True: 21.7k, False: 13.2k]
  ------------------
  105|  34.9k|        if (field.type() == WireType::kLengthDelimited)
  ------------------
  |  Branch (105:13): [True: 34.9k, False: 0]
  ------------------
  106|  34.9k|          if (log_internal::AppendTruncated(field.string_value(), dst) <
  ------------------
  |  Branch (106:15): [True: 0, False: 34.9k]
  ------------------
  107|  34.9k|              field.string_value().size())
  108|      0|            return false;
  109|  34.9k|    }
  110|  34.9k|  }
  111|  34.9k|  return true;
  112|  34.9k|}

_ZN4absl12lts_2026081712log_internal10LogMessage14InternalStreamEv:
  124|  5.60k|  LogMessage& InternalStream() { return *this; }
_ZN4absl12lts_2026081712log_internal10LogMessagelsEi:
  139|  5.60k|  LogMessage& operator<<(signed int v) { return operator<< <signed int>(v); }
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi16EEERS2_RAT__Kc:
  364|  2.92k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  2.92k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  2.92k|  return *this;
  367|  2.92k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi57EEERS2_RAT__Kc:
  364|  2.92k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  2.92k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  2.92k|  return *this;
  367|  2.92k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi32EEERS2_RAT__Kc:
  364|  2.92k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  2.92k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  2.92k|  return *this;
  367|  2.92k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi24EEERS2_RAT__Kc:
  364|     64|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|     64|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|     64|  return *this;
  367|     64|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsEm:
  152|  7.62k|  LogMessage& operator<<(unsigned long v) {
  153|  7.62k|    return operator<< <unsigned long>(v);
  154|  7.62k|  }
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi2EEERS2_RAT__Kc:
  364|  2.51k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  2.51k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  2.51k|  return *this;
  367|  2.51k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi21EEERS2_RAT__Kc:
  364|  5.03k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  5.03k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  5.03k|  return *this;
  367|  5.03k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi28EEERS2_RAT__Kc:
  364|     64|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|     64|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|     64|  return *this;
  367|     64|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi37EEERS2_RAT__Kc:
  364|    158|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|    158|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|    158|  return *this;
  367|    158|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi40EEERS2_RAT__Kc:
  364|     94|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|     94|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|     94|  return *this;
  367|     94|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi18EEERS2_RAT__Kc:
  364|  2.51k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  2.51k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  2.51k|  return *this;
  367|  2.51k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsILi11EEERS2_RAT__Kc:
  364|  2.51k|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  365|  2.51k|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  366|  2.51k|  return *this;
  367|  2.51k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsIiEERS2_RKT_:
  351|  5.60k|LogMessage& LogMessage::operator<<(const T& v) {
  352|       |  if constexpr (absl::HasAbslStringify<T>::value) {
  353|       |    StringifySink sink(*this);
  354|       |    // Replace with public API.
  355|       |    AbslStringify(sink, v);
  356|  5.60k|  } else {
  357|  5.60k|    OstreamView view(*data_);
  358|  5.60k|    view.stream() << log_internal::NullGuard<T>().Guard(v);
  359|  5.60k|  }
  360|  5.60k|  return *this;
  361|  5.60k|}
_ZN4absl12lts_2026081712log_internal10LogMessagelsImEERS2_RKT_:
  351|  7.62k|LogMessage& LogMessage::operator<<(const T& v) {
  352|       |  if constexpr (absl::HasAbslStringify<T>::value) {
  353|       |    StringifySink sink(*this);
  354|       |    // Replace with public API.
  355|       |    AbslStringify(sink, v);
  356|  7.62k|  } else {
  357|  7.62k|    OstreamView view(*data_);
  358|  7.62k|    view.stream() << log_internal::NullGuard<T>().Guard(v);
  359|  7.62k|  }
  360|  7.62k|  return *this;
  361|  7.62k|}

_ZN4absl12lts_2026081712log_internal24ThreadIsLoggingToLogSinkEv:
  277|  11.2k|bool ThreadIsLoggingToLogSink() { return ThreadIsLoggingStatus(); }
_ZN4absl12lts_2026081712log_internal10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEb:
  280|  5.60k|                absl::Span<absl::LogSink*> extra_sinks, bool extra_sinks_only) {
  281|  5.60k|  log_internal::GlobalSinks().LogToSinks(entry, extra_sinks, extra_sinks_only);
  282|  5.60k|}
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_121ThreadIsLoggingStatusEv:
   58|  22.4k|bool& ThreadIsLoggingStatus() {
   59|  22.4k|#ifdef ABSL_HAVE_THREAD_LOCAL
   60|  22.4k|  ABSL_CONST_INIT thread_local bool thread_is_logging = false;
  ------------------
  |  |  847|  22.4k|#define ABSL_CONST_INIT constinit
  ------------------
   61|  22.4k|  return thread_is_logging;
   62|       |#else
   63|       |  ABSL_CONST_INIT static pthread_key_t thread_is_logging_key;
   64|       |  static const bool unused = [] {
   65|       |    if (pthread_key_create(&thread_is_logging_key, [](void* data) {
   66|       |          delete reinterpret_cast<bool*>(data);
   67|       |        })) {
   68|       |      perror("pthread_key_create failed!");
   69|       |      abort();
   70|       |    }
   71|       |    return true;
   72|       |  }();
   73|       |  (void)unused;  // Fixes -wunused-variable warning
   74|       |  bool* thread_is_logging_ptr =
   75|       |      reinterpret_cast<bool*>(pthread_getspecific(thread_is_logging_key));
   76|       |
   77|       |  if (ABSL_PREDICT_FALSE(!thread_is_logging_ptr)) {
   78|       |    thread_is_logging_ptr = new bool{false};
   79|       |    if (pthread_setspecific(thread_is_logging_key, thread_is_logging_ptr)) {
   80|       |      perror("pthread_setspecific failed");
   81|       |      abort();
   82|       |    }
   83|       |  }
   84|       |  return *thread_is_logging_ptr;
   85|       |#endif
   86|  22.4k|}
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_111GlobalSinksEv:
  270|  5.60k|GlobalLogSinkSet& GlobalSinks() {
  271|  5.60k|  static absl::NoDestructor<GlobalLogSinkSet> global_sinks;
  272|  5.60k|  return *global_sinks;
  273|  5.60k|}
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_116GlobalLogSinkSetC2Ev:
  168|      1|  GlobalLogSinkSet() {
  169|       |#if defined(__myriad2__) || defined(__Fuchsia__)
  170|       |    // myriad2 and Fuchsia do not log to stderr by default.
  171|       |#else
  172|      1|    static absl::NoDestructor<StderrLogSink> stderr_log_sink;
  173|      1|    AddLogSink(stderr_log_sink.get());
  174|      1|#endif
  175|       |#ifdef __ANDROID__
  176|       |    static absl::NoDestructor<AndroidLogSink> android_log_sink;
  177|       |    AddLogSink(android_log_sink.get());
  178|       |#endif
  179|       |#if defined(_WIN32)
  180|       |    static absl::NoDestructor<WindowsDebuggerLogSink> debugger_log_sink;
  181|       |    AddLogSink(debugger_log_sink.get());
  182|       |#endif  // !defined(_WIN32)
  183|      1|  }
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryE:
   92|  5.60k|  void Send(const absl::LogEntry& entry) override {
   93|  5.60k|    if (entry.log_severity() < absl::StderrThreshold() &&
  ------------------
  |  Branch (93:9): [True: 5.60k, False: 0]
  ------------------
   94|  5.60k|        absl::log_internal::IsInitialized()) {
  ------------------
  |  Branch (94:9): [True: 0, False: 5.60k]
  ------------------
   95|      0|      return;
   96|      0|    }
   97|       |
   98|  5.60k|    ABSL_CONST_INIT static absl::once_flag warn_if_not_initialized;
  ------------------
  |  |  847|  5.60k|#define ABSL_CONST_INIT constinit
  ------------------
   99|  5.60k|    absl::call_once(warn_if_not_initialized, []() {
  100|  5.60k|      if (absl::log_internal::IsInitialized()) return;
  101|  5.60k|      const char w[] =
  102|  5.60k|          "WARNING: All log messages before absl::InitializeLog() is called"
  103|  5.60k|          " are written to STDERR\n";
  104|  5.60k|      absl::log_internal::WriteToStderr(w, absl::LogSeverity::kWarning);
  105|  5.60k|    });
  106|       |
  107|  5.60k|    if (!entry.stacktrace().empty()) {
  ------------------
  |  Branch (107:9): [True: 0, False: 5.60k]
  ------------------
  108|      0|      absl::log_internal::WriteToStderr(entry.stacktrace(),
  109|      0|                                        entry.log_severity());
  110|  5.60k|    } else {
  111|       |      // TODO(b/226937039): do this outside else condition once we avoid
  112|       |      // ReprintFatalMessage
  113|  5.60k|      absl::log_internal::WriteToStderr(
  114|  5.60k|          entry.text_message_with_prefix_and_newline(), entry.log_severity());
  115|  5.60k|    }
  116|  5.60k|  }
log_sink_set.cc:_ZZN4absl12lts_2026081712log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryEENKUlvE_clEv:
   99|      1|    absl::call_once(warn_if_not_initialized, []() {
  100|      1|      if (absl::log_internal::IsInitialized()) return;
  ------------------
  |  Branch (100:11): [True: 0, False: 1]
  ------------------
  101|      1|      const char w[] =
  102|      1|          "WARNING: All log messages before absl::InitializeLog() is called"
  103|      1|          " are written to STDERR\n";
  104|      1|      absl::log_internal::WriteToStderr(w, absl::LogSeverity::kWarning);
  105|      1|    });
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEb:
  187|  5.60k|      ABSL_LOCKS_EXCLUDED(guard_) {
  188|  5.60k|    SendToSinks(entry, extra_sinks);
  189|       |
  190|  5.60k|    if (!extra_sinks_only) {
  ------------------
  |  Branch (190:9): [True: 5.60k, False: 0]
  ------------------
  191|  5.60k|      if (ThreadIsLoggingToLogSink()) {
  ------------------
  |  Branch (191:11): [True: 0, False: 5.60k]
  ------------------
  192|      0|        absl::log_internal::WriteToStderr(
  193|      0|            entry.text_message_with_prefix_and_newline(), entry.log_severity());
  194|  5.60k|      } else {
  195|  5.60k|        absl::ReaderMutexLock global_sinks_lock(guard_);
  196|  5.60k|        ThreadIsLoggingStatus() = true;
  197|       |        // Ensure the "thread is logging" status is reverted upon leaving the
  198|       |        // scope even in case of exceptions.
  199|  5.60k|        auto status_cleanup =
  200|  5.60k|            absl::MakeCleanup([] { ThreadIsLoggingStatus() = false; });
  201|  5.60k|        SendToSinks(entry, absl::MakeSpan(sinks_));
  202|  5.60k|      }
  203|  5.60k|    }
  204|  5.60k|  }
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_116GlobalLogSinkSet11SendToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEE:
  258|  11.2k|                          absl::Span<absl::LogSink*> sinks) {
  259|  11.2k|    for (absl::LogSink* sink : sinks) {
  ------------------
  |  Branch (259:30): [True: 5.60k, False: 11.2k]
  ------------------
  260|  5.60k|      sink->Send(entry);
  261|  5.60k|    }
  262|  11.2k|  }
log_sink_set.cc:_ZZN4absl12lts_2026081712log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbENKUlvE_clEv:
  200|  5.60k|            absl::MakeCleanup([] { ThreadIsLoggingStatus() = false; });
log_sink_set.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_116GlobalLogSinkSet10AddLogSinkEPNS0_7LogSinkE:
  206|      1|  void AddLogSink(absl::LogSink* sink) ABSL_LOCKS_EXCLUDED(guard_) {
  207|      1|    {
  208|      1|      absl::WriterMutexLock global_sinks_lock(guard_);
  209|      1|      auto pos = std::find(sinks_.begin(), sinks_.end(), sink);
  210|      1|      if (pos == sinks_.end()) {
  ------------------
  |  Branch (210:11): [True: 1, False: 0]
  ------------------
  211|      1|        sinks_.push_back(sink);
  212|      1|        return;
  213|      1|      }
  214|      1|    }
  215|      0|    ABSL_INTERNAL_LOG(FATAL, "Duplicate log sinks are not supported");
  ------------------
  |  |   76|      0|  do {                                                                    \
  |  |   77|      0|    constexpr const char* absl_raw_log_internal_filename = __FILE__;      \
  |  |   78|      0|    ::absl::raw_log_internal::internal_log_function(                      \
  |  |   79|      0|        ABSL_RAW_LOG_INTERNAL_##severity, absl_raw_log_internal_filename, \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   80|      0|        __LINE__, message);                                               \
  |  |   81|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                   \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (82:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  216|      0|  }

_ZN4absl12lts_2026081712log_internal9NullGuardImE5GuardERKm:
   45|  7.62k|  static const T& Guard(const T& v) { return v; }
_ZN4absl12lts_2026081712log_internal9NullGuardIiE5GuardERKi:
   45|  5.60k|  static const T& Guard(const T& v) { return v; }

_ZN4absl12lts_2026081712log_internal12EncodeVarintEmmPNS0_4SpanIcEE:
   52|  22.4k|bool EncodeVarint(uint64_t tag, uint64_t value, absl::Span<char> *buf) {
   53|  22.4k|  const uint64_t tag_type = MakeTagType(tag, WireType::kVarint);
   54|  22.4k|  const size_t tag_type_size = VarintSize(tag_type);
   55|  22.4k|  const size_t value_size = VarintSize(value);
   56|  22.4k|  if (tag_type_size + value_size > buf->size()) {
  ------------------
  |  Branch (56:7): [True: 0, False: 22.4k]
  ------------------
   57|      0|    buf->remove_suffix(buf->size());
   58|      0|    return false;
   59|      0|  }
   60|  22.4k|  EncodeRawVarint(tag_type, tag_type_size, buf);
   61|  22.4k|  EncodeRawVarint(value, value_size, buf);
   62|  22.4k|  return true;
   63|  22.4k|}
_ZN4absl12lts_2026081712log_internal19EncodeBytesTruncateEmNS0_4SpanIKcEEPNS2_IcEE:
  115|  27.3k|                         absl::Span<char> *buf) {
  116|  27.3k|  const uint64_t tag_type = MakeTagType(tag, WireType::kLengthDelimited);
  117|  27.3k|  const size_t tag_type_size = VarintSize(tag_type);
  118|  27.3k|  uint64_t length = value.size();
  119|  27.3k|  const size_t length_size =
  120|  27.3k|      VarintSize(std::min<uint64_t>(length, buf->size()));
  121|  27.3k|  if (tag_type_size + length_size <= buf->size() &&
  ------------------
  |  Branch (121:7): [True: 27.3k, False: 0]
  ------------------
  122|  27.3k|      tag_type_size + length_size + value.size() > buf->size()) {
  ------------------
  |  Branch (122:7): [True: 0, False: 27.3k]
  ------------------
  123|      0|    value.remove_suffix(tag_type_size + length_size + value.size() -
  124|      0|                        buf->size());
  125|      0|    length = value.size();
  126|      0|  }
  127|  27.3k|  if (tag_type_size + length_size + value.size() > buf->size()) {
  ------------------
  |  Branch (127:7): [True: 0, False: 27.3k]
  ------------------
  128|      0|    buf->remove_suffix(buf->size());
  129|      0|    return false;
  130|      0|  }
  131|  27.3k|  EncodeRawVarint(tag_type, tag_type_size, buf);
  132|  27.3k|  EncodeRawVarint(length, length_size, buf);
  133|  27.3k|  memcpy(buf->data(), value.data(), value.size());
  134|  27.3k|  buf->remove_prefix(value.size());
  135|  27.3k|  return true;
  136|  27.3k|}
_ZN4absl12lts_2026081712log_internal18EncodeMessageStartEmmPNS0_4SpanIcEE:
  140|  48.2k|                                                  absl::Span<char> *buf) {
  141|  48.2k|  const uint64_t tag_type = MakeTagType(tag, WireType::kLengthDelimited);
  142|  48.2k|  const size_t tag_type_size = VarintSize(tag_type);
  143|  48.2k|  max_size = std::min<uint64_t>(max_size, buf->size());
  144|  48.2k|  const size_t length_size = VarintSize(max_size);
  145|  48.2k|  if (tag_type_size + length_size > buf->size()) {
  ------------------
  |  Branch (145:7): [True: 0, False: 48.2k]
  ------------------
  146|      0|    buf->remove_suffix(buf->size());
  147|      0|    return absl::Span<char>();
  148|      0|  }
  149|  48.2k|  EncodeRawVarint(tag_type, tag_type_size, buf);
  150|  48.2k|  const absl::Span<char> ret = buf->subspan(0, length_size);
  151|  48.2k|  EncodeRawVarint(0, length_size, buf);
  152|  48.2k|  return ret;
  153|  48.2k|}
_ZN4absl12lts_2026081712log_internal19EncodeMessageLengthENS0_4SpanIcEEPKS3_:
  155|  48.2k|void EncodeMessageLength(absl::Span<char> msg, const absl::Span<char> *buf) {
  156|  48.2k|  if (!msg.data()) return;
  ------------------
  |  Branch (156:7): [True: 0, False: 48.2k]
  ------------------
  157|  48.2k|  assert(buf->data() >= msg.data());
  158|  48.2k|  if (buf->data() < msg.data()) return;
  ------------------
  |  Branch (158:7): [True: 0, False: 48.2k]
  ------------------
  159|  48.2k|  EncodeRawVarint(
  160|  48.2k|      static_cast<uint64_t>(buf->data() - (msg.data() + msg.size())),
  161|  48.2k|      msg.size(), &msg);
  162|  48.2k|}
_ZN4absl12lts_2026081712log_internal10ProtoField10DecodeFromEPNS0_4SpanIKcEE:
  202|   138k|bool ProtoField::DecodeFrom(absl::Span<const char> *data) {
  203|   138k|  if (data->empty()) return false;
  ------------------
  |  Branch (203:7): [True: 40.5k, False: 97.9k]
  ------------------
  204|  97.9k|  const uint64_t tag_type = DecodeVarint(data);
  205|  97.9k|  tag_ = tag_type >> 3;
  206|  97.9k|  type_ = static_cast<WireType>(tag_type & 0x07);
  207|  97.9k|  switch (type_) {
  ------------------
  |  Branch (207:11): [True: 97.9k, False: 0]
  ------------------
  208|  22.4k|    case WireType::kVarint:
  ------------------
  |  Branch (208:5): [True: 22.4k, False: 75.5k]
  ------------------
  209|  22.4k|      value_ = DecodeVarint(data);
  210|  22.4k|      break;
  211|      0|    case WireType::k64Bit:
  ------------------
  |  Branch (211:5): [True: 0, False: 97.9k]
  ------------------
  212|      0|      value_ = Decode64Bit(data);
  213|      0|      break;
  214|  75.5k|    case WireType::kLengthDelimited: {
  ------------------
  |  Branch (214:5): [True: 75.5k, False: 22.4k]
  ------------------
  215|  75.5k|      value_ = DecodeVarint(data);
  216|  75.5k|      data_ = data->subspan(
  217|  75.5k|          0, static_cast<size_t>(std::min<uint64_t>(value_, data->size())));
  218|  75.5k|      data->remove_prefix(data_.size());
  219|  75.5k|      break;
  220|      0|    }
  221|      0|    case WireType::k32Bit:
  ------------------
  |  Branch (221:5): [True: 0, False: 97.9k]
  ------------------
  222|      0|      value_ = Decode32Bit(data);
  223|      0|      break;
  224|  97.9k|  }
  225|  97.9k|  return true;
  226|  97.9k|}
proto.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_115EncodeRawVarintEmmPNS0_4SpanIcEE:
   43|   244k|void EncodeRawVarint(uint64_t value, size_t size, absl::Span<char> *buf) {
   44|   597k|  for (size_t s = 0; s < size; s++) {
  ------------------
  |  Branch (44:22): [True: 353k, False: 244k]
  ------------------
   45|   353k|    (*buf)[s] = static_cast<char>((value & 0x7f) | (s + 1 == size ? 0 : 0x80));
  ------------------
  |  Branch (45:53): [True: 244k, False: 108k]
  ------------------
   46|   353k|    value >>= 7;
   47|   353k|  }
   48|   244k|  buf->remove_prefix(size);
   49|   244k|}
proto.cc:_ZN4absl12lts_2026081712log_internal12_GLOBAL__N_112DecodeVarintEPNS0_4SpanIKcEE:
  165|   195k|uint64_t DecodeVarint(absl::Span<const char> *buf) {
  166|   195k|  uint64_t value = 0;
  167|   195k|  size_t s = 0;
  168|   278k|  while (s < buf->size()) {
  ------------------
  |  Branch (168:10): [True: 278k, False: 0]
  ------------------
  169|   278k|    value |= static_cast<uint64_t>(static_cast<unsigned char>((*buf)[s]) & 0x7f)
  170|   278k|             << 7 * s;
  171|   278k|    if (!((*buf)[s++] & 0x80)) break;
  ------------------
  |  Branch (171:9): [True: 195k, False: 82.4k]
  ------------------
  172|   278k|  }
  173|   195k|  buf->remove_prefix(s);
  174|   195k|  return value;
  175|   195k|}

_ZNK4absl12lts_2026081712log_internal10ProtoField3tagEv:
  245|  97.9k|  uint64_t tag() const { return tag_; }
_ZNK4absl12lts_2026081712log_internal10ProtoField4typeEv:
  246|  69.9k|  WireType type() const { return type_; }
_ZNK4absl12lts_2026081712log_internal10ProtoField11bytes_valueEv:
  275|   104k|  absl::Span<const char> bytes_value() const { return data_; }
_ZNK4absl12lts_2026081712log_internal10ProtoField12string_valueEv:
  276|  69.9k|  absl::string_view string_value() const {
  277|  69.9k|    const auto data = bytes_value();
  278|  69.9k|    return absl::string_view(data.data(), data.size());
  279|  69.9k|  }
_ZN4absl12lts_2026081712log_internal12EncodeVarintEmlPNS0_4SpanIcEE:
   73|  5.60k|inline bool EncodeVarint(uint64_t tag, int64_t value, absl::Span<char> *buf) {
   74|  5.60k|  return EncodeVarint(tag, static_cast<uint64_t>(value), buf);
   75|  5.60k|}
_ZN4absl12lts_2026081712log_internal12EncodeVarintEmiPNS0_4SpanIcEE:
   79|  11.2k|inline bool EncodeVarint(uint64_t tag, int32_t value, absl::Span<char> *buf) {
   80|  11.2k|  return EncodeVarint(tag, static_cast<uint64_t>(value), buf);
   81|  11.2k|}
_ZN4absl12lts_2026081712log_internal20EncodeStringTruncateEmNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS0_4SpanIcEE:
  160|  27.3k|                                 absl::Span<char> *buf) {
  161|  27.3k|  return EncodeBytesTruncate(tag, value, buf);
  162|  27.3k|}
_ZN4absl12lts_2026081712log_internal10VarintSizeEm:
  188|   517k|constexpr size_t VarintSize(uint64_t value) {
  189|   517k|  return value < 128 ? 1 : 1 + VarintSize(value >> 7);
  ------------------
  |  Branch (189:10): [True: 239k, False: 278k]
  ------------------
  190|   517k|}
_ZN4absl12lts_2026081712log_internal13MaxVarintSizeEv:
  194|  21.7k|constexpr size_t MaxVarintSize() {
  195|  21.7k|  return VarintSize((std::numeric_limits<uint64_t>::max)());
  196|  21.7k|}
_ZN4absl12lts_2026081712log_internal11MakeTagTypeEmNS1_8WireTypeE:
  202|   119k|constexpr uint64_t MakeTagType(uint64_t tag, WireType type) {
  203|   119k|  return tag << 3 | static_cast<uint64_t>(type);
  204|   119k|}
_ZN4absl12lts_2026081712log_internal13BufferSizeForEmNS1_8WireTypeE:
  212|  21.7k|constexpr size_t BufferSizeFor(uint64_t tag, WireType type) {
  213|  21.7k|  size_t buffer_size = VarintSize(MakeTagType(tag, type));
  214|  21.7k|  switch (type) {
  ------------------
  |  Branch (214:11): [True: 21.7k, False: 0]
  ------------------
  215|      0|    case WireType::kVarint:
  ------------------
  |  Branch (215:5): [True: 0, False: 21.7k]
  ------------------
  216|      0|      buffer_size += MaxVarintSize();
  217|      0|      break;
  218|      0|    case WireType::k64Bit:
  ------------------
  |  Branch (218:5): [True: 0, False: 21.7k]
  ------------------
  219|      0|      buffer_size += size_t{8};
  220|      0|      break;
  221|  21.7k|    case WireType::kLengthDelimited:
  ------------------
  |  Branch (221:5): [True: 21.7k, False: 0]
  ------------------
  222|  21.7k|      buffer_size += MaxVarintSize();
  223|  21.7k|      break;
  224|      0|    case WireType::k32Bit:
  ------------------
  |  Branch (224:5): [True: 0, False: 21.7k]
  ------------------
  225|      0|      buffer_size += size_t{4};
  226|      0|      break;
  227|  21.7k|  }
  228|  21.7k|  return buffer_size;
  229|  21.7k|}

_ZNKO4absl12lts_2026081712log_internal7VoidifyaaIRNS1_10LogMessageEEEvOT_:
   39|  5.60k|  ABSL_ATTRIBUTE_COLD void operator&&(T&& message) const&& {
   40|       |    // The dispatching of the completed `absl::LogEntry` to applicable
   41|       |    // `absl::LogSink`s happens here.
   42|  5.60k|    message.Flush();
   43|  5.60k|  }

_ZNK4absl12lts_202608178LogEntry15source_filenameEv:
   76|  5.60k|  absl::string_view source_filename() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
   77|  5.60k|    return full_filename_;
   78|  5.60k|  }
_ZNK4absl12lts_202608178LogEntry15source_basenameEv:
   79|  5.60k|  absl::string_view source_basename() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
   80|  5.60k|    return base_filename_;
   81|  5.60k|  }
_ZNK4absl12lts_202608178LogEntry11source_lineEv:
   82|  11.2k|  int source_line() const { return line_; }
_ZNK4absl12lts_202608178LogEntry6prefixEv:
   89|  5.60k|  bool prefix() const { return prefix_; }
_ZNK4absl12lts_202608178LogEntry12log_severityEv:
   95|  44.8k|  absl::LogSeverity log_severity() const { return severity_; }
_ZNK4absl12lts_202608178LogEntry9verbosityEv:
  102|  5.60k|  int verbosity() const { return verbose_level_; }
_ZNK4absl12lts_202608178LogEntry9timestampEv:
  113|  11.2k|  absl::Time timestamp() const { return timestamp_; }
_ZNK4absl12lts_202608178LogEntry3tidEv:
  122|  11.2k|  tid_t tid() const { return tid_; }
_ZNK4absl12lts_202608178LogEntry36text_message_with_prefix_and_newlineEv:
  147|  5.60k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  148|  5.60k|    return absl::string_view(
  149|  5.60k|        text_message_with_prefix_and_newline_and_nul_.data(),
  150|  5.60k|        text_message_with_prefix_and_newline_and_nul_.size() - 1);
  151|  5.60k|  }
_ZNK4absl12lts_202608178LogEntry10stacktraceEv:
  195|  5.60k|  absl::string_view stacktrace() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  196|  5.60k|    return stacktrace_;
  197|  5.60k|  }
_ZN4absl12lts_202608178LogEntryC2Ev:
  200|  5.60k|  LogEntry() = default;

_ZN4absl12lts_202608177LogSinkC2Ev:
   58|      1|  LogSink() = default;

_ZN4absl12lts_2026081715memory_internal9CopyRangeINSt3__19allocatorINS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEPS8_PKNS3_12basic_stringIcS7_NS4_IcEEEEEEvRT_T0_T1_SJ_:
  315|  5.30k|               InputIterator last) {
  316|  36.0M|  for (Iterator cur = destination; first != last;
  ------------------
  |  Branch (316:36): [True: 36.0M, False: 5.30k]
  ------------------
  317|  36.0M|       static_cast<void>(++cur), static_cast<void>(++first)) {
  318|  36.0M|    ABSL_INTERNAL_TRY {
  ------------------
  |  |  192|  36.0M|#define ABSL_INTERNAL_TRY try
  ------------------
  319|  36.0M|      std::allocator_traits<Allocator>::construct(alloc, std::addressof(*cur),
  320|  36.0M|                                                  *first);
  321|  36.0M|    }
  322|  36.0M|    ABSL_INTERNAL_CATCH_ANY {
  323|      0|      while (cur != destination) {
  ------------------
  |  Branch (323:14): [True: 0, False: 0]
  ------------------
  324|      0|        --cur;
  325|      0|        std::allocator_traits<Allocator>::destroy(alloc, std::addressof(*cur));
  326|      0|      }
  327|      0|      ABSL_INTERNAL_RETHROW;
  ------------------
  |  |  194|      0|#define ABSL_INTERNAL_RETHROW do { throw; } while (false)
  |  |  ------------------
  |  |  |  Branch (194:52): [Folded, False: 0]
  |  |  ------------------
  ------------------
  328|      0|    }
  329|  36.0M|  }
  330|  5.30k|}

_ZN4absl12lts_202608177uint128mLES1_:
  646|   623M|inline uint128& uint128::operator*=(uint128 other) {
  647|   623M|  *this = *this * other;
  648|   623M|  return *this;
  649|   623M|}
_ZN4absl12lts_2026081712Uint128Low64ENS0_7uint128E:
  661|   623M|constexpr uint64_t Uint128Low64(uint128 v) { return v.lo_; }
_ZN4absl12lts_2026081713Uint128High64ENS0_7uint128E:
  663|   623M|constexpr uint64_t Uint128High64(uint128 v) { return v.hi_; }
_ZNK4absl12lts_202608177uint128cvoEv:
  794|  1.24G|constexpr uint128::operator unsigned __int128() const {
  795|  1.24G|  return (static_cast<unsigned __int128>(hi_) << 64) + lo_;
  796|  1.24G|}
_ZN4absl12lts_20260817eoENS0_7uint128ES1_:
  933|   226k|constexpr inline uint128 operator^(uint128 lhs, uint128 rhs) {
  934|   226k|#if defined(ABSL_HAVE_INTRINSIC_INT128)
  935|   226k|  return static_cast<unsigned __int128>(lhs) ^
  936|   226k|         static_cast<unsigned __int128>(rhs);
  937|       |#else
  938|       |  return MakeUint128(Uint128High64(lhs) ^ Uint128High64(rhs),
  939|       |                     Uint128Low64(lhs) ^ Uint128Low64(rhs));
  940|       |#endif
  941|   226k|}
_ZN4absl12lts_202608177uint128eOES1_:
  953|   226k|inline uint128& uint128::operator^=(uint128 other) {
  954|   226k|  *this = *this ^ other;
  955|   226k|  return *this;
  956|   226k|}
_ZN4absl12lts_20260817mlENS0_7uint128ES1_:
 1059|   623M|constexpr uint128 operator*(uint128 lhs, uint128 rhs) {
 1060|       |  // TODO(strel) Remove once alignment issues are resolved and unsigned __int128
 1061|       |  // can be used for uint128 storage.
 1062|   623M|  return static_cast<unsigned __int128>(lhs) *
 1063|   623M|         static_cast<unsigned __int128>(rhs);
 1064|   623M|}
_ZN4absl12lts_202608177uint128C2Em:
  683|  1.24G|constexpr uint128::uint128(unsigned long v) : lo_{v}, hi_{0} {}
_ZN4absl12lts_202608177uint128C2Eo:
  692|   623M|    : lo_{static_cast<uint64_t>(v & ~uint64_t{0})},
  693|   623M|      hi_{static_cast<uint64_t>(v >> 64)} {}

_ZN4absl12lts_2026081722bernoulli_distribution10param_typeC2Ed:
   45|  6.79M|    explicit param_type(double p = 0.5) : prob_(p) {
   46|       |      assert(p >= 0.0 && p <= 1.0);
   47|  6.79M|    }
_ZNK4absl12lts_2026081722bernoulli_distribution10param_type1pEv:
   49|  6.79M|    double p() const { return prob_; }
_ZN4absl12lts_2026081722bernoulli_distributionC2Ed:
   64|  6.79M|  explicit bernoulli_distribution(double p) : param_(p) {}
_ZN4absl12lts_2026081722bernoulli_distributionclINS0_6BitGenEEEbRT_:
   72|  6.79M|  bool operator()(URBG& g) {  // NOLINT(runtime/references)
   73|  6.79M|    return Generate(param_.p(), g);
   74|  6.79M|  }
_ZN4absl12lts_2026081722bernoulli_distribution8GenerateINS0_6BitGenEEEbdRT_:
  133|  6.79M|                                      URBG& g) {  // NOLINT(runtime/references)
  134|  6.79M|  random_internal::FastUniformBits<uint32_t> fast_u32;
  135|       |
  136|  6.79M|  while (true) {
  ------------------
  |  Branch (136:10): [True: 6.79M, Folded]
  ------------------
  137|       |    // There are two aspects of the definition of `c` below that are worth
  138|       |    // commenting on.  First, because `p` is in the range [0, 1], `c` is in the
  139|       |    // range [0, 2^32] which does not fit in a uint32_t and therefore requires
  140|       |    // 64 bits.
  141|       |    //
  142|       |    // Second, `c` is constructed by first casting explicitly to a signed
  143|       |    // integer and then casting explicitly to an unsigned integer of the same
  144|       |    // size.  This is done because the hardware conversion instructions produce
  145|       |    // signed integers from double; if taken as a uint64_t the conversion would
  146|       |    // be wrong for doubles greater than 2^63 (not relevant in this use-case).
  147|       |    // If converted directly to an unsigned integer, the compiler would end up
  148|       |    // emitting code to handle such large values that are not relevant due to
  149|       |    // the known bounds on `c`.  To avoid these extra instructions this
  150|       |    // implementation converts first to the signed type and then convert to
  151|       |    // unsigned (which is a no-op).
  152|  6.79M|    const uint64_t c = static_cast<uint64_t>(static_cast<int64_t>(p * kP32));
  153|  6.79M|    const uint32_t v = fast_u32(g);
  154|       |    // FAST PATH: this path fails with probability 1/2^32.  Note that simply
  155|       |    // returning v <= c would approximate P very well (up to an absolute error
  156|       |    // of 1/2^32); the slow path (taken in that range of possible error, in the
  157|       |    // case of equality) eliminates the remaining error.
  158|  6.79M|    if (ABSL_PREDICT_TRUE(v != c)) return v < c;
  ------------------
  |  |  191|  6.79M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 6.79M, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 6.79M]
  |  |  |  Branch (191:57): [True: 6.79M, False: 0]
  |  |  ------------------
  ------------------
  159|       |
  160|       |    // It is guaranteed that `q` is strictly less than 1, because if `q` were
  161|       |    // greater than or equal to 1, the same would be true for `p`. Certainly `p`
  162|       |    // cannot be greater than 1, and if `p == 1`, then the fast path would
  163|       |    // necessary have been taken already.
  164|      0|    const double q = static_cast<double>(c) / kP32;
  165|       |
  166|       |    // The probability of acceptance on the fast path is `q` and so the
  167|       |    // probability of acceptance here should be `p - q`.
  168|       |    //
  169|       |    // Note that `q` is obtained from `p` via some shifts and conversions, the
  170|       |    // upshot of which is that `q` is simply `p` with some of the
  171|       |    // least-significant bits of its mantissa set to zero. This means that the
  172|       |    // difference `p - q` will not have any rounding errors. To see why, pretend
  173|       |    // that double has 10 bits of resolution and q is obtained from `p` in such
  174|       |    // a way that the 4 least-significant bits of its mantissa are set to zero.
  175|       |    // For example:
  176|       |    //   p   = 1.1100111011 * 2^-1
  177|       |    //   q   = 1.1100110000 * 2^-1
  178|       |    // p - q = 1.011        * 2^-8
  179|       |    // The difference `p - q` has exactly the nonzero mantissa bits that were
  180|       |    // "lost" in `q` producing a number which is certainly representable in a
  181|       |    // double.
  182|      0|    const double left = p - q;
  183|       |
  184|       |    // By construction, the probability of being on this slow path is 1/2^32, so
  185|       |    // P(accept in slow path) = P(accept| in slow path) * P(slow path),
  186|       |    // which means the probability of acceptance here is `1 / (left * kP32)`:
  187|      0|    const double here = left * kP32;
  188|       |
  189|       |    // The simplest way to compute the result of this trial is to repeat the
  190|       |    // whole algorithm with the new probability. This terminates because even
  191|       |    // given  arbitrarily unfriendly "random" bits, each iteration either
  192|       |    // multiplies a tiny probability by 2^32 (if c == 0) or strips off some
  193|       |    // number of nonzero mantissa bits. That process is bounded.
  194|      0|    if (here == 0) return false;
  ------------------
  |  Branch (194:9): [True: 0, False: 0]
  ------------------
  195|      0|    p = here;
  196|      0|  }
  197|  6.79M|}

_ZN4absl12lts_202608179BernoulliIRNS0_6BitGenEEEbOT_d:
  240|  6.79M|               double p) {
  241|  6.79M|  using gen_t = std::decay_t<URBG>;
  242|  6.79M|  using distribution_t = absl::bernoulli_distribution;
  243|       |
  244|  6.79M|  return random_internal::DistributionCaller<gen_t>::template Call<
  245|  6.79M|      distribution_t>(&urbg, p);
  246|  6.79M|}

_ZN4absl12lts_2026081715random_internal18DistributionCallerINS0_6BitGenEE4CallINS0_22bernoulli_distributionEJRdEEENT_11result_typeEPS3_DpOT0_:
   73|  6.79M|  static typename DistrT::result_type Call(URBG* urbg, Args&&... args) {
   74|  6.79M|    return Impl<DistrT, Args...>(RandomMockingAccess::HasInvokeMock<URBG>{},
   75|  6.79M|                                 urbg, std::forward<Args>(args)...);
   76|  6.79M|  }
_ZN4absl12lts_2026081715random_internal18DistributionCallerINS0_6BitGenEE4ImplINS0_22bernoulli_distributionEJRdEEENT_11result_typeENSt3__117integral_constantIbLb0EEEPS3_DpOT0_:
   47|  6.79M|                                           Args&&... args) {
   48|  6.79M|    DistrT dist(std::forward<Args>(args)...);
   49|  6.79M|    return dist(*urbg);
   50|  6.79M|  }

_ZN4absl12lts_2026081715random_internal24GetEntropyFromRandenPoolEPvm:
  179|      1|void GetEntropyFromRandenPool(void* dest, size_t bytes) {
  180|      1|  auto* pool = GetPoolForCurrentThread();
  181|      1|  pool->Fill(reinterpret_cast<uint8_t*>(dest), bytes);
  182|      1|}
entropy_pool.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_123GetPoolForCurrentThreadEv:
  172|      1|RandenPoolEntry* GetPoolForCurrentThread() {
  173|      1|  absl::call_once(pool_once, InitPoolURBG);
  174|      1|  return shared_pools[GetPoolID()];
  175|      1|}
entropy_pool.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_112InitPoolURBGEv:
  156|      1|void InitPoolURBG() {
  157|      1|  static constexpr size_t kSeedSize =
  158|      1|      RandenTraits::kStateBytes / sizeof(uint32_t);
  159|       |  // Read OS entropy once, and use it to initialize each pool entry.
  160|      1|  uint32_t seed_material[kPoolSize * kSeedSize];
  161|      1|  if (!ReadSeedMaterialFromOSEntropy(absl::MakeSpan(seed_material))) {
  ------------------
  |  Branch (161:7): [True: 0, False: 1]
  ------------------
  162|      0|    ThrowSeedGenException();
  163|      0|  }
  164|      9|  for (size_t i = 0; i < kPoolSize; i++) {
  ------------------
  |  Branch (164:22): [True: 8, False: 1]
  ------------------
  165|      8|    shared_pools[i] = new RandenPoolEntry();
  166|      8|    shared_pools[i]->Init(
  167|      8|        absl::MakeSpan(&seed_material[i * kSeedSize], kSeedSize));
  168|      8|  }
  169|      1|}
entropy_pool.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_115RandenPoolEntry4InitENS0_4SpanIKjEE:
   58|      8|  void Init(absl::Span<const uint32_t> data) {
   59|      8|    SpinLockHolder l(mu_);  // Always uncontested.
   60|      8|    absl::c_copy(data, std::begin(state_));
   61|      8|    next_ = kState;
   62|      8|  }
entropy_pool.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_19GetPoolIDEv:
  117|      1|size_t GetPoolID() {
  118|      1|  static_assert(kPoolSize >= 1,
  119|      1|                "At least one urbg instance is required for PoolURBG");
  120|       |
  121|      1|  ABSL_CONST_INIT static std::atomic<uint64_t> sequence{0};
  ------------------
  |  |  847|      1|#define ABSL_CONST_INIT constinit
  ------------------
  122|       |
  123|      1|#ifdef ABSL_HAVE_THREAD_LOCAL
  124|      1|  static thread_local size_t my_pool_id = kPoolSize;
  125|      1|  if (ABSL_PREDICT_FALSE(my_pool_id == kPoolSize)) {
  ------------------
  |  |  190|      1|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 1]
  |  |  |  Branch (190:58): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  126|      1|    my_pool_id = (sequence++ % kPoolSize);
  127|      1|  }
  128|      1|  return my_pool_id;
  129|       |#else
  130|       |  static pthread_key_t tid_key = [] {
  131|       |    pthread_key_t tmp_key;
  132|       |    int err = pthread_key_create(&tmp_key, nullptr);
  133|       |    if (err) {
  134|       |      ABSL_RAW_LOG(FATAL, "pthread_key_create failed with %d", err);
  135|       |    }
  136|       |    return tmp_key;
  137|       |  }();
  138|       |
  139|       |  // Store the value in the pthread_{get/set}specific. However an uninitialized
  140|       |  // value is 0, so add +1 to distinguish from the null value.
  141|       |  uintptr_t my_pool_id =
  142|       |      reinterpret_cast<uintptr_t>(pthread_getspecific(tid_key));
  143|       |  if (ABSL_PREDICT_FALSE(my_pool_id == 0)) {
  144|       |    // No allocated ID, allocate the next value, cache it, and return.
  145|       |    my_pool_id = (sequence++ % kPoolSize) + 1;
  146|       |    int err = pthread_setspecific(tid_key, reinterpret_cast<void*>(my_pool_id));
  147|       |    if (err) {
  148|       |      ABSL_RAW_LOG(FATAL, "pthread_setspecific failed with %d", err);
  149|       |    }
  150|       |  }
  151|       |  return my_pool_id - 1;
  152|       |#endif
  153|      1|}
entropy_pool.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_115RandenPoolEntry4FillEPhm:
   87|      1|void RandenPoolEntry::Fill(uint8_t* out, size_t bytes) {
   88|      1|  SpinLockHolder l(mu_);
   89|      2|  while (bytes > 0) {
  ------------------
  |  Branch (89:10): [True: 1, False: 1]
  ------------------
   90|      1|    MaybeRefill();
   91|      1|    size_t remaining = available() * sizeof(state_[0]);
   92|      1|    size_t to_copy = std::min(bytes, remaining);
   93|      1|    std::memcpy(out, &state_[next_], to_copy);
   94|      1|    out += to_copy;
   95|      1|    bytes -= to_copy;
   96|      1|    next_ += (to_copy + sizeof(state_[0]) - 1) / sizeof(state_[0]);
   97|      1|  }
   98|      1|}
entropy_pool.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_115RandenPoolEntry11MaybeRefillEv:
   67|      1|  void MaybeRefill() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
   68|      1|    if (next_ >= kState) {
  ------------------
  |  Branch (68:9): [True: 1, False: 0]
  ------------------
   69|      1|      next_ = kCapacity;
   70|      1|      impl_.Generate(state_);
   71|      1|    }
   72|      1|  }
entropy_pool.cc:_ZNK4absl12lts_2026081715random_internal12_GLOBAL__N_115RandenPoolEntry9availableEv:
   74|      1|  size_t available() const ABSL_SHARED_LOCKS_REQUIRED(mu_) {
   75|      1|    return kState - next_;
   76|      1|  }

_ZN4absl12lts_2026081715random_internal15FastUniformBitsIjEclINS0_6BitGenEEEjRT_:
  122|  6.79M|FastUniformBits<UIntType>::operator()(URBG& g) {  // NOLINT(runtime/references)
  123|       |  // kRangeMask is the mask used when sampling variates from the URBG when the
  124|       |  // width of the URBG range is not a power of 2.
  125|       |  // Y = (2 ^ kRange) - 1
  126|  6.79M|  static_assert((URBG::max)() > (URBG::min)(),
  127|  6.79M|                "URBG::max and URBG::min may not be equal.");
  128|       |
  129|  6.79M|  using tag = std::conditional_t<IsPowerOfTwoOrZero(RangeSize<URBG>()),
  130|  6.79M|                                  SimplifiedLoopTag, RejectionLoopTag>;
  131|  6.79M|  return Generate(g, tag{});
  132|  6.79M|}
_ZN4absl12lts_2026081715random_internal15FastUniformBitsIjE8GenerateINS0_6BitGenEEEjRT_NS1_17SimplifiedLoopTagE:
  138|  6.79M|                                    SimplifiedLoopTag) {
  139|       |  // The simplified version of FastUniformBits works only on URBGs that have
  140|       |  // a range that is a power of 2. In this case we simply loop and shift without
  141|       |  // attempting to balance the bits across calls.
  142|  6.79M|  static_assert(IsPowerOfTwoOrZero(RangeSize<URBG>()),
  143|  6.79M|                "incorrect Generate tag for URBG instance");
  144|       |
  145|  6.79M|  static constexpr size_t kResultBits =
  146|  6.79M|      std::numeric_limits<result_type>::digits;
  147|  6.79M|  static constexpr size_t kUrbgBits = NumBits<URBG>();
  148|  6.79M|  static constexpr size_t kIters =
  149|  6.79M|      (kResultBits / kUrbgBits) + (kResultBits % kUrbgBits != 0);
  150|  6.79M|  static constexpr size_t kShift = (kIters == 1) ? 0 : kUrbgBits;
  ------------------
  |  Branch (150:36): [True: 0, Folded]
  ------------------
  151|  6.79M|  static constexpr auto kMin = (URBG::min)();
  152|       |
  153|  6.79M|  result_type r = static_cast<result_type>(g() - kMin);
  154|  6.79M|  for (size_t n = 1; n < kIters; ++n) {
  ------------------
  |  Branch (154:22): [True: 0, False: 6.79M]
  ------------------
  155|      0|    r = static_cast<result_type>(r << kShift) +
  156|      0|        static_cast<result_type>(g() - kMin);
  157|      0|  }
  158|  6.79M|  return r;
  159|  6.79M|}

_ZN4absl12lts_2026081715random_internal17NonsecureURBGBaseINS1_13randen_engineImEENS1_17RandenPoolSeedSeqEEclEv:
  125|  6.79M|  result_type operator()() { return urbg_(); }
_ZN4absl12lts_2026081715random_internal17RandenPoolSeedSeq4sizeEv:
   66|      1|  size_t size() { return 0; }
_ZN4absl12lts_2026081715random_internal17NonsecureURBGBaseINS1_13randen_engineImEENS1_17RandenPoolSeedSeqEEC2Ev:
  100|      1|  NonsecureURBGBase() : urbg_(ConstructURBG()) {}
_ZN4absl12lts_2026081715random_internal17NonsecureURBGBaseINS1_13randen_engineImEENS1_17RandenPoolSeedSeqEE13ConstructURBGEv:
  141|      1|  static URBG ConstructURBG() {
  142|      1|    Seeder seeder;
  143|      1|    return URBG(seeder);
  144|      1|  }
_ZN4absl12lts_2026081715random_internal17RandenPoolSeedSeq8generateIPjEEvT_S5_:
   72|      1|  void generate(RandomAccessIterator begin, RandomAccessIterator end) {
   73|       |    // RandomAccessIterator must be assignable from uint32_t
   74|      1|    if (begin != end) {
  ------------------
  |  Branch (74:9): [True: 1, False: 0]
  ------------------
   75|      1|      using U = typename std::iterator_traits<RandomAccessIterator>::value_type;
   76|       |      // ContiguousTag indicates the common case of a known contiguous buffer,
   77|       |      // which allows directly filling the buffer. In C++20,
   78|       |      // std::contiguous_iterator_tag provides a mechanism for testing this
   79|       |      // capability, however until Abseil's support requirements allow us to
   80|       |      // assume C++20, limit checks to a few common cases.
   81|      1|      using TagType = std::conditional_t<
   82|      1|          (std::is_pointer_v<RandomAccessIterator> ||
   83|      1|           std::is_same_v<RandomAccessIterator,
   84|      1|                          typename std::vector<U>::iterator>),
   85|      1|          ContiguousTag, BufferTag>;
   86|       |
   87|      1|      generate_impl(TagType{}, begin, end);
   88|      1|    }
   89|      1|  }
_ZN4absl12lts_2026081715random_internal17RandenPoolSeedSeq13generate_implIPjEEvNS2_13ContiguousTagET_S6_:
   46|      1|  void generate_impl(ContiguousTag, Contiguous begin, Contiguous end) {
   47|      1|    const size_t n = static_cast<size_t>(std::distance(begin, end));
   48|      1|    auto* a = &(*begin);
   49|      1|    GetEntropyFromRandenPool(a, sizeof(*a) * n);
   50|      1|  }

_ZN4absl12lts_2026081715random_internal6RandenC2Ev:
   84|      9|Randen::Randen() {
   85|      9|  auto tmp = GetRandenState();
   86|      9|  keys_ = tmp.keys;
   87|      9|#if ABSL_RANDOM_INTERNAL_AES_DISPATCH
   88|      9|  has_crypto_ = tmp.has_crypto;
   89|      9|#endif
   90|      9|}
randen.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_114GetRandenStateEv:
   56|      9|RandenState GetRandenState() {
   57|      9|  static const RandenState state = []() {
   58|      9|    RandenState tmp;
   59|      9|#if ABSL_RANDOM_INTERNAL_AES_DISPATCH
   60|       |    // HW AES Dispatch.
   61|      9|    if (HasRandenHwAesImplementation() && CPUSupportsRandenHwAes()) {
   62|      9|      tmp.has_crypto = true;
   63|      9|      tmp.keys = RandenHwAes::GetKeys();
   64|      9|    } else {
   65|      9|      tmp.has_crypto = false;
   66|      9|      tmp.keys = RandenSlow::GetKeys();
   67|      9|    }
   68|       |#elif ABSL_HAVE_ACCELERATED_AES
   69|       |    // HW AES is enabled.
   70|       |    tmp.has_crypto = true;
   71|       |    tmp.keys = RandenHwAes::GetKeys();
   72|       |#else
   73|       |    // HW AES is disabled.
   74|       |    tmp.has_crypto = false;
   75|       |    tmp.keys = RandenSlow::GetKeys();
   76|       |#endif
   77|      9|    return tmp;
   78|      9|  }();
   79|      9|  return state;
   80|      9|}
randen.cc:_ZZN4absl12lts_2026081715random_internal12_GLOBAL__N_114GetRandenStateEvENK3$_0clEv:
   57|      1|  static const RandenState state = []() {
   58|      1|    RandenState tmp;
   59|      1|#if ABSL_RANDOM_INTERNAL_AES_DISPATCH
   60|       |    // HW AES Dispatch.
   61|      1|    if (HasRandenHwAesImplementation() && CPUSupportsRandenHwAes()) {
  ------------------
  |  Branch (61:9): [True: 0, False: 1]
  |  Branch (61:43): [True: 0, False: 0]
  ------------------
   62|      0|      tmp.has_crypto = true;
   63|      0|      tmp.keys = RandenHwAes::GetKeys();
   64|      1|    } else {
   65|      1|      tmp.has_crypto = false;
   66|      1|      tmp.keys = RandenSlow::GetKeys();
   67|      1|    }
   68|       |#elif ABSL_HAVE_ACCELERATED_AES
   69|       |    // HW AES is enabled.
   70|       |    tmp.has_crypto = true;
   71|       |    tmp.keys = RandenHwAes::GetKeys();
   72|       |#else
   73|       |    // HW AES is disabled.
   74|       |    tmp.has_crypto = false;
   75|       |    tmp.keys = RandenSlow::GetKeys();
   76|       |#endif
   77|      1|    return tmp;
   78|      1|  }();

_ZNK4absl12lts_2026081715random_internal6Randen8GenerateEPv:
   47|   226k|  void Generate(void* state) const {
   48|   226k|#if ABSL_RANDOM_INTERNAL_AES_DISPATCH
   49|       |    // HW AES Dispatch.
   50|   226k|    if (has_crypto_) {
  ------------------
  |  Branch (50:9): [True: 0, False: 226k]
  ------------------
   51|      0|      RandenHwAes::Generate(keys_, state);
   52|   226k|    } else {
   53|   226k|      RandenSlow::Generate(keys_, state);
   54|   226k|    }
   55|       |#elif ABSL_HAVE_ACCELERATED_AES
   56|       |    // HW AES is enabled.
   57|       |    RandenHwAes::Generate(keys_, state);
   58|       |#else
   59|       |    // HW AES is disabled.
   60|       |    RandenSlow::Generate(keys_, state);
   61|       |#endif
   62|   226k|  }
_ZNK4absl12lts_2026081715random_internal6Randen6AbsorbEPKvPv:
   68|      1|  void Absorb(const void* seed, void* state) const {
   69|      1|#if ABSL_RANDOM_INTERNAL_AES_DISPATCH
   70|       |    // HW AES Dispatch.
   71|      1|    if (has_crypto_) {
  ------------------
  |  Branch (71:9): [True: 0, False: 1]
  ------------------
   72|      0|      RandenHwAes::Absorb(seed, state);
   73|      1|    } else {
   74|      1|      RandenSlow::Absorb(seed, state);
   75|      1|    }
   76|       |#elif ABSL_HAVE_ACCELERATED_AES
   77|       |    // HW AES is enabled.
   78|       |    RandenHwAes::Absorb(seed, state);
   79|       |#else
   80|       |    // HW AES is disabled.
   81|       |    RandenSlow::Absorb(seed, state);
   82|       |#endif
   83|      1|  }

_ZN4absl12lts_2026081715random_internal13randen_engineImEclEv:
   85|  6.79M|  result_type operator()() {
   86|       |    // Refill the buffer if needed (unlikely).
   87|  6.79M|    auto* begin = state();
   88|  6.79M|    if (next_ >= kStateSizeT) {
  ------------------
  |  Branch (88:9): [True: 226k, False: 6.56M]
  ------------------
   89|   226k|      next_ = kCapacityT;
   90|   226k|      impl_.Generate(begin);
   91|   226k|    }
   92|  6.79M|    return little_endian::ToHost(begin[next_++]);
   93|  6.79M|  }
_ZN4absl12lts_2026081715random_internal13randen_engineImE5stateEv:
  244|  6.79M|  result_type* state() {
  245|  6.79M|    return reinterpret_cast<result_type*>(
  246|  6.79M|        (reinterpret_cast<uintptr_t>(&raw_state_) & 0xf) ? (raw_state_ + 8)
  ------------------
  |  Branch (246:9): [True: 0, False: 6.79M]
  ------------------
  247|  6.79M|                                                         : raw_state_);
  248|  6.79M|  }
_ZN4absl12lts_2026081715random_internal13randen_engineImEC2IRNS1_17RandenPoolSeedSeqEvEEOT_:
   68|      1|  explicit randen_engine(SeedSequence&& seq) {
   69|      1|    seed(seq);
   70|      1|  }
_ZN4absl12lts_2026081715random_internal13randen_engineImE4seedIRNS1_17RandenPoolSeedSeqEEENSt3__19enable_ifIXntsr3stdE16is_convertible_vIT_mEEvE4typeEOS9_:
   97|      1|  seed(SeedSequence&& seq) {
   98|       |    // Zeroes the state.
   99|      1|    seed();
  100|      1|    reseed(seq);
  101|      1|  }
_ZN4absl12lts_2026081715random_internal13randen_engineImE4seedEm:
  103|      1|  void seed(result_type seed_value = 0) {
  104|      1|    next_ = kStateSizeT;
  105|       |    // Zeroes the inner state and fills the outer state with seed_value to
  106|       |    // mimic the behaviour of reseed
  107|      1|    auto* begin = state();
  108|      1|    std::fill(begin, begin + kCapacityT, 0);
  109|      1|    std::fill(begin + kCapacityT, begin + kStateSizeT, seed_value);
  110|      1|  }
_ZN4absl12lts_2026081715random_internal13randen_engineImE6reseedINS1_17RandenPoolSeedSeqEEEvRT_:
  116|      1|  void reseed(SeedSequence& seq) {
  117|      1|    using sequence_result_type = typename SeedSequence::result_type;
  118|      1|    static_assert(sizeof(sequence_result_type) == 4,
  119|      1|                  "SeedSequence::result_type must be 32-bit");
  120|      1|    constexpr size_t kBufferSize =
  121|      1|        Randen::kSeedBytes / sizeof(sequence_result_type);
  122|      1|    alignas(16) sequence_result_type buffer[kBufferSize];
  123|       |
  124|       |    // Randen::Absorb XORs the seed into state, which is then mixed by a call
  125|       |    // to Randen::Generate. Seeding with only the provided entropy is preferred
  126|       |    // to using an arbitrary generate() call, so use [rand.req.seed_seq]
  127|       |    // size as a proxy for the number of entropy units that can be generated
  128|       |    // without relying on seed sequence mixing...
  129|      1|    const size_t entropy_size = seq.size();
  130|      1|    if (entropy_size < kBufferSize) {
  ------------------
  |  Branch (130:9): [True: 1, False: 0]
  ------------------
  131|       |      // ... and only request that many values, or 256-bits, when unspecified.
  132|      1|      const size_t requested_entropy = (entropy_size == 0) ? 8u : entropy_size;
  ------------------
  |  Branch (132:40): [True: 1, False: 0]
  ------------------
  133|      1|      std::fill(buffer + requested_entropy, buffer + kBufferSize, 0);
  134|      1|      seq.generate(buffer, buffer + requested_entropy);
  135|       |#ifdef ABSL_IS_BIG_ENDIAN
  136|       |      // Randen expects the seed buffer to be in Little Endian; reverse it on
  137|       |      // Big Endian platforms.
  138|       |      for (sequence_result_type& e : buffer) {
  139|       |        e = absl::little_endian::FromHost(e);
  140|       |      }
  141|       |#endif
  142|       |      // The Randen paper suggests preferentially initializing even-numbered
  143|       |      // 128-bit vectors of the randen state (there are 16 such vectors).
  144|       |      // The seed data is merged into the state offset by 128-bits, which
  145|       |      // implies preferring seed bytes [16..31, ..., 208..223]. Since the
  146|       |      // buffer is 32-bit values, we swap the corresponding buffer positions in
  147|       |      // 128-bit chunks.
  148|      1|      size_t dst = kBufferSize;
  149|      8|      while (dst > 7) {
  ------------------
  |  Branch (149:14): [True: 7, False: 1]
  ------------------
  150|       |        // leave the odd bucket as-is.
  151|      7|        dst -= 4;
  152|      7|        size_t src = dst >> 1;
  153|       |        // swap 128-bits into the even bucket
  154|      7|        std::swap(buffer[--dst], buffer[--src]);
  155|      7|        std::swap(buffer[--dst], buffer[--src]);
  156|      7|        std::swap(buffer[--dst], buffer[--src]);
  157|      7|        std::swap(buffer[--dst], buffer[--src]);
  158|      7|      }
  159|      1|    } else {
  160|      0|      seq.generate(buffer, buffer + kBufferSize);
  161|      0|    }
  162|      1|    impl_.Absorb(buffer, state());
  163|       |
  164|       |    // Generate will be called when operator() is called
  165|      1|    next_ = kStateSizeT;
  166|      1|  }

_ZN4absl12lts_2026081715random_internal28HasRandenHwAesImplementationEv:
   53|      1|bool HasRandenHwAesImplementation() { return false; }

_ZN4absl12lts_2026081715random_internal10RandenSlow7GetKeysEv:
  422|      1|const void* RandenSlow::GetKeys() {
  423|       |  // Round keys for one AES per Feistel round and branch.
  424|       |  // The canonical implementation uses first digits of Pi.
  425|      1|#ifdef ABSL_IS_LITTLE_ENDIAN
  426|      1|  return kRandenRoundKeys;
  427|       |#else
  428|       |  return kRandenRoundKeysBE;
  429|       |#endif
  430|      1|}
_ZN4absl12lts_2026081715random_internal10RandenSlow6AbsorbEPKvPv:
  432|      1|void RandenSlow::Absorb(const void* seed_void, void* state_void) {
  433|      1|  auto* state =
  434|      1|      reinterpret_cast<uint64_t * ABSL_RANDOM_INTERNAL_RESTRICT>(state_void);
  435|      1|  const auto* seed =
  436|      1|      reinterpret_cast<const uint64_t * ABSL_RANDOM_INTERNAL_RESTRICT>(
  437|      1|          seed_void);
  438|       |
  439|      1|  constexpr size_t kCapacityBlocks =
  440|      1|      RandenTraits::kCapacityBytes / sizeof(uint64_t);
  441|      1|  static_assert(
  442|      1|      kCapacityBlocks * sizeof(uint64_t) == RandenTraits::kCapacityBytes,
  443|      1|      "Not i*V");
  444|       |
  445|      1|  for (size_t i = kCapacityBlocks;
  446|     31|       i < RandenTraits::kStateBytes / sizeof(uint64_t); ++i) {
  ------------------
  |  Branch (446:8): [True: 30, False: 1]
  ------------------
  447|     30|    state[i] ^= seed[i - kCapacityBlocks];
  448|     30|  }
  449|      1|}
_ZN4absl12lts_2026081715random_internal10RandenSlow8GenerateEPKvPv:
  451|   226k|void RandenSlow::Generate(const void* keys_void, void* state_void) {
  452|   226k|  static_assert(RandenTraits::kCapacityBytes == sizeof(absl::uint128),
  453|   226k|                "Capacity mismatch");
  454|       |
  455|   226k|  auto* state = reinterpret_cast<absl::uint128*>(state_void);
  456|   226k|  const auto* keys = reinterpret_cast<const absl::uint128*>(keys_void);
  457|       |
  458|   226k|  const absl::uint128 prev_inner = state[0];
  459|       |
  460|   226k|  SwapEndian(state);
  461|       |
  462|   226k|  Permute(state, keys);
  463|       |
  464|   226k|  SwapEndian(state);
  465|       |
  466|       |  // Ensure backtracking resistance.
  467|   226k|  *state ^= prev_inner;
  468|   226k|}
randen_slow.cc:_ZN12_GLOBAL__N_110SwapEndianEPN4absl12lts_202608177uint128E:
  401|   452k|    absl::uint128* state) {
  402|       |#ifdef ABSL_IS_BIG_ENDIAN
  403|       |  for (uint32_t block = 0; block < RandenTraits::kFeistelBlocks; ++block) {
  404|       |    uint64_t new_lo = absl::little_endian::ToHost64(
  405|       |        static_cast<uint64_t>(state[block] >> 64));
  406|       |    uint64_t new_hi = absl::little_endian::ToHost64(
  407|       |        static_cast<uint64_t>((state[block] << 64) >> 64));
  408|       |    state[block] = (static_cast<absl::uint128>(new_hi) << 64) | new_lo;
  409|       |  }
  410|       |#else
  411|       |  // Avoid warning about unused variable.
  412|   452k|  (void)state;
  413|   452k|#endif
  414|   452k|}
randen_slow.cc:_ZN12_GLOBAL__N_17PermuteEPN4absl12lts_202608177uint128EPKS2_:
  392|   226k|    const absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
  393|  4.07M|  for (size_t round = 0; round < RandenTraits::kFeistelRounds; ++round) {
  ------------------
  |  Branch (393:26): [True: 3.84M, False: 226k]
  ------------------
  394|  3.84M|    keys = FeistelRound(state, keys);
  395|  3.84M|    BlockShuffle(state);
  396|  3.84M|  }
  397|   226k|}
randen_slow.cc:_ZN12_GLOBAL__N_112FeistelRoundEPN4absl12lts_202608177uint128EPKS2_:
  366|  3.84M|             const absl::uint128* ABSL_RANDOM_INTERNAL_RESTRICT keys) {
  367|  19.2M|  for (size_t branch = 0; branch < RandenTraits::kFeistelBlocks; branch += 4) {
  ------------------
  |  Branch (367:27): [True: 15.3M, False: 3.84M]
  ------------------
  368|  15.3M|    const Vector128 s0 = Vector128Load(state + branch);
  369|  15.3M|    const Vector128 s1 = Vector128Load(state + branch + 1);
  370|  15.3M|    const Vector128 f0 = AesRound(s0, Vector128Load(keys));
  371|  15.3M|    keys++;
  372|  15.3M|    const Vector128 o1 = AesRound(f0, s1);
  373|  15.3M|    Vector128Store(o1, state + branch + 1);
  374|       |
  375|       |    // Manually unroll this loop once. about 10% better than not unrolled.
  376|  15.3M|    const Vector128 s2 = Vector128Load(state + branch + 2);
  377|  15.3M|    const Vector128 s3 = Vector128Load(state + branch + 3);
  378|  15.3M|    const Vector128 f2 = AesRound(s2, Vector128Load(keys));
  379|  15.3M|    keys++;
  380|  15.3M|    const Vector128 o3 = AesRound(f2, s3);
  381|  15.3M|    Vector128Store(o3, state + branch + 3);
  382|  15.3M|  }
  383|  3.84M|  return keys;
  384|  3.84M|}
randen_slow.cc:_ZN12_GLOBAL__N_113Vector128LoadEPKv:
  240|  92.3M|Vector128Load(const void* from) {
  241|  92.3M|  Vector128 result;
  242|  92.3M|  std::memcpy(result.s, from, sizeof(Vector128));
  243|  92.3M|  return result;
  244|  92.3M|}
randen_slow.cc:_ZN12_GLOBAL__N_18AesRoundERKNS_9Vector128ES2_:
  254|  61.5M|AesRound(const Vector128& state, const Vector128& round_key) {
  255|  61.5M|  Vector128 result;
  256|  61.5M|#ifdef ABSL_IS_LITTLE_ENDIAN
  257|  61.5M|  result.s[0] = round_key.s[0] ^                  //
  258|  61.5M|                te0[uint8_t(state.s[0])] ^        //
  259|  61.5M|                te1[uint8_t(state.s[1] >> 8)] ^   //
  260|  61.5M|                te2[uint8_t(state.s[2] >> 16)] ^  //
  261|  61.5M|                te3[uint8_t(state.s[3] >> 24)];
  262|  61.5M|  result.s[1] = round_key.s[1] ^                  //
  263|  61.5M|                te0[uint8_t(state.s[1])] ^        //
  264|  61.5M|                te1[uint8_t(state.s[2] >> 8)] ^   //
  265|  61.5M|                te2[uint8_t(state.s[3] >> 16)] ^  //
  266|  61.5M|                te3[uint8_t(state.s[0] >> 24)];
  267|  61.5M|  result.s[2] = round_key.s[2] ^                  //
  268|  61.5M|                te0[uint8_t(state.s[2])] ^        //
  269|  61.5M|                te1[uint8_t(state.s[3] >> 8)] ^   //
  270|  61.5M|                te2[uint8_t(state.s[0] >> 16)] ^  //
  271|  61.5M|                te3[uint8_t(state.s[1] >> 24)];
  272|  61.5M|  result.s[3] = round_key.s[3] ^                  //
  273|  61.5M|                te0[uint8_t(state.s[3])] ^        //
  274|  61.5M|                te1[uint8_t(state.s[0] >> 8)] ^   //
  275|  61.5M|                te2[uint8_t(state.s[1] >> 16)] ^  //
  276|  61.5M|                te3[uint8_t(state.s[2] >> 24)];
  277|       |#else
  278|       |  result.s[0] = round_key.s[0] ^                  //
  279|       |                te0[uint8_t(state.s[0])] ^        //
  280|       |                te1[uint8_t(state.s[3] >> 8)] ^   //
  281|       |                te2[uint8_t(state.s[2] >> 16)] ^  //
  282|       |                te3[uint8_t(state.s[1] >> 24)];
  283|       |  result.s[1] = round_key.s[1] ^                  //
  284|       |                te0[uint8_t(state.s[1])] ^        //
  285|       |                te1[uint8_t(state.s[0] >> 8)] ^   //
  286|       |                te2[uint8_t(state.s[3] >> 16)] ^  //
  287|       |                te3[uint8_t(state.s[2] >> 24)];
  288|       |  result.s[2] = round_key.s[2] ^                  //
  289|       |                te0[uint8_t(state.s[2])] ^        //
  290|       |                te1[uint8_t(state.s[1] >> 8)] ^   //
  291|       |                te2[uint8_t(state.s[0] >> 16)] ^  //
  292|       |                te3[uint8_t(state.s[3] >> 24)];
  293|       |  result.s[3] = round_key.s[3] ^                  //
  294|       |                te0[uint8_t(state.s[3])] ^        //
  295|       |                te1[uint8_t(state.s[2] >> 8)] ^   //
  296|       |                te2[uint8_t(state.s[1] >> 16)] ^  //
  297|       |                te3[uint8_t(state.s[0] >> 24)];
  298|       |#endif
  299|  61.5M|  return result;
  300|  61.5M|}
randen_slow.cc:_ZN12_GLOBAL__N_114Vector128StoreERKNS_9Vector128EPv:
  247|  30.7M|    const Vector128& v, void* to) {
  248|  30.7M|  std::memcpy(to, v.s, sizeof(Vector128));
  249|  30.7M|}
randen_slow.cc:_ZN12_GLOBAL__N_112BlockShuffleEPN4absl12lts_202608177uint128E:
  306|  3.84M|    absl::uint128* state) {
  307|  3.84M|  static_assert(RandenTraits::kFeistelBlocks == 16,
  308|  3.84M|                "Feistel block shuffle only works for 16 blocks.");
  309|       |
  310|  3.84M|  constexpr size_t shuffle[RandenTraits::kFeistelBlocks] = {
  311|  3.84M|      7, 2, 13, 4, 11, 8, 3, 6, 15, 0, 9, 10, 1, 14, 5, 12};
  312|       |
  313|       |  // The fully unrolled loop without the memcpy improves the speed by about
  314|       |  // 30% over the equivalent:
  315|       |#if 0
  316|       |  absl::uint128 source[RandenTraits::kFeistelBlocks];
  317|       |  std::memcpy(source, state, sizeof(source));
  318|       |  for (size_t i = 0; i < RandenTraits::kFeistelBlocks; i++) {
  319|       |    const absl::uint128 v0 = source[shuffle[i]];
  320|       |    state[i] = v0;
  321|       |  }
  322|       |  return;
  323|       |#endif
  324|       |
  325|  3.84M|  const absl::uint128 v0 = state[shuffle[0]];
  326|  3.84M|  const absl::uint128 v1 = state[shuffle[1]];
  327|  3.84M|  const absl::uint128 v2 = state[shuffle[2]];
  328|  3.84M|  const absl::uint128 v3 = state[shuffle[3]];
  329|  3.84M|  const absl::uint128 v4 = state[shuffle[4]];
  330|  3.84M|  const absl::uint128 v5 = state[shuffle[5]];
  331|  3.84M|  const absl::uint128 v6 = state[shuffle[6]];
  332|  3.84M|  const absl::uint128 v7 = state[shuffle[7]];
  333|  3.84M|  const absl::uint128 w0 = state[shuffle[8]];
  334|  3.84M|  const absl::uint128 w1 = state[shuffle[9]];
  335|  3.84M|  const absl::uint128 w2 = state[shuffle[10]];
  336|  3.84M|  const absl::uint128 w3 = state[shuffle[11]];
  337|  3.84M|  const absl::uint128 w4 = state[shuffle[12]];
  338|  3.84M|  const absl::uint128 w5 = state[shuffle[13]];
  339|  3.84M|  const absl::uint128 w6 = state[shuffle[14]];
  340|  3.84M|  const absl::uint128 w7 = state[shuffle[15]];
  341|  3.84M|  state[0] = v0;
  342|  3.84M|  state[1] = v1;
  343|  3.84M|  state[2] = v2;
  344|  3.84M|  state[3] = v3;
  345|  3.84M|  state[4] = v4;
  346|  3.84M|  state[5] = v5;
  347|  3.84M|  state[6] = v6;
  348|  3.84M|  state[7] = v7;
  349|  3.84M|  state[8] = w0;
  350|  3.84M|  state[9] = w1;
  351|  3.84M|  state[10] = w2;
  352|  3.84M|  state[11] = w3;
  353|  3.84M|  state[12] = w4;
  354|  3.84M|  state[13] = w5;
  355|  3.84M|  state[14] = w6;
  356|  3.84M|  state[15] = w7;
  357|  3.84M|}

_ZN4absl12lts_2026081715random_internal29ReadSeedMaterialFromOSEntropyENS0_4SpanIjEE:
  186|      1|bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values) {
  187|      1|  assert(values.data() != nullptr);
  188|      1|  if (values.data() == nullptr) {
  ------------------
  |  Branch (188:7): [True: 0, False: 1]
  ------------------
  189|      0|    return false;
  190|      0|  }
  191|      1|  if (values.empty()) {
  ------------------
  |  Branch (191:7): [True: 0, False: 1]
  ------------------
  192|      0|    return true;
  193|      0|  }
  194|      1|  return ReadSeedMaterialFromOSEntropyImpl(values);
  195|      1|}
seed_material.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_133ReadSeedMaterialFromOSEntropyImplENS0_4SpanIjEE:
  171|      1|bool ReadSeedMaterialFromOSEntropyImpl(absl::Span<uint32_t> values) {
  172|      1|#if defined(ABSL_RANDOM_USE_GET_ENTROPY)
  173|      1|  if (ReadSeedMaterialFromGetEntropy(values)) {
  ------------------
  |  Branch (173:7): [True: 1, False: 0]
  ------------------
  174|      1|    return true;
  175|      1|  }
  176|      0|#endif
  177|       |  // Libc may support getentropy, but the kernel may not, so we still have
  178|       |  // to fallback to ReadSeedMaterialFromDevURandom().
  179|      0|  return ReadSeedMaterialFromDevURandom(values);
  180|      1|}
seed_material.cc:_ZN4absl12lts_2026081715random_internal12_GLOBAL__N_130ReadSeedMaterialFromGetEntropyENS0_4SpanIjEE:
  120|      1|bool ReadSeedMaterialFromGetEntropy(absl::Span<uint32_t> values) {
  121|      1|  auto buffer = reinterpret_cast<uint8_t*>(values.data());
  122|      1|  size_t buffer_size = sizeof(uint32_t) * values.size();
  123|      9|  while (buffer_size > 0) {
  ------------------
  |  Branch (123:10): [True: 8, False: 1]
  ------------------
  124|       |    // getentropy() has a maximum permitted length of 256.
  125|      8|    size_t to_read = std::min<size_t>(buffer_size, 256);
  126|      8|    int result = getentropy(buffer, to_read);
  127|      8|    if (result < 0) {
  ------------------
  |  Branch (127:9): [True: 0, False: 8]
  ------------------
  128|      0|      return false;
  129|      0|    }
  130|       |    // https://github.com/google/sanitizers/issues/1173
  131|       |    // MemorySanitizer can't see through getentropy().
  132|      8|    ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(buffer, to_read);
  133|      8|    buffer += to_read;
  134|      8|    buffer_size -= to_read;
  135|      8|  }
  136|      1|  return true;
  137|      1|}

_ZNK4absl12lts_2026081715status_internal9StatusRep5UnrefEv:
   54|  14.1k|void StatusRep::Unref() const {
   55|       |  // Fast path: if ref==1, there is no need for a RefCountDec (since
   56|       |  // this is the only reference and therefore no other thread is
   57|       |  // allowed to be mucking with r).
   58|  14.1k|  if (ref_.load(std::memory_order_acquire) == 1 ||
  ------------------
  |  Branch (58:7): [True: 12.5k, False: 1.61k]
  ------------------
   59|  12.5k|      ref_.fetch_sub(1, std::memory_order_acq_rel) - 1 == 0) {
  ------------------
  |  Branch (59:7): [True: 0, False: 1.61k]
  ------------------
   60|  12.5k|    delete this;
   61|  12.5k|  }
   62|  14.1k|}
_ZN4absl12lts_2026081715status_internal9StatusRep17AddSourceLocationENSt3__115source_locationE:
  142|  19.3k|void StatusRep::AddSourceLocation(absl::SourceLocation loc) {
  143|  19.3k|  source_locations_.push_back(loc);
  144|  19.3k|}
_ZNK4absl12lts_2026081715status_internal9StatusRep5CloneENS0_12optional_refINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEbb:
  218|  18.2k|    bool include_source_locations) const {
  219|       |  // Optimization: no need to create a clone if we already have a refcount of 1.
  220|  18.2k|  if (ref_.load(std::memory_order_acquire) == 1 && !new_message.has_value() &&
  ------------------
  |  Branch (220:7): [True: 17.3k, False: 928]
  |  Branch (220:52): [True: 17.3k, False: 0]
  ------------------
  221|  17.3k|      include_payloads && include_source_locations) {
  ------------------
  |  Branch (221:7): [True: 17.3k, False: 0]
  |  Branch (221:27): [True: 17.3k, False: 0]
  ------------------
  222|       |    // All StatusRep instances are heap allocated and mutable, therefore this
  223|       |    // const_cast will never cast away const from a stack instance.
  224|       |    //
  225|       |    // CloneAndUnref is the only method that doesn't involve an external cast to
  226|       |    // get a mutable StatusRep* from the uintptr_t rep stored in Status.
  227|  17.3k|    return const_cast<StatusRep*>(this);
  228|  17.3k|  }
  229|    928|  std::unique_ptr<status_internal::Payloads> payloads;
  230|    928|  if (include_payloads && payloads_) {
  ------------------
  |  Branch (230:7): [True: 928, False: 0]
  |  Branch (230:27): [True: 0, False: 928]
  ------------------
  231|      0|    payloads = std::make_unique<status_internal::Payloads>(*payloads_);
  232|      0|  }
  233|    928|  auto* new_rep =
  234|    928|      new StatusRep(code_, new_message.value_or(message_), std::move(payloads));
  235|    928|  if (include_source_locations) {
  ------------------
  |  Branch (235:7): [True: 928, False: 0]
  ------------------
  236|    928|    new_rep->source_locations_ = source_locations_;
  237|    928|  }
  238|    928|  return new_rep;
  239|  18.2k|}
_ZNK4absl12lts_2026081715status_internal9StatusRep13CloneAndUnrefEv:
  241|  18.2k|StatusRep* absl_nonnull StatusRep::CloneAndUnref() const {
  242|  18.2k|  return CloneAndUnref(std::nullopt, true, true);
  243|  18.2k|}
_ZNK4absl12lts_2026081715status_internal9StatusRep13CloneAndUnrefENS0_12optional_refINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEbb:
  247|  18.2k|    bool include_source_locations) const {
  248|  18.2k|  StatusRep* new_rep =
  249|  18.2k|      Clone(new_message, /*include_payloads=*/include_payloads,
  250|  18.2k|            /*include_source_locations=*/include_source_locations);
  251|  18.2k|  if (new_rep != this) {
  ------------------
  |  Branch (251:7): [True: 928, False: 17.3k]
  ------------------
  252|    928|    Unref();
  253|    928|  }
  254|  18.2k|  return new_rep;
  255|  18.2k|}

_ZN4absl12lts_2026081715status_internal9StatusRepC2ENS0_10StatusCodeENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_10unique_ptrINS0_13InlinedVectorINS1_7PayloadELm1ENS4_9allocatorISB_EEEENS4_14default_deleteISE_EEEE:
   90|  12.5k|      : ref_(int32_t{1}),
   91|  12.5k|        code_(code_arg),
   92|  12.5k|        message_(message_arg),
   93|  12.5k|        payloads_(std::move(payloads_arg)) {}
_ZNK4absl12lts_2026081715status_internal9StatusRep3RefEv:
  111|  1.61k|  void Ref() const { ref_.fetch_add(1, std::memory_order_relaxed); }

_ZN4absl12lts_2026081715status_internal13MakeErrorImplILi13EEENS0_6StatusENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS4_15source_locationE:
  174|  1.08k|Status MakeErrorImpl(string_view message, SourceLocation loc) {
  175|  1.08k|  return Status(static_cast<StatusCode>(error_code), message, loc);
  176|  1.08k|}
_ZN4absl12lts_202608176Status21MakeRepFromStringViewEmNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEENS2_15source_locationE:
  129|  11.6k|                                        absl::SourceLocation loc) {
  130|  11.6k|  return MakeStatusRepImpl<absl::string_view>(inlined_rep, msg, loc);
  131|  11.6k|}
_ZN4absl12lts_202608176Status21AddSourceLocationImplEmNSt3__115source_locationE:
  142|  18.2k|                                        absl::SourceLocation loc) {
  143|  18.2k|  if (IsInlined(rep)) return rep;
  ------------------
  |  Branch (143:7): [True: 0, False: 18.2k]
  ------------------
  144|  18.2k|  if (loc.file_name()[0] == '\0') return rep;
  ------------------
  |  Branch (144:7): [True: 0, False: 18.2k]
  ------------------
  145|  18.2k|  status_internal::StatusRep* rep_ptr = PrepareToModify(rep);
  146|  18.2k|  rep_ptr->AddSourceLocation(loc);
  147|  18.2k|  return PointerToRep(rep_ptr);
  148|  18.2k|}
_ZN4absl12lts_202608176Status15PrepareToModifyEm:
  151|  18.2k|    uintptr_t rep) {
  152|  18.2k|  if (IsInlined(rep)) {
  ------------------
  |  Branch (152:7): [True: 0, False: 18.2k]
  ------------------
  153|      0|    return new status_internal::StatusRep(InlinedRepToCode(rep),
  154|      0|                                          absl::string_view(), nullptr);
  155|      0|  }
  156|  18.2k|  return RepToPointer(rep)->CloneAndUnref();
  157|  18.2k|}
_ZN4absl12lts_2026081717MakeStatusRepImplINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEEmmT_NS2_15source_locationE:
  109|  11.6k|                            absl::SourceLocation loc) {
  110|  11.6k|  static_assert(std::is_same_v<StringOrView, absl::string_view> ||
  111|  11.6k|                std::is_same_v<StringOrView, std::string&&>);
  112|  11.6k|  bool ok = inlined_rep == Status::CodeToInlinedRep(absl::StatusCode::kOk);
  113|  11.6k|  if (ok) return inlined_rep;
  ------------------
  |  Branch (113:7): [True: 0, False: 11.6k]
  ------------------
  114|  11.6k|  if (msg.empty()
  ------------------
  |  Branch (114:7): [True: 10.5k, False: 1.08k]
  ------------------
  115|  11.6k|  ) {
  116|  10.5k|    return inlined_rep;
  117|  10.5k|  }
  118|  1.08k|  auto* rep =
  119|  1.08k|      new status_internal::StatusRep(Status::InlinedRepToCode(inlined_rep),
  120|  1.08k|                                     std::forward<StringOrView>(msg), nullptr);
  121|  1.08k|  if (loc.file_name()[0] != '\0') {
  ------------------
  |  Branch (121:7): [True: 1.08k, False: 0]
  ------------------
  122|  1.08k|    rep->AddSourceLocation(loc);
  123|  1.08k|  }
  124|  1.08k|  return Status::PointerToRep(rep);
  125|  11.6k|}

_ZN4absl12lts_202608176Status17AddSourceLocationENSt3__115source_locationE:
  683|  18.2k|      absl::SourceLocation loc = absl::SourceLocation::current()) {
  684|  18.2k|    if (ok()) return;
  ------------------
  |  Branch (684:9): [True: 0, False: 18.2k]
  ------------------
  685|  18.2k|    rep_ = AddSourceLocationImpl(rep_, loc);
  686|  18.2k|    [[maybe_unused]] bool okay = ok();
  687|       |    // This hint tells the optimizer that the status is still not ok after the
  688|       |    // AddSourceLocation() call. This is useful when passing a known !ok status
  689|       |    // to StatusOr. StatusOr checks for ok() on its constructor and this assume
  690|       |    // helps the optimizer remove that check.
  691|  18.2k|    ABSL_ASSUME(!okay);
  ------------------
  |  |  272|  18.2k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  692|  18.2k|  }
_ZN4absl12lts_202608176StatusC2Em:
  770|  87.9M|  explicit Status(uintptr_t rep) : rep_(rep) {}
_ZN4absl12lts_202608176StatusaSEOS1_:
  983|  1.08k|inline Status& Status::operator=(Status&& x) noexcept {
  984|  1.08k|  uintptr_t old_rep = rep_;
  985|  1.08k|  if (x.rep_ != old_rep) {
  ------------------
  |  Branch (985:7): [True: 1.08k, False: 0]
  ------------------
  986|  1.08k|    rep_ = x.rep_;
  987|  1.08k|    x.rep_ = MovedFromRep();
  988|  1.08k|    Unref(old_rep);
  989|  1.08k|  }
  990|  1.08k|  return *this;
  991|  1.08k|}
_ZNK4absl12lts_202608176Status7messageEv:
 1023|  10.5k|inline absl::string_view Status::message() const {
 1024|  10.5k|  return !IsInlined(rep_)
  ------------------
  |  Branch (1024:10): [True: 0, False: 10.5k]
  ------------------
 1025|  10.5k|             ? RepToPointer(rep_)->message()
 1026|  10.5k|             : (IsMovedFrom(rep_) ? absl::string_view(kMovedFromString)
  ------------------
  |  Branch (1026:17): [True: 0, False: 10.5k]
  ------------------
 1027|  10.5k|                                  : absl::string_view());
 1028|  10.5k|}
_ZN4absl12lts_202608176Status11IsMovedFromEm:
 1091|  10.5k|constexpr bool Status::IsMovedFrom(uintptr_t rep) { return (rep & 2) != 0; }
_ZN4absl12lts_202608176Status16InlinedRepToCodeEm:
 1097|  11.6k|constexpr absl::StatusCode Status::InlinedRepToCode(uintptr_t rep) {
 1098|  11.6k|  ABSL_ASSERT(IsInlined(rep));
  ------------------
  |  |  131|  11.6k|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  ------------------
  |  |  |  |   87|  11.6k|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  ------------------
  ------------------
 1099|  11.6k|  return static_cast<absl::StatusCode>(rep >> 2);
 1100|  11.6k|}
_ZN4absl12lts_202608176Status12MovedFromRepEv:
 1102|  43.8M|constexpr uintptr_t Status::MovedFromRep() {
 1103|  43.8M|  return CodeToInlinedRep(absl::StatusCode::kInternal) | 2;
 1104|  43.8M|}
_ZN4absl12lts_202608176Status12PointerToRepEPNS0_15status_internal9StatusRepE:
 1113|  29.8k|    status_internal::StatusRep* absl_nonnull rep) {
 1114|  29.8k|  return reinterpret_cast<uintptr_t>(rep);
 1115|  29.8k|}
_ZN4absl12lts_202608176Status3RefEm:
 1117|   746k|inline void Status::Ref(uintptr_t rep) {
 1118|   746k|  if (!IsInlined(rep)) RepToPointer(rep)->Ref();
  ------------------
  |  Branch (1118:7): [True: 1.61k, False: 744k]
  ------------------
 1119|   746k|}
_ZN4absl12lts_202608178OkStatusEv:
 1126|  43.3M|inline Status OkStatus() { return Status(); }
_ZN4absl12lts_2026081713InternalErrorENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEENS1_15source_locationE:
 1208|  1.08k|                            absl::SourceLocation loc) {
 1209|  1.08k|  return status_internal::MakeError<StatusCode::kInternal>(message, loc);
 1210|  1.08k|}
_ZN4absl12lts_2026081715status_internal9MakeErrorILNS0_10StatusCodeE13EEENS0_6StatusENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEENS5_15source_locationE:
 1169|  1.08k|Status MakeError(string_view message, SourceLocation loc) {
 1170|  1.08k|  Status out = MakeErrorImpl<static_cast<int>(error_code)>(message, loc);
 1171|       |  // -Wassume warning complains about potential side effects of `ok()`, so use a
 1172|       |  // local to avoid that.
 1173|  1.08k|  [[maybe_unused]] bool ok = out.ok();
 1174|  1.08k|  ABSL_ASSUME(!ok);
  ------------------
  |  |  272|  1.08k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1175|  1.08k|  return out;
 1176|  1.08k|}
_ZN4absl12lts_202608176StatusC2EOS1_:
  979|  43.8M|inline Status::Status(Status&& x) noexcept : Status(x.rep_) {
  980|  43.8M|  x.rep_ = MovedFromRep();
  981|  43.8M|}
_ZN4absl12lts_202608176StatusC2ENS0_10StatusCodeENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS3_15source_locationE:
  956|  11.6k|    : Status(MakeRepFromStringView(CodeToInlinedRep(code), msg, loc)) {}
_ZN4absl12lts_202608176StatusC2Ev:
  950|  43.3M|inline Status::Status() : Status(absl::StatusCode::kOk) {}
_ZN4absl12lts_202608176StatusC2ENS0_10StatusCodeE:
  952|  43.3M|inline Status::Status(absl::StatusCode code) : Status(CodeToInlinedRep(code)) {}
_ZN4absl12lts_202608176StatusC2ERKS1_:
  966|   746k|inline Status::Status(const Status& x) : Status(x.rep_) { Ref(rep_); }

_ZN4absl12lts_2026081713StatusBuilder7DestroyENSt3__110unique_ptrINS1_3RepENS2_14default_deleteIS4_EEEE:
   37|  2.51k|void StatusBuilder::Destroy(std::unique_ptr<Rep>) {
   38|       |  // nothing to do. The unique_ptr will do the cleanup.
   39|  2.51k|}
_ZN4absl12lts_2026081713StatusBuilder3RepC2EONS0_6StatusE:
   55|  18.2k|StatusBuilder::Rep::Rep(absl::Status&& s) : status(std::move(s)) {}
_ZN4absl12lts_2026081713StatusBuilder3RepD2Ev:
   56|  18.2k|StatusBuilder::Rep::~Rep() = default;
_ZN4absl12lts_2026081713StatusBuilder11InitRepImplENS0_6StatusE:
   58|  18.2k|StatusBuilder::Rep* StatusBuilder::InitRepImpl(absl::Status s) {
   59|  18.2k|  if (s.ok()) {
  ------------------
  |  Branch (59:7): [True: 0, False: 18.2k]
  ------------------
   60|      0|    return nullptr;
   61|  18.2k|  } else {
   62|  18.2k|    return new Rep(std::move(s));
   63|  18.2k|  }
   64|  18.2k|}
_ZN4absl12lts_2026081713StatusBuilder3Rep10InitStreamEv:
   83|  10.5k|void StatusBuilder::Rep::InitStream() { stream.emplace(stream_message); }
_ZN4absl12lts_2026081713StatusBuilder31CreateStatusAndConditionallyLogENSt3__115source_locationENS2_10unique_ptrINS1_3RepENS2_14default_deleteIS5_EEEE:
  163|  18.2k|    absl::SourceLocation loc, std::unique_ptr<Rep> rep) {
  164|  18.2k|  if (rep == nullptr) return absl::OkStatus();
  ------------------
  |  Branch (164:7): [True: 0, False: 18.2k]
  ------------------
  165|  18.2k|  absl::Status result = status_internal::StatusPrivateAccessorForStatusBuilder::
  166|  18.2k|      JoinMessageToStatus(std::move(rep->status), rep->stream_message,
  167|  18.2k|                          rep->message_join_style);
  168|       |  // Passing in the `loc` last to ensure the sequence of the source locations.
  169|  18.2k|  result.AddSourceLocation(loc);
  170|  18.2k|  return result;
  171|  18.2k|}
_ZN4absl12lts_2026081715status_internal37StatusPrivateAccessorForStatusBuilder19JoinMessageToStatusENS0_6StatusENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS0_16MessageJoinStyleE:
  136|  18.2k|                                          MessageJoinStyle style) {
  137|  18.2k|    if (s.ok() || msg.empty()) return s;
  ------------------
  |  Branch (137:9): [True: 0, False: 18.2k]
  |  Branch (137:19): [True: 7.74k, False: 10.5k]
  ------------------
  138|  10.5k|    const absl::string_view original_message = s.message();
  139|  10.5k|    switch (style) {
  140|  10.5k|      case MessageJoinStyle::kAnnotate: {
  ------------------
  |  Branch (140:7): [True: 10.5k, False: 0]
  ------------------
  141|  10.5k|        std::string annotated;
  142|  10.5k|        if (!original_message.empty()) {
  ------------------
  |  Branch (142:13): [True: 0, False: 10.5k]
  ------------------
  143|      0|          absl::StrAppend(&annotated, original_message, "; ", msg);
  144|      0|          msg = annotated;
  145|      0|        }
  146|  10.5k|        return SetMessage(s, msg);
  147|      0|      }
  148|      0|      case MessageJoinStyle::kPrepend:
  ------------------
  |  Branch (148:7): [True: 0, False: 10.5k]
  ------------------
  149|      0|        return SetMessage(s, absl::StrCat(msg, original_message));
  150|      0|      case MessageJoinStyle::kAppend:
  ------------------
  |  Branch (150:7): [True: 0, False: 10.5k]
  ------------------
  151|      0|        return SetMessage(s, absl::StrCat(original_message, msg));
  152|      0|      default:
  ------------------
  |  Branch (152:7): [True: 0, False: 10.5k]
  ------------------
  153|      0|        return absl::InternalError("Unknown MessageJoinStyle");
  154|  10.5k|    }
  155|  10.5k|  }
_ZN4absl12lts_2026081715status_internal37StatusPrivateAccessorForStatusBuilder10SetMessageERKNS0_6StatusENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
  115|  10.5k|                                 absl::string_view message) {
  116|  10.5k|    ABSL_ASSERT(!status.ok());
  ------------------
  |  |  131|  10.5k|#define ABSL_ASSERT(expr) ABSL_INTERNAL_UNEVALUATED((expr) ? void() : void())
  |  |  ------------------
  |  |  |  |   87|  10.5k|#define ABSL_INTERNAL_UNEVALUATED(expr) (decltype((void)(expr))())
  |  |  ------------------
  ------------------
  117|       |
  118|  10.5k|    if (message.empty()) {
  ------------------
  |  Branch (118:9): [True: 0, False: 10.5k]
  ------------------
  119|      0|      return absl::Status(status.code(), message, absl::SourceLocation());
  120|      0|    }
  121|       |
  122|  10.5k|    using StatusRep =
  123|  10.5k|        std::remove_cv_t<std::remove_pointer_t<decltype(Status::RepToPointer(
  124|  10.5k|            std::declval<uintptr_t>()))>>;
  125|  10.5k|    StatusRep* rep;
  126|  10.5k|    if (Status::IsInlined(status.rep_)) {
  ------------------
  |  Branch (126:9): [True: 10.5k, False: 0]
  ------------------
  127|  10.5k|      rep = new StatusRep(Status::InlinedRepToCode(status.rep_), message,
  128|  10.5k|                          nullptr);
  129|  10.5k|    } else {
  130|      0|      rep = Status::RepToPointer(status.rep_)->Clone(message, true, true);
  131|      0|    }
  132|  10.5k|    return absl::Status(Status::PointerToRep(rep));
  133|  10.5k|  }

_ZN4absl12lts_2026081713StatusBuilderC2EONS0_6StatusENSt3__115source_locationE:
  775|  7.74k|    : loc_(location), rep_(InitRep(std::move(original_status))) {}
_ZN4absl12lts_2026081713StatusBuilder7InitRepEONS0_6StatusE:
  672|  18.2k|  static Rep* InitRep(absl::Status&& s) {
  673|  18.2k|    if (s.ok()) {
  ------------------
  |  Branch (673:9): [True: 0, False: 18.2k]
  ------------------
  674|      0|      return nullptr;
  675|  18.2k|    } else {
  676|  18.2k|      Rep* rep = InitRepImpl(std::move(s));
  677|  18.2k|      ABSL_ASSUME(rep != nullptr);
  ------------------
  |  |  272|  18.2k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  678|  18.2k|      return rep;
  679|  18.2k|    }
  680|  18.2k|  }
_ZNO4absl12lts_2026081713StatusBuildercvNS0_6StatusEEv:
  946|  18.2k|inline StatusBuilder::operator absl::Status() && {
  947|       |  // Tell the compiler that the `ok()` path will return an `Ok` status, but do
  948|       |  // it only if the compiler can determine it at compile time.
  949|       |  // When it can't, we delegate this check into the out of line function.
  950|  18.2k|  if (IsKnownToBeEmpty()) {
  ------------------
  |  Branch (950:7): [True: 0, False: 18.2k]
  ------------------
  951|      0|    return absl::OkStatus();
  952|      0|  }
  953|  18.2k|  absl::Status result = CreateStatusAndConditionallyLog(loc_, std::move(rep_));
  954|       |  // Tell the compiler that `rep_` was not filled again even if `this` escaped.
  955|  18.2k|  AssumeEmpty();
  956|  18.2k|  return result;
  957|  18.2k|}
_ZNK4absl12lts_2026081713StatusBuilder16IsKnownToBeEmptyEv:
  570|  36.5k|  ABSL_ATTRIBUTE_ALWAYS_INLINE bool IsKnownToBeEmpty() const {
  571|  36.5k|#if ABSL_HAVE_BUILTIN(__builtin_constant_p)
  572|       |    // __builtin_constant_p does not like it when it has non trivial expressions
  573|       |    // in it, and `rep_==nullptr` is a user-defined operator.
  574|       |    // Do it out of the builtin and pass the bool instead.
  575|  36.5k|    bool is_empty = rep_ == nullptr;
  576|  36.5k|    return __builtin_constant_p(is_empty) && is_empty;
  ------------------
  |  Branch (576:12): [True: 15.7k, False: 20.7k]
  |  Branch (576:46): [True: 15.7k, False: 0]
  ------------------
  577|       |#else
  578|       |    return false;
  579|       |#endif
  580|  36.5k|  }
_ZNK4absl12lts_2026081713StatusBuilder11AssumeEmptyEv:
  584|  20.7k|  void AssumeEmpty() const {
  585|  20.7k|    if (rep_ != nullptr) ABSL_UNREACHABLE();
  ------------------
  |  |  237|      0|  do {                                           \
  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  ------------------
  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  ------------------
  |  |  241|      0|  } while (false)
  |  |  ------------------
  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (585:9): [True: 0, False: 20.7k]
  ------------------
  586|  20.7k|  }
_ZN4absl12lts_2026081713StatusBuilderD2Ev:
  777|  18.2k|inline StatusBuilder::~StatusBuilder() {
  778|  18.2k|  if (IsKnownToBeEmpty()) {
  ------------------
  |  Branch (778:7): [True: 15.7k, False: 2.51k]
  ------------------
  779|       |    // Nothing to do.
  780|  15.7k|    return;
  781|  15.7k|  }
  782|       |  // We will run the destructor logic, so move it out of line.
  783|       |  // The destructor of the unique_ptr runs ~Rep() and then ::operator delete.
  784|       |  // We don't want that bloat on the caller.
  785|  2.51k|  Destroy(std::move(rep_));
  786|       |  // Tell the compiler that `rep_` was not filled again even if `this` escaped.
  787|  2.51k|  AssumeEmpty();
  788|  2.51k|}
_ZN4absl12lts_2026081713StatusBuilderC2ENS0_10StatusCodeENSt3__115source_locationE:
  765|  10.5k|    : loc_(location), rep_(InitRep(absl::Status(code, ""))) {}
_ZNO4absl12lts_2026081713StatusBuilderlsIA31_cEEOS1_RKT_:
  921|  10.5k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  10.5k|  return std::move(operator<<(value));
  923|  10.5k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA31_cEERS1_RKT_:
  911|  10.5k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  10.5k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 10.5k]
  ------------------
  913|  10.5k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 10.5k, False: 0]
  ------------------
  914|  10.5k|    rep_->InitStream();
  915|  10.5k|  }
  916|  10.5k|  *rep_->stream << value;
  917|  10.5k|  return *this;
  918|  10.5k|}
_ZN4absl12lts_2026081715status_internallsIA31_cEERNS1_6StreamES5_RKT_:
   60|  10.5k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  10.5k|    stream.absl_stringify_stream_ << t;
   62|  10.5k|    return stream;
   63|  10.5k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA2_cEEOS1_RKT_:
  921|  10.5k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  10.5k|  return std::move(operator<<(value));
  923|  10.5k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA2_cEERS1_RKT_:
  911|  10.5k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  10.5k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 10.5k]
  ------------------
  913|  10.5k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 10.5k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  10.5k|  *rep_->stream << value;
  917|  10.5k|  return *this;
  918|  10.5k|}
_ZN4absl12lts_2026081715status_internallsIA2_cEERNS1_6StreamES5_RKT_:
   60|  10.5k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  10.5k|    stream.absl_stringify_stream_ << t;
   62|  10.5k|    return stream;
   63|  10.5k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIiEEOS1_RKT_:
  921|  10.5k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  10.5k|  return std::move(operator<<(value));
  923|  10.5k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIiEERS1_RKT_:
  911|  10.5k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  10.5k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 10.5k]
  ------------------
  913|  10.5k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 10.5k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  10.5k|  *rep_->stream << value;
  917|  10.5k|  return *this;
  918|  10.5k|}
_ZN4absl12lts_2026081715status_internallsIiEERNS1_6StreamES4_RKT_:
   60|  10.5k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  10.5k|    stream.absl_stringify_stream_ << t;
   62|  10.5k|    return stream;
   63|  10.5k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA4_cEEOS1_RKT_:
  921|  10.5k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  10.5k|  return std::move(operator<<(value));
  923|  10.5k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA4_cEERS1_RKT_:
  911|  10.5k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  10.5k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 10.5k]
  ------------------
  913|  10.5k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 10.5k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  10.5k|  *rep_->stream << value;
  917|  10.5k|  return *this;
  918|  10.5k|}
_ZN4absl12lts_2026081715status_internallsIA4_cEERNS1_6StreamES5_RKT_:
   60|  10.5k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  10.5k|    stream.absl_stringify_stream_ << t;
   62|  10.5k|    return stream;
   63|  10.5k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA66_cEEOS1_RKT_:
  921|  4.65k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  4.65k|  return std::move(operator<<(value));
  923|  4.65k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA66_cEERS1_RKT_:
  911|  4.65k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  4.65k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 4.65k]
  ------------------
  913|  4.65k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 4.65k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  4.65k|  *rep_->stream << value;
  917|  4.65k|  return *this;
  918|  4.65k|}
_ZN4absl12lts_2026081715status_internallsIA66_cEERNS1_6StreamES5_RKT_:
   60|  4.65k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  4.65k|    stream.absl_stringify_stream_ << t;
   62|  4.65k|    return stream;
   63|  4.65k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA3_cEEOS1_RKT_:
  921|  10.5k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  10.5k|  return std::move(operator<<(value));
  923|  10.5k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA3_cEERS1_RKT_:
  911|  10.5k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  10.5k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 10.5k]
  ------------------
  913|  10.5k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 10.5k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  10.5k|  *rep_->stream << value;
  917|  10.5k|  return *this;
  918|  10.5k|}
_ZN4absl12lts_2026081715status_internallsIA3_cEERNS1_6StreamES5_RKT_:
   60|  10.5k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  10.5k|    stream.absl_stringify_stream_ << t;
   62|  10.5k|    return stream;
   63|  10.5k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA34_cEEOS1_RKT_:
  921|  2.50k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  2.50k|  return std::move(operator<<(value));
  923|  2.50k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA34_cEERS1_RKT_:
  911|  2.50k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  2.50k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 2.50k]
  ------------------
  913|  2.50k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 2.50k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  2.50k|  *rep_->stream << value;
  917|  2.50k|  return *this;
  918|  2.50k|}
_ZN4absl12lts_2026081715status_internallsIA34_cEERNS1_6StreamES5_RKT_:
   60|  2.50k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  2.50k|    stream.absl_stringify_stream_ << t;
   62|  2.50k|    return stream;
   63|  2.50k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA33_cEEOS1_RKT_:
  921|  3.37k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  3.37k|  return std::move(operator<<(value));
  923|  3.37k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA33_cEERS1_RKT_:
  911|  3.37k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  3.37k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 3.37k]
  ------------------
  913|  3.37k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 3.37k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  3.37k|  *rep_->stream << value;
  917|  3.37k|  return *this;
  918|  3.37k|}
_ZN4absl12lts_2026081715status_internallsIA33_cEERNS1_6StreamES5_RKT_:
   60|  3.37k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  3.37k|    stream.absl_stringify_stream_ << t;
   62|  3.37k|    return stream;
   63|  3.37k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA52_cEEOS1_RKT_:
  921|  3.37k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  3.37k|  return std::move(operator<<(value));
  923|  3.37k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA52_cEERS1_RKT_:
  911|  3.37k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  3.37k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 3.37k]
  ------------------
  913|  3.37k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 3.37k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  3.37k|  *rep_->stream << value;
  917|  3.37k|  return *this;
  918|  3.37k|}
_ZN4absl12lts_2026081715status_internallsIA52_cEERNS1_6StreamES5_RKT_:
   60|  3.37k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  3.37k|    stream.absl_stringify_stream_ << t;
   62|  3.37k|    return stream;
   63|  3.37k|  }
_ZNO4absl12lts_2026081713StatusBuilderlsIA53_cEEOS1_RKT_:
  921|  2.50k|StatusBuilder&& StatusBuilder::operator<<(const T& value) && {
  922|  2.50k|  return std::move(operator<<(value));
  923|  2.50k|}
_ZNR4absl12lts_2026081713StatusBuilderlsIA53_cEERS1_RKT_:
  911|  2.50k|StatusBuilder& StatusBuilder::operator<<(const T& value) & {
  912|  2.50k|  if (rep_ == nullptr) return *this;
  ------------------
  |  Branch (912:7): [True: 0, False: 2.50k]
  ------------------
  913|  2.50k|  if (!rep_->stream.has_value()) {
  ------------------
  |  Branch (913:7): [True: 0, False: 2.50k]
  ------------------
  914|      0|    rep_->InitStream();
  915|      0|  }
  916|  2.50k|  *rep_->stream << value;
  917|  2.50k|  return *this;
  918|  2.50k|}
_ZN4absl12lts_2026081715status_internallsIA53_cEERNS1_6StreamES5_RKT_:
   60|  2.50k|  friend Stream& operator<<(Stream& stream, const T& t) {
   61|  2.50k|    stream.absl_stringify_stream_ << t;
   62|  2.50k|    return stream;
   63|  2.50k|  }
_ZN4absl12lts_2026081715status_internal6StreamC2ERNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
   57|  10.5k|      : ostringstream_(&message), absl_stringify_stream_(ostringstream_) {}

_ZN4absl12lts_2026081721status_macro_internal12MacroAdaptorEONS0_6StatusENSt3__115source_locationE:
  444|  43.7M|                                         absl::SourceLocation loc) {
  445|  43.7M|  return ReturnIfErrorAdaptor(std::move(s), loc);
  446|  43.7M|}
_ZN4absl12lts_2026081721status_macro_internal20ReturnIfErrorAdaptorC2EONS0_6StatusENSt3__115source_locationE:
  404|  43.7M|      : status_(std::move(status)), loc_(loc) {}
_ZNK4absl12lts_2026081721status_macro_internal20ReturnIfErrorAdaptorcvbEv:
  420|  43.7M|  explicit operator bool() const { return ABSL_PREDICT_TRUE(status_.ok()); }
  ------------------
  |  |  191|  43.7M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:48): [Folded, False: 43.7M]
  |  |  |  Branch (191:57): [True: 43.7M, False: 7.74k]
  |  |  ------------------
  ------------------
_ZN4absl12lts_2026081721status_macro_internal20ReturnIfErrorAdaptor7ConsumeEv:
  422|  7.74k|  StatusBuilder Consume() { return StatusBuilder(std::move(status_), loc_); }
_ZN4absl12lts_2026081721status_macro_internal20ReturnIfErrorAdaptorD2Ev:
  406|  43.7M|  ~ReturnIfErrorAdaptor() {
  407|       |    // WARNING! WARNING! WARNING!
  408|       |    //
  409|       |    // We play fast and loose here and avoid destroying status_. This should be
  410|       |    // safe because status_ will never own memory at destruction time. The two
  411|       |    // cases to consider are:
  412|       |    //  (1) OK: OkStatus() representation needs no cleanup
  413|       |    //  (2) Not-OK: we take the else branch in ABSL_RETURN_IF_ERROR and move
  414|       |    //      status_ into StatusBuilder which leaves status_ with a MovedFromRep
  415|       |    //      that needs no cleanup.
  416|       |    // If the absl::Status implementation changes, leaks should be caught by
  417|       |    // the various tests we have when run under lsan or debug leak checker.
  418|  43.7M|  }

str_cat.cc:_ZN4absl12lts_2026081716strings_internal24StringAppendAndOverwriteINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS0_9StrAppendEPS9_RKNS0_8AlphaNumEE3$_0EEvRT_NSF_9size_typeET0_:
   48|  58.0M|                              Op append_op) {
   49|  58.0M|  if (ABSL_PREDICT_FALSE(append_n > str.max_size() - str.size())) {
  ------------------
  |  |  190|  58.0M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 58.0M]
  |  |  |  Branch (190:49): [Folded, False: 58.0M]
  |  |  |  Branch (190:58): [True: 0, False: 58.0M]
  |  |  ------------------
  ------------------
   50|      0|    ThrowStdLengthError("absl::strings_internal::StringAppendAndOverwrite");
   51|      0|  }
   52|       |
   53|  58.0M|  auto old_size = str.size();
   54|  58.0M|  auto resize = old_size + append_n;
   55|       |
   56|  58.0M|  if (resize > str.capacity()) {
  ------------------
  |  Branch (56:7): [True: 28.0k, False: 58.0M]
  ------------------
   57|       |    // Make sure to always grow by at least a factor of 2x.
   58|  28.0k|    const auto min_growth = str.capacity();
   59|  28.0k|    if (ABSL_PREDICT_FALSE(str.capacity() > str.max_size() - min_growth)) {
  ------------------
  |  |  190|  28.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 28.0k]
  |  |  |  Branch (190:49): [Folded, False: 28.0k]
  |  |  |  Branch (190:58): [True: 0, False: 28.0k]
  |  |  ------------------
  ------------------
   60|      0|      str.reserve(str.max_size());
   61|  28.0k|    } else if (resize < str.capacity() + min_growth) {
  ------------------
  |  Branch (61:16): [True: 26.3k, False: 1.65k]
  ------------------
   62|  26.3k|      str.reserve(str.capacity() + min_growth);
   63|  26.3k|    }
   64|  28.0k|  }
   65|       |
   66|       |  // Avoid calling StringResizeAndOverwrite() here since it does an MSAN
   67|       |  // verification on the entire string. StringResizeAndOverwriteImpl() is
   68|       |  // StringResizeAndOverwrite() without the MSAN verification.
   69|  58.0M|  StringResizeAndOverwriteImpl(
   70|  58.0M|      str, resize,
   71|  58.0M|      [old_size, append_n, do_append = std::move(append_op)](
   72|  58.0M|          typename T::value_type* data_ptr, typename T::size_type) mutable {
   73|  58.0M|        typename T::size_type num_appended = static_cast<typename T::size_type>(
   74|  58.0M|            std::move(do_append)(data_ptr + old_size, append_n));
   75|  58.0M|        absl::base_internal::HardeningAssertGE(num_appended,
   76|  58.0M|                                               typename T::size_type{0});
   77|  58.0M|        absl::base_internal::HardeningAssertLE(num_appended, append_n);
   78|  58.0M|        return old_size + num_appended;
   79|  58.0M|      });
   80|       |
   81|       |#if defined(ABSL_HAVE_MEMORY_SANITIZER)
   82|       |  // Only check the region appended to. Checking the entire string would cause
   83|       |  // pathological quadratic verfication on repeated small appends.
   84|       |  __msan_check_mem_is_initialized(str.data() + old_size, str.size() - old_size);
   85|       |#endif
   86|  58.0M|}
str_cat.cc:_ZZN4absl12lts_2026081716strings_internal24StringAppendAndOverwriteINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS0_9StrAppendEPS9_RKNS0_8AlphaNumEE3$_0EEvRT_NSF_9size_typeET0_ENUlPcmE_clESJ_m:
   72|  58.0M|          typename T::value_type* data_ptr, typename T::size_type) mutable {
   73|  58.0M|        typename T::size_type num_appended = static_cast<typename T::size_type>(
   74|  58.0M|            std::move(do_append)(data_ptr + old_size, append_n));
   75|  58.0M|        absl::base_internal::HardeningAssertGE(num_appended,
   76|  58.0M|                                               typename T::size_type{0});
   77|  58.0M|        absl::base_internal::HardeningAssertLE(num_appended, append_n);
   78|  58.0M|        return old_size + num_appended;
   79|  58.0M|      });
str_cat.cc:_ZN4absl12lts_2026081716strings_internal24StringAppendAndOverwriteINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS0_9StrAppendEPS9_RKNS0_8AlphaNumESD_E3$_0EEvRT_NSF_9size_typeET0_:
   48|   629k|                              Op append_op) {
   49|   629k|  if (ABSL_PREDICT_FALSE(append_n > str.max_size() - str.size())) {
  ------------------
  |  |  190|   629k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 629k]
  |  |  |  Branch (190:49): [Folded, False: 629k]
  |  |  |  Branch (190:58): [True: 0, False: 629k]
  |  |  ------------------
  ------------------
   50|      0|    ThrowStdLengthError("absl::strings_internal::StringAppendAndOverwrite");
   51|      0|  }
   52|       |
   53|   629k|  auto old_size = str.size();
   54|   629k|  auto resize = old_size + append_n;
   55|       |
   56|   629k|  if (resize > str.capacity()) {
  ------------------
  |  Branch (56:7): [True: 0, False: 629k]
  ------------------
   57|       |    // Make sure to always grow by at least a factor of 2x.
   58|      0|    const auto min_growth = str.capacity();
   59|      0|    if (ABSL_PREDICT_FALSE(str.capacity() > str.max_size() - min_growth)) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   60|      0|      str.reserve(str.max_size());
   61|      0|    } else if (resize < str.capacity() + min_growth) {
  ------------------
  |  Branch (61:16): [True: 0, False: 0]
  ------------------
   62|      0|      str.reserve(str.capacity() + min_growth);
   63|      0|    }
   64|      0|  }
   65|       |
   66|       |  // Avoid calling StringResizeAndOverwrite() here since it does an MSAN
   67|       |  // verification on the entire string. StringResizeAndOverwriteImpl() is
   68|       |  // StringResizeAndOverwrite() without the MSAN verification.
   69|   629k|  StringResizeAndOverwriteImpl(
   70|   629k|      str, resize,
   71|   629k|      [old_size, append_n, do_append = std::move(append_op)](
   72|   629k|          typename T::value_type* data_ptr, typename T::size_type) mutable {
   73|   629k|        typename T::size_type num_appended = static_cast<typename T::size_type>(
   74|   629k|            std::move(do_append)(data_ptr + old_size, append_n));
   75|   629k|        absl::base_internal::HardeningAssertGE(num_appended,
   76|   629k|                                               typename T::size_type{0});
   77|   629k|        absl::base_internal::HardeningAssertLE(num_appended, append_n);
   78|   629k|        return old_size + num_appended;
   79|   629k|      });
   80|       |
   81|       |#if defined(ABSL_HAVE_MEMORY_SANITIZER)
   82|       |  // Only check the region appended to. Checking the entire string would cause
   83|       |  // pathological quadratic verfication on repeated small appends.
   84|       |  __msan_check_mem_is_initialized(str.data() + old_size, str.size() - old_size);
   85|       |#endif
   86|   629k|}
str_cat.cc:_ZZN4absl12lts_2026081716strings_internal24StringAppendAndOverwriteINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS0_9StrAppendEPS9_RKNS0_8AlphaNumESD_E3$_0EEvRT_NSF_9size_typeET0_ENUlPcmE_clESJ_m:
   72|   629k|          typename T::value_type* data_ptr, typename T::size_type) mutable {
   73|   629k|        typename T::size_type num_appended = static_cast<typename T::size_type>(
   74|   629k|            std::move(do_append)(data_ptr + old_size, append_n));
   75|   629k|        absl::base_internal::HardeningAssertGE(num_appended,
   76|   629k|                                               typename T::size_type{0});
   77|   629k|        absl::base_internal::HardeningAssertLE(num_appended, append_n);
   78|   629k|        return old_size + num_appended;
   79|   629k|      });

_ZN4absl12lts_2026081716strings_internal13OStringStream9Streambuf6xsputnEPKcl:
   35|  69.1k|                                                 std::streamsize n) {
   36|       |  assert(str_);
   37|  69.1k|  str_->append(s, static_cast<size_t>(n));
   38|  69.1k|  return n;
   39|  69.1k|}

_ZN4absl12lts_2026081716strings_internal13OStringStream9StreambufC2EPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
   93|  10.5k|    explicit Streambuf(std::string* str) : str_(str) {}
_ZN4absl12lts_2026081716strings_internal13OStringStreamC1EPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
   73|  10.5k|      : std::ostream(&buf_), buf_(str) {}

_ZN4absl12lts_2026081716strings_internal28STLStringResizeUninitializedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvEEvPT_m:
   68|  1.02M|inline void STLStringResizeUninitialized(string_type* s, size_t new_size) {
   69|  1.02M|  ResizeUninitializedTraits<string_type>::Resize(s, new_size);
   70|  1.02M|}
_ZN4absl12lts_2026081716strings_internal25ResizeUninitializedTraitsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvE6ResizeEPS9_m:
   48|  1.02M|  static void Resize(string_type* s, size_t new_size) {
   49|  1.02M|    s->__resize_default_init(new_size);
   50|  1.02M|  }
_ZN4absl12lts_2026081716strings_internal37STLStringResizeUninitializedAmortizedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvPT_m:
   80|  6.81k|void STLStringResizeUninitializedAmortized(string_type* s, size_t new_size) {
   81|  6.81k|  if (new_size > s->size()) {
  ------------------
  |  Branch (81:7): [True: 6.81k, False: 0]
  ------------------
   82|  6.81k|    if (new_size > s->capacity()) {
  ------------------
  |  Branch (82:9): [True: 6.19k, False: 614]
  ------------------
   83|       |      // Make sure to always grow by at least a factor of 2x. Change min_growth
   84|       |      // if you want to experiment with other growth strategies.
   85|  6.19k|      const auto min_growth = s->capacity();
   86|  6.19k|      if (ABSL_PREDICT_FALSE(s->capacity() > s->max_size() - min_growth)) {
  ------------------
  |  |  190|  6.19k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 6.19k]
  |  |  |  Branch (190:49): [Folded, False: 6.19k]
  |  |  |  Branch (190:58): [True: 0, False: 6.19k]
  |  |  ------------------
  ------------------
   87|      0|        s->reserve(s->max_size());
   88|  6.19k|      } else if (new_size < s->capacity() + min_growth) {
  ------------------
  |  Branch (88:18): [True: 2.18k, False: 4.01k]
  ------------------
   89|  2.18k|        s->reserve(s->capacity() + min_growth);
   90|  2.18k|      }
   91|  6.19k|    }
   92|       |    // This calls absl::strings_internal::StringResizeAndOverwriteImpl() because
   93|       |    // the public API absl::StringResizeAndOverwrite() verifies that the
   94|       |    // required range has been initialized. No other code should be calling
   95|       |    // absl::strings_internal::StringResizeAndOverwriteImpl(). Instead it should
   96|       |    // be implemented correctly with absl::StringResizeAndOverwrite().
   97|  6.81k|    absl::strings_internal::StringResizeAndOverwriteImpl(
   98|  6.81k|        *s, new_size, [](typename string_type::value_type*, size_t buf_size) {
   99|       |          // TODO: b/446221957 - It is undefined behavior if any character in
  100|       |          // the range [0, return_value) is uninitialized, but we rely on this
  101|       |          // here to implement the old STLStringResizeUninitializedAmortized()
  102|       |          // API.
  103|  6.81k|          return buf_size;
  104|  6.81k|        });
  105|  6.81k|  } else {
  106|      0|    s->erase(new_size);
  107|      0|  }
  108|  6.81k|}
_ZZN4absl12lts_2026081716strings_internal37STLStringResizeUninitializedAmortizedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvPT_mENKUlPcmE_clESC_m:
   98|  6.81k|        *s, new_size, [](typename string_type::value_type*, size_t buf_size) {
   99|       |          // TODO: b/446221957 - It is undefined behavior if any character in
  100|       |          // the range [0, return_value) is uninitialized, but we rely on this
  101|       |          // here to implement the old STLStringResizeUninitializedAmortized()
  102|       |          // API.
  103|  6.81k|          return buf_size;
  104|  6.81k|        });

_ZN4absl12lts_2026081719str_format_internal13ConvertIntArgIcEEbT_NS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  369|  5.60k|bool ConvertIntArg(T v, FormatConversionSpecImpl conv, FormatSinkImpl *sink) {
  370|  5.60k|  using U = typename MakeUnsigned<T>::type;
  371|  5.60k|  IntDigits as_digits;
  372|       |
  373|       |  // This odd casting is due to a bug in -Wswitch behavior in gcc49 which causes
  374|       |  // it to complain about a switch/case type mismatch, even though both are
  375|       |  // FormatConversionChar.  Likely this is because at this point
  376|       |  // FormatConversionChar is declared, but not defined.
  377|  5.60k|  switch (static_cast<uint8_t>(conv.conversion_char())) {
  378|  5.60k|    case static_cast<uint8_t>(FormatConversionCharInternal::c):
  ------------------
  |  Branch (378:5): [True: 5.60k, False: 0]
  ------------------
  379|  5.60k|      return (std::is_same_v<T, wchar_t> || (conv.length_mod() == LengthMod::l))
  ------------------
  |  Branch (379:15): [Folded, False: 5.60k]
  |  Branch (379:45): [True: 0, False: 5.60k]
  ------------------
  380|  5.60k|                 ? ConvertWCharTImpl(static_cast<wchar_t>(v), conv, sink)
  381|  5.60k|                 : ConvertCharImpl(static_cast<char>(v), conv, sink);
  382|       |
  383|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::o):
  ------------------
  |  Branch (383:5): [True: 0, False: 5.60k]
  ------------------
  384|      0|      as_digits.PrintAsOct(static_cast<U>(v));
  385|      0|      break;
  386|       |
  387|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::x):
  ------------------
  |  Branch (387:5): [True: 0, False: 5.60k]
  ------------------
  388|      0|      as_digits.PrintAsHexLower(static_cast<U>(v));
  389|      0|      break;
  390|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::X):
  ------------------
  |  Branch (390:5): [True: 0, False: 5.60k]
  ------------------
  391|      0|      as_digits.PrintAsHexUpper(static_cast<U>(v));
  392|      0|      break;
  393|       |
  394|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::u):
  ------------------
  |  Branch (394:5): [True: 0, False: 5.60k]
  ------------------
  395|      0|      as_digits.PrintAsDec(static_cast<U>(v));
  396|      0|      break;
  397|       |
  398|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::d):
  ------------------
  |  Branch (398:5): [True: 0, False: 5.60k]
  ------------------
  399|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::i):
  ------------------
  |  Branch (399:5): [True: 0, False: 5.60k]
  ------------------
  400|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::v):
  ------------------
  |  Branch (400:5): [True: 0, False: 5.60k]
  ------------------
  401|      0|      as_digits.PrintAsDec(v);
  402|      0|      break;
  403|       |
  404|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::a):
  ------------------
  |  Branch (404:5): [True: 0, False: 5.60k]
  ------------------
  405|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::e):
  ------------------
  |  Branch (405:5): [True: 0, False: 5.60k]
  ------------------
  406|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::f):
  ------------------
  |  Branch (406:5): [True: 0, False: 5.60k]
  ------------------
  407|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::g):
  ------------------
  |  Branch (407:5): [True: 0, False: 5.60k]
  ------------------
  408|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::A):
  ------------------
  |  Branch (408:5): [True: 0, False: 5.60k]
  ------------------
  409|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::E):
  ------------------
  |  Branch (409:5): [True: 0, False: 5.60k]
  ------------------
  410|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::F):
  ------------------
  |  Branch (410:5): [True: 0, False: 5.60k]
  ------------------
  411|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::G):
  ------------------
  |  Branch (411:5): [True: 0, False: 5.60k]
  ------------------
  412|      0|      return ConvertFloatImpl(static_cast<double>(v), conv, sink);
  413|       |
  414|      0|    default:
  ------------------
  |  Branch (414:5): [True: 0, False: 5.60k]
  ------------------
  415|      0|      ABSL_ASSUME(false);
  ------------------
  |  |  272|      0|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  416|  5.60k|  }
  417|       |
  418|      0|  if (conv.is_basic()) {
  ------------------
  |  Branch (418:7): [True: 0, False: 0]
  ------------------
  419|      0|    sink->Append(as_digits.with_neg_and_zero());
  420|      0|    return true;
  421|      0|  }
  422|      0|  return ConvertIntImplInnerSlow(as_digits, conv, sink);
  423|      0|}
_ZN4absl12lts_2026081719str_format_internal13ConvertIntArgIiEEbT_NS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  369|  17.0k|bool ConvertIntArg(T v, FormatConversionSpecImpl conv, FormatSinkImpl *sink) {
  370|  17.0k|  using U = typename MakeUnsigned<T>::type;
  371|  17.0k|  IntDigits as_digits;
  372|       |
  373|       |  // This odd casting is due to a bug in -Wswitch behavior in gcc49 which causes
  374|       |  // it to complain about a switch/case type mismatch, even though both are
  375|       |  // FormatConversionChar.  Likely this is because at this point
  376|       |  // FormatConversionChar is declared, but not defined.
  377|  17.0k|  switch (static_cast<uint8_t>(conv.conversion_char())) {
  378|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::c):
  ------------------
  |  Branch (378:5): [True: 0, False: 17.0k]
  ------------------
  379|      0|      return (std::is_same_v<T, wchar_t> || (conv.length_mod() == LengthMod::l))
  ------------------
  |  Branch (379:15): [Folded, False: 0]
  |  Branch (379:45): [True: 0, False: 0]
  ------------------
  380|      0|                 ? ConvertWCharTImpl(static_cast<wchar_t>(v), conv, sink)
  381|      0|                 : ConvertCharImpl(static_cast<char>(v), conv, sink);
  382|       |
  383|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::o):
  ------------------
  |  Branch (383:5): [True: 0, False: 17.0k]
  ------------------
  384|      0|      as_digits.PrintAsOct(static_cast<U>(v));
  385|      0|      break;
  386|       |
  387|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::x):
  ------------------
  |  Branch (387:5): [True: 0, False: 17.0k]
  ------------------
  388|      0|      as_digits.PrintAsHexLower(static_cast<U>(v));
  389|      0|      break;
  390|    256|    case static_cast<uint8_t>(FormatConversionCharInternal::X):
  ------------------
  |  Branch (390:5): [True: 256, False: 16.8k]
  ------------------
  391|    256|      as_digits.PrintAsHexUpper(static_cast<U>(v));
  392|    256|      break;
  393|       |
  394|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::u):
  ------------------
  |  Branch (394:5): [True: 0, False: 17.0k]
  ------------------
  395|      0|      as_digits.PrintAsDec(static_cast<U>(v));
  396|      0|      break;
  397|       |
  398|  16.8k|    case static_cast<uint8_t>(FormatConversionCharInternal::d):
  ------------------
  |  Branch (398:5): [True: 16.8k, False: 256]
  ------------------
  399|  16.8k|    case static_cast<uint8_t>(FormatConversionCharInternal::i):
  ------------------
  |  Branch (399:5): [True: 0, False: 17.0k]
  ------------------
  400|  16.8k|    case static_cast<uint8_t>(FormatConversionCharInternal::v):
  ------------------
  |  Branch (400:5): [True: 0, False: 17.0k]
  ------------------
  401|  16.8k|      as_digits.PrintAsDec(v);
  402|  16.8k|      break;
  403|       |
  404|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::a):
  ------------------
  |  Branch (404:5): [True: 0, False: 17.0k]
  ------------------
  405|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::e):
  ------------------
  |  Branch (405:5): [True: 0, False: 17.0k]
  ------------------
  406|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::f):
  ------------------
  |  Branch (406:5): [True: 0, False: 17.0k]
  ------------------
  407|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::g):
  ------------------
  |  Branch (407:5): [True: 0, False: 17.0k]
  ------------------
  408|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::A):
  ------------------
  |  Branch (408:5): [True: 0, False: 17.0k]
  ------------------
  409|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::E):
  ------------------
  |  Branch (409:5): [True: 0, False: 17.0k]
  ------------------
  410|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::F):
  ------------------
  |  Branch (410:5): [True: 0, False: 17.0k]
  ------------------
  411|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::G):
  ------------------
  |  Branch (411:5): [True: 0, False: 17.0k]
  ------------------
  412|      0|      return ConvertFloatImpl(static_cast<double>(v), conv, sink);
  413|       |
  414|      0|    default:
  ------------------
  |  Branch (414:5): [True: 0, False: 17.0k]
  ------------------
  415|      0|      ABSL_ASSUME(false);
  ------------------
  |  |  272|      0|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  416|  17.0k|  }
  417|       |
  418|  17.0k|  if (conv.is_basic()) {
  ------------------
  |  Branch (418:7): [True: 0, False: 17.0k]
  ------------------
  419|      0|    sink->Append(as_digits.with_neg_and_zero());
  420|      0|    return true;
  421|      0|  }
  422|  17.0k|  return ConvertIntImplInnerSlow(as_digits, conv, sink);
  423|  17.0k|}
_ZN4absl12lts_2026081719str_format_internal17FormatConvertImplEcNS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  556|  5.60k|                                    FormatSinkImpl *sink) {
  557|  5.60k|  return {ConvertIntArg(v, conv, sink)};
  558|  5.60k|}
_ZN4absl12lts_2026081719str_format_internal17FormatConvertImplEiNS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  588|  17.0k|                                        FormatSinkImpl *sink) {
  589|  17.0k|  return {ConvertIntArg(v, conv, sink)};
  590|  17.0k|}
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_115ConvertCharImplEcNS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  226|  5.60k|                     FormatSinkImpl* sink) {
  227|  5.60k|  size_t fill = 0;
  228|  5.60k|  if (conv.width() >= 0)
  ------------------
  |  Branch (228:7): [True: 0, False: 5.60k]
  ------------------
  229|      0|    fill = static_cast<size_t>(conv.width());
  230|  5.60k|  ReducePadding(1, &fill);
  231|  5.60k|  if (!conv.has_left_flag()) sink->Append(fill, ' ');
  ------------------
  |  Branch (231:7): [True: 5.60k, False: 0]
  ------------------
  232|  5.60k|  sink->Append(1, v);
  233|  5.60k|  if (conv.has_left_flag()) sink->Append(fill, ' ');
  ------------------
  |  Branch (233:7): [True: 0, False: 5.60k]
  ------------------
  234|  5.60k|  return true;
  235|  5.60k|}
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_113ReducePaddingEmPm:
   54|  22.6k|void ReducePadding(size_t n, size_t *capacity) {
   55|  22.6k|  *capacity = Excess(n, *capacity);
   56|  22.6k|}
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_123ConvertIntImplInnerSlowERKNS2_9IntDigitsENS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  239|  17.0k|                             FormatSinkImpl *sink) {
  240|       |  // Print as a sequence of Substrings:
  241|       |  //   [left_spaces][sign][base_indicator][zeroes][formatted][right_spaces]
  242|  17.0k|  size_t fill = 0;
  243|  17.0k|  if (conv.width() >= 0)
  ------------------
  |  Branch (243:7): [True: 17.0k, False: 0]
  ------------------
  244|  17.0k|    fill = static_cast<size_t>(conv.width());
  245|       |
  246|  17.0k|  string_view formatted = as_digits.without_neg_or_zero();
  247|  17.0k|  ReducePadding(formatted, &fill);
  248|       |
  249|  17.0k|  string_view sign = SignColumn(as_digits.is_negative(), conv);
  250|  17.0k|  ReducePadding(sign, &fill);
  251|       |
  252|  17.0k|  string_view base_indicator = BaseIndicator(as_digits, conv);
  253|  17.0k|  ReducePadding(base_indicator, &fill);
  254|       |
  255|  17.0k|  bool precision_specified = conv.precision() >= 0;
  256|  17.0k|  size_t precision =
  257|  17.0k|      precision_specified ? static_cast<size_t>(conv.precision()) : size_t{1};
  ------------------
  |  Branch (257:7): [True: 0, False: 17.0k]
  ------------------
  258|       |
  259|  17.0k|  if (conv.has_alt_flag() &&
  ------------------
  |  Branch (259:7): [True: 0, False: 17.0k]
  ------------------
  260|      0|      conv.conversion_char() == FormatConversionCharInternal::o) {
  ------------------
  |  Branch (260:7): [True: 0, False: 0]
  ------------------
  261|       |    // From POSIX description of the '#' (alt) flag:
  262|       |    //   "For o conversion, it increases the precision (if necessary) to
  263|       |    //   force the first digit of the result to be zero."
  264|      0|    if (formatted.empty() || *formatted.begin() != '0') {
  ------------------
  |  Branch (264:9): [True: 0, False: 0]
  |  Branch (264:30): [True: 0, False: 0]
  ------------------
  265|      0|      size_t needed = formatted.size() + 1;
  266|      0|      precision = std::max(precision, needed);
  267|      0|    }
  268|      0|  }
  269|       |
  270|  17.0k|  size_t num_zeroes = Excess(formatted.size(), precision);
  271|  17.0k|  ReducePadding(num_zeroes, &fill);
  272|       |
  273|  17.0k|  size_t num_left_spaces = !conv.has_left_flag() ? fill : 0;
  ------------------
  |  Branch (273:28): [True: 17.0k, False: 0]
  ------------------
  274|  17.0k|  size_t num_right_spaces = conv.has_left_flag() ? fill : 0;
  ------------------
  |  Branch (274:29): [True: 0, False: 17.0k]
  ------------------
  275|       |
  276|       |  // From POSIX description of the '0' (zero) flag:
  277|       |  //   "For d, i, o, u, x, and X conversion specifiers, if a precision
  278|       |  //   is specified, the '0' flag is ignored."
  279|  17.0k|  if (!precision_specified && conv.has_zero_flag()) {
  ------------------
  |  Branch (279:7): [True: 17.0k, False: 0]
  |  Branch (279:31): [True: 11.4k, False: 5.60k]
  ------------------
  280|  11.4k|    num_zeroes += num_left_spaces;
  281|  11.4k|    num_left_spaces = 0;
  282|  11.4k|  }
  283|       |
  284|  17.0k|  sink->Append(num_left_spaces, ' ');
  285|  17.0k|  sink->Append(sign);
  286|  17.0k|  sink->Append(base_indicator);
  287|  17.0k|  sink->Append(num_zeroes, '0');
  288|  17.0k|  sink->Append(formatted);
  289|  17.0k|  sink->Append(num_right_spaces, ' ');
  290|  17.0k|  return true;
  291|  17.0k|}
arg.cc:_ZNK4absl12lts_2026081719str_format_internal12_GLOBAL__N_19IntDigits19without_neg_or_zeroEv:
  179|  17.0k|  string_view without_neg_or_zero() const {
  180|  17.0k|    static_assert('-' < '0', "The check below verifies both.");
  181|  17.0k|    size_t advance = start_[0] <= '0' ? 1 : 0;
  ------------------
  |  Branch (181:22): [True: 1, False: 17.0k]
  ------------------
  182|  17.0k|    return {start_ + advance, size_ - advance};
  183|  17.0k|  }
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_113ReducePaddingENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPm:
   49|  51.1k|void ReducePadding(string_view s, size_t *capacity) {
   50|  51.1k|  *capacity = Excess(s.size(), *capacity);
   51|  51.1k|}
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_110SignColumnEbNS1_24FormatConversionSpecImplE:
  214|  17.0k|string_view SignColumn(bool neg, const FormatConversionSpecImpl conv) {
  215|  17.0k|  if (conv.conversion_char() == FormatConversionCharInternal::d ||
  ------------------
  |  Branch (215:7): [True: 16.8k, False: 256]
  ------------------
  216|  16.8k|      conv.conversion_char() == FormatConversionCharInternal::i) {
  ------------------
  |  Branch (216:7): [True: 0, False: 256]
  ------------------
  217|  16.8k|    if (neg) return "-";
  ------------------
  |  Branch (217:9): [True: 0, False: 16.8k]
  ------------------
  218|  16.8k|    if (conv.has_show_pos_flag()) return "+";
  ------------------
  |  Branch (218:9): [True: 0, False: 16.8k]
  ------------------
  219|  16.8k|    if (conv.has_sign_col_flag()) return " ";
  ------------------
  |  Branch (219:9): [True: 0, False: 16.8k]
  ------------------
  220|  16.8k|  }
  221|  17.0k|  return {};
  222|  17.0k|}
arg.cc:_ZNK4absl12lts_2026081719str_format_internal12_GLOBAL__N_19IntDigits11is_negativeEv:
  185|  17.0k|  bool is_negative() const { return start_[0] == '-'; }
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_113BaseIndicatorERKNS2_9IntDigitsENS1_24FormatConversionSpecImplE:
  197|  17.0k|                          const FormatConversionSpecImpl conv) {
  198|       |  // always show 0x for %p.
  199|  17.0k|  bool alt = conv.has_alt_flag() ||
  ------------------
  |  Branch (199:14): [True: 0, False: 17.0k]
  ------------------
  200|  17.0k|             conv.conversion_char() == FormatConversionCharInternal::p;
  ------------------
  |  Branch (200:14): [True: 0, False: 17.0k]
  ------------------
  201|  17.0k|  bool hex = (conv.conversion_char() == FormatConversionCharInternal::x ||
  ------------------
  |  Branch (201:15): [True: 0, False: 17.0k]
  ------------------
  202|  17.0k|              conv.conversion_char() == FormatConversionCharInternal::X ||
  ------------------
  |  Branch (202:15): [True: 256, False: 16.8k]
  ------------------
  203|  16.8k|              conv.conversion_char() == FormatConversionCharInternal::p);
  ------------------
  |  Branch (203:15): [True: 0, False: 16.8k]
  ------------------
  204|       |  // From the POSIX description of '#' flag:
  205|       |  //   "For x or X conversion specifiers, a non-zero result shall have
  206|       |  //   0x (or 0X) prefixed to it."
  207|  17.0k|  if (alt && hex && !as_digits.without_neg_or_zero().empty()) {
  ------------------
  |  Branch (207:7): [True: 0, False: 17.0k]
  |  Branch (207:7): [True: 0, False: 17.0k]
  |  Branch (207:14): [True: 0, False: 0]
  |  Branch (207:21): [True: 0, False: 0]
  ------------------
  208|      0|    return conv.conversion_char() == FormatConversionCharInternal::X ? "0X"
  ------------------
  |  Branch (208:12): [True: 0, False: 0]
  ------------------
  209|      0|                                                                     : "0x";
  210|      0|  }
  211|  17.0k|  return {};
  212|  17.0k|}
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_19IntDigits15PrintAsHexUpperIjEEvT_:
  160|    256|  void PrintAsHexUpper(T v) {
  161|    256|    static_assert(!IsSigned<T>::value, "");
  162|    256|    char *p = storage_ + sizeof(storage_);
  163|       |
  164|       |    // kHexTable is only lowercase, so do it manually for uppercase.
  165|    496|    do {
  166|    496|      *--p = "0123456789ABCDEF"[static_cast<size_t>(v) & 15];
  167|    496|      v >>= 4;
  168|    496|    } while (v);
  ------------------
  |  Branch (168:14): [True: 240, False: 256]
  ------------------
  169|    256|    start_ = p;
  170|    256|    size_ = static_cast<size_t>(storage_ + sizeof(storage_) - p);
  171|    256|  }
arg.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_19IntDigits10PrintAsDecIiEEvT_:
   98|  16.8k|  void PrintAsDec(T v) {
   99|  16.8k|    static_assert(std::is_integral_v<T>, "");
  100|  16.8k|    start_ = storage_;
  101|  16.8k|    size_ = static_cast<size_t>(numbers_internal::FastIntToBuffer(v, storage_) -
  102|  16.8k|                                storage_);
  103|  16.8k|  }

_ZN4absl12lts_2026081719str_format_internal14ExtractCharSetILNS0_23FormatConversionCharSetE655355EEES3_NS1_16ArgConvertResultIXT_EEE:
  205|  17.0k|constexpr FormatConversionCharSet ExtractCharSet(ArgConvertResult<C>) {
  206|  17.0k|  return C;
  207|  17.0k|}
_ZN4absl12lts_2026081719str_format_internal13FormatArgImplC2IiEERKT_:
  490|  17.0k|  explicit FormatArgImpl(const T& value) {
  491|  17.0k|    using D = typename DecayType<T>::type;
  492|  17.0k|    static_assert(
  493|  17.0k|        std::is_same_v<D, const T&> || storage_policy<D>::value == ByValue,
  494|  17.0k|        "Decayed types must be stored by value");
  495|  17.0k|    Init(static_cast<D>(value));
  496|  17.0k|  }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl4InitIiEEvRKT_:
  543|  17.0k|  void Init(const T& value) {
  544|  17.0k|    data_ = Manager<T>::SetValue(value);
  545|  17.0k|    dispatcher_ = &Dispatch<T>;
  546|  17.0k|  }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl7ManagerIiLNS2_13StoragePolicyE2EE8SetValueERKi:
  529|  17.0k|    static Data SetValue(const T& value) {
  530|  17.0k|      Data data;
  531|  17.0k|      memcpy(data.buf, &value, sizeof(value));
  532|  17.0k|      return data;
  533|  17.0k|    }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl8DispatchIiEEbNS2_4DataENS1_24FormatConversionSpecImplEPv:
  584|  17.0k|  static bool Dispatch(Data arg, FormatConversionSpecImpl spec, void* out) {
  585|       |    // A `none` conv indicates that we want the `int` conversion.
  586|  17.0k|    if (ABSL_PREDICT_FALSE(spec.conversion_char() ==
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
  587|  17.0k|                           FormatConversionCharInternal::kNone)) {
  588|      0|      return ToInt<T>(arg, static_cast<int*>(out), std::is_integral<T>(),
  589|      0|                      std::is_enum<T>());
  590|      0|    }
  591|  17.0k|    if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
  592|  17.0k|            !Contains(ArgumentToConv<T>(), spec.conversion_char()))) {
  593|      0|      return false;
  594|      0|    }
  595|  17.0k|    return str_format_internal::FormatConvertImpl(
  596|  17.0k|               Manager<T>::Value(arg), spec, static_cast<FormatSinkImpl*>(out))
  597|  17.0k|        .value;
  598|  17.0k|  }
_ZN4absl12lts_2026081719str_format_internal14ArgumentToConvIiEENS0_23FormatConversionCharSetEv:
  418|  17.0k|constexpr FormatConversionCharSet ArgumentToConv() {
  419|  17.0k|  using ConvResult = decltype(str_format_internal::FormatConvertImpl(
  420|  17.0k|      std::declval<const Arg&>(),
  421|  17.0k|      std::declval<const FormatConversionSpecImpl&>(),
  422|  17.0k|      std::declval<FormatSinkImpl*>()));
  423|  17.0k|  return absl::str_format_internal::ExtractCharSet(ConvResult{});
  424|  17.0k|}
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl7ManagerIiLNS2_13StoragePolicyE2EE5ValueENS2_4DataE:
  535|  17.0k|    static T Value(Data arg) {
  536|  17.0k|      T value;
  537|  17.0k|      memcpy(&value, arg.buf, sizeof(T));
  538|  17.0k|      return value;
  539|  17.0k|    }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl8DispatchIcEEbNS2_4DataENS1_24FormatConversionSpecImplEPv:
  584|  5.60k|  static bool Dispatch(Data arg, FormatConversionSpecImpl spec, void* out) {
  585|       |    // A `none` conv indicates that we want the `int` conversion.
  586|  5.60k|    if (ABSL_PREDICT_FALSE(spec.conversion_char() ==
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
  587|  5.60k|                           FormatConversionCharInternal::kNone)) {
  588|      0|      return ToInt<T>(arg, static_cast<int*>(out), std::is_integral<T>(),
  589|      0|                      std::is_enum<T>());
  590|      0|    }
  591|  5.60k|    if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
  592|  5.60k|            !Contains(ArgumentToConv<T>(), spec.conversion_char()))) {
  593|      0|      return false;
  594|      0|    }
  595|  5.60k|    return str_format_internal::FormatConvertImpl(
  596|  5.60k|               Manager<T>::Value(arg), spec, static_cast<FormatSinkImpl*>(out))
  597|  5.60k|        .value;
  598|  5.60k|  }
_ZN4absl12lts_2026081719str_format_internal14ArgumentToConvIcEENS0_23FormatConversionCharSetEv:
  418|  5.60k|constexpr FormatConversionCharSet ArgumentToConv() {
  419|  5.60k|  using ConvResult = decltype(str_format_internal::FormatConvertImpl(
  420|  5.60k|      std::declval<const Arg&>(),
  421|  5.60k|      std::declval<const FormatConversionSpecImpl&>(),
  422|  5.60k|      std::declval<FormatSinkImpl*>()));
  423|  5.60k|  return absl::str_format_internal::ExtractCharSet(ConvResult{});
  424|  5.60k|}
_ZN4absl12lts_2026081719str_format_internal14ExtractCharSetILNS0_23FormatConversionCharSetE131067EEES3_NS1_16ArgConvertResultIXT_EEE:
  205|  5.60k|constexpr FormatConversionCharSet ExtractCharSet(ArgConvertResult<C>) {
  206|  5.60k|  return C;
  207|  5.60k|}
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl7ManagerIcLNS2_13StoragePolicyE2EE5ValueENS2_4DataE:
  535|  5.60k|    static T Value(Data arg) {
  536|  5.60k|      T value;
  537|  5.60k|      memcpy(&value, arg.buf, sizeof(T));
  538|  5.60k|      return value;
  539|  5.60k|    }
_ZN4absl12lts_2026081719str_format_internal19FormatArgImplFriend7ConvertINS1_13FormatArgImplEEEbT_NS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  407|  22.6k|                      FormatSinkImpl* out) {
  408|  22.6k|    return arg.dispatcher_(arg.data_, conv, out);
  409|  22.6k|  }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImplC2IcEERKT_:
  490|  5.60k|  explicit FormatArgImpl(const T& value) {
  491|  5.60k|    using D = typename DecayType<T>::type;
  492|  5.60k|    static_assert(
  493|  5.60k|        std::is_same_v<D, const T&> || storage_policy<D>::value == ByValue,
  494|  5.60k|        "Decayed types must be stored by value");
  495|  5.60k|    Init(static_cast<D>(value));
  496|  5.60k|  }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl4InitIcEEvRKT_:
  543|  5.60k|  void Init(const T& value) {
  544|  5.60k|    data_ = Manager<T>::SetValue(value);
  545|  5.60k|    dispatcher_ = &Dispatch<T>;
  546|  5.60k|  }
_ZN4absl12lts_2026081719str_format_internal13FormatArgImpl7ManagerIcLNS2_13StoragePolicyE2EE8SetValueERKc:
  529|  5.60k|    static Data SetValue(const T& value) {
  530|  5.60k|      Data data;
  531|  5.60k|      memcpy(data.buf, &value, sizeof(value));
  532|  5.60k|      return data;
  533|  5.60k|    }

_ZN4absl12lts_2026081719str_format_internal13FormatUntypedENS1_17FormatRawSinkImplENS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEE:
  214|  5.85k|                   absl::Span<const FormatArgImpl> args) {
  215|  5.85k|  FormatSinkImpl sink(raw_sink);
  216|  5.85k|  using Converter = DefaultConverter;
  217|  5.85k|  return ConvertAll(format, args, Converter(&sink));
  218|  5.85k|}
_ZN4absl12lts_2026081719str_format_internal10FormatPackENS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEE:
  235|    256|                       absl::Span<const FormatArgImpl> args) {
  236|    256|  std::string out;
  237|    256|  if (ABSL_PREDICT_FALSE(!FormatUntyped(&out, format, args))) {
  ------------------
  |  |  190|    256|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 256]
  |  |  |  Branch (190:49): [Folded, False: 256]
  |  |  |  Branch (190:58): [True: 0, False: 256]
  |  |  ------------------
  ------------------
  238|      0|    out.clear();
  239|      0|  }
  240|    256|  return out;
  241|    256|}
_ZN4absl12lts_2026081719str_format_internal8SnprintFEPcmNS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEE:
  262|  5.60k|             absl::Span<const FormatArgImpl> args) {
  263|  5.60k|  BufferRawSink sink(output, size ? size - 1 : 0);
  ------------------
  |  Branch (263:30): [True: 5.60k, False: 0]
  ------------------
  264|  5.60k|  if (!FormatUntyped(&sink, format, args)) {
  ------------------
  |  Branch (264:7): [True: 0, False: 5.60k]
  ------------------
  265|      0|    errno = EINVAL;
  266|      0|    return -1;
  267|      0|  }
  268|  5.60k|  size_t total = sink.total_written();
  269|  5.60k|  if (size) output[std::min(total, size - 1)] = 0;
  ------------------
  |  Branch (269:7): [True: 5.60k, False: 0]
  ------------------
  270|  5.60k|  return static_cast<int>(total);
  271|  5.60k|}
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_110ArgContextC2ENS0_4SpanIKNS1_13FormatArgImplEEE:
   55|  5.85k|  explicit ArgContext(absl::Span<const FormatArgImpl> pack) : pack_(pack) {}
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_110ArgContext4BindEPKNS1_17UnboundConversionEPNS1_15BoundConversionE:
   70|  22.6k|                             BoundConversion* bound) {
   71|  22.6k|  const FormatArgImpl* arg = nullptr;
   72|  22.6k|  int arg_position = unbound->arg_position;
   73|  22.6k|  if (static_cast<size_t>(arg_position - 1) >= pack_.size()) return false;
  ------------------
  |  Branch (73:7): [True: 0, False: 22.6k]
  ------------------
   74|  22.6k|  arg = &pack_[static_cast<size_t>(arg_position - 1)];  // 1-based
   75|       |
   76|  22.6k|  if (unbound->flags != Flags::kBasic) {
  ------------------
  |  Branch (76:7): [True: 17.0k, False: 5.60k]
  ------------------
   77|  17.0k|    int width = unbound->width.value();
   78|  17.0k|    bool force_left = false;
   79|  17.0k|    if (unbound->width.is_from_arg()) {
  ------------------
  |  Branch (79:9): [True: 0, False: 17.0k]
  ------------------
   80|      0|      if (!BindFromPosition(unbound->width.get_from_arg(), &width, pack_))
  ------------------
  |  Branch (80:11): [True: 0, False: 0]
  ------------------
   81|      0|        return false;
   82|      0|      if (width < 0) {
  ------------------
  |  Branch (82:11): [True: 0, False: 0]
  ------------------
   83|       |        // "A negative field width is taken as a '-' flag followed by a
   84|       |        // positive field width."
   85|      0|        force_left = true;
   86|       |        // Make sure we don't overflow the width when negating it.
   87|      0|        width = -std::max(width, -std::numeric_limits<int>::max());
   88|      0|      }
   89|      0|    }
   90|       |
   91|  17.0k|    int precision = unbound->precision.value();
   92|  17.0k|    if (unbound->precision.is_from_arg()) {
  ------------------
  |  Branch (92:9): [True: 0, False: 17.0k]
  ------------------
   93|      0|      if (!BindFromPosition(unbound->precision.get_from_arg(), &precision,
  ------------------
  |  Branch (93:11): [True: 0, False: 0]
  ------------------
   94|      0|                            pack_))
   95|      0|        return false;
   96|      0|    }
   97|       |
   98|  17.0k|    FormatConversionSpecImplFriend::SetWidth(width, bound);
   99|  17.0k|    FormatConversionSpecImplFriend::SetPrecision(precision, bound);
  100|       |
  101|  17.0k|    if (force_left) {
  ------------------
  |  Branch (101:9): [True: 0, False: 17.0k]
  ------------------
  102|      0|      FormatConversionSpecImplFriend::SetFlags(unbound->flags | Flags::kLeft,
  103|      0|                                               bound);
  104|  17.0k|    } else {
  105|  17.0k|      FormatConversionSpecImplFriend::SetFlags(unbound->flags, bound);
  106|  17.0k|    }
  107|       |
  108|  17.0k|    FormatConversionSpecImplFriend::SetLengthMod(unbound->length_mod, bound);
  109|  17.0k|  } else {
  110|  5.60k|    FormatConversionSpecImplFriend::SetFlags(unbound->flags, bound);
  111|  5.60k|    FormatConversionSpecImplFriend::SetWidth(-1, bound);
  112|  5.60k|    FormatConversionSpecImplFriend::SetPrecision(-1, bound);
  113|  5.60k|  }
  114|  22.6k|  FormatConversionSpecImplFriend::SetConversionChar(unbound->conv, bound);
  115|  22.6k|  bound->set_arg(arg);
  116|  22.6k|  return true;
  117|  22.6k|}
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_116DefaultConverterC2EPNS1_14FormatSinkImplE:
  154|  5.85k|  explicit DefaultConverter(FormatSinkImpl* sink) : sink_(sink) {}
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_110ConvertAllINS2_16DefaultConverterEEEbNS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEET_:
  142|  5.85k|                absl::Span<const FormatArgImpl> args, Converter converter) {
  143|  5.85k|  if (format.has_parsed_conversion()) {
  ------------------
  |  Branch (143:7): [True: 0, False: 5.85k]
  ------------------
  144|      0|    return format.parsed_conversion()->ProcessFormat(
  145|      0|        ConverterConsumer<Converter>(converter, args));
  146|  5.85k|  } else {
  147|  5.85k|    return ParseFormatString(format.str(),
  148|  5.85k|                             ConverterConsumer<Converter>(converter, args));
  149|  5.85k|  }
  150|  5.85k|}
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_117ConverterConsumerINS2_16DefaultConverterEE10ConvertOneERKNS1_17UnboundConversionENSt3__117basic_string_viewIcNS9_11char_traitsIcEEEE:
  129|  22.6k|  bool ConvertOne(const UnboundConversion& conv, string_view conv_string) {
  130|  22.6k|    BoundConversion bound;
  131|  22.6k|    if (!arg_context_.Bind(&conv, &bound)) return false;
  ------------------
  |  Branch (131:9): [True: 0, False: 22.6k]
  ------------------
  132|  22.6k|    return converter_.ConvertOne(bound, conv_string);
  133|  22.6k|  }
bind.cc:_ZNK4absl12lts_2026081719str_format_internal12_GLOBAL__N_116DefaultConverter10ConvertOneERKNS1_15BoundConversionENSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE:
  158|  22.6k|  bool ConvertOne(const BoundConversion& bound, string_view /*conv*/) const {
  159|  22.6k|    return FormatArgImplFriend::Convert(*bound.arg(), bound, sink_);
  160|  22.6k|  }
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_117ConverterConsumerINS2_16DefaultConverterEE6AppendENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
  125|  28.5k|  bool Append(string_view s) {
  126|  28.5k|    converter_.Append(s);
  127|  28.5k|    return true;
  128|  28.5k|  }
bind.cc:_ZNK4absl12lts_2026081719str_format_internal12_GLOBAL__N_116DefaultConverter6AppendENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  156|  28.5k|  void Append(string_view s) const { sink_->Append(s); }
bind.cc:_ZN4absl12lts_2026081719str_format_internal12_GLOBAL__N_117ConverterConsumerINS2_16DefaultConverterEEC2ES4_NS0_4SpanIKNS1_13FormatArgImplEEE:
  123|  5.85k|      : converter_(converter), arg_context_(pack) {}

_ZNK4absl12lts_2026081719str_format_internal15BoundConversion3argEv:
   43|  22.6k|  const FormatArgImpl* arg() const { return arg_; }
_ZN4absl12lts_2026081719str_format_internal15BoundConversion7set_argEPKNS1_13FormatArgImplE:
   44|  22.6k|  void set_arg(const FormatArgImpl* a) { arg_ = a; }
_ZN4absl12lts_2026081719str_format_internal21UntypedFormatSpecImplC2ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   56|  5.85k|      : data_(s.data()), size_(s.size()) {}
_ZNK4absl12lts_2026081719str_format_internal21UntypedFormatSpecImpl21has_parsed_conversionEv:
   61|  5.85k|  bool has_parsed_conversion() const { return size_ == ~size_t{}; }
_ZNK4absl12lts_2026081719str_format_internal21UntypedFormatSpecImpl3strEv:
   63|  5.85k|  string_view str() const {
   64|       |    assert(!has_parsed_conversion());
   65|  5.85k|    return string_view(static_cast<const char*>(data_), size_);
   66|  5.85k|  }
_ZN4absl12lts_2026081719str_format_internal21UntypedFormatSpecImpl7ExtractINS1_18FormatSpecTemplateIJLNS0_23FormatConversionCharSetE655355EEEEEERKS2_RKT_:
   73|    256|  static const UntypedFormatSpecImpl& Extract(const T& s) {
   74|    256|    return s.spec_;
   75|    256|  }
_ZN4absl12lts_2026081719str_format_internal18FormatSpecTemplateIJLNS0_23FormatConversionCharSetE655355EEEC2EUa9enable_ifIXclL_ZNS1_15ValidFormatImplIJLS3_655355EEEEbNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEfL0p_EEEPKc:
  159|    256|      : Base(s) {}
_ZN4absl12lts_2026081719str_format_internal21UntypedFormatSpecImpl7ExtractINS1_18FormatSpecTemplateIJLNS0_23FormatConversionCharSetE131067ELS5_655355ELS5_655355ELS5_655355EEEEEERKS2_RKT_:
   73|  5.60k|  static const UntypedFormatSpecImpl& Extract(const T& s) {
   74|  5.60k|    return s.spec_;
   75|  5.60k|  }
_ZN4absl12lts_2026081719str_format_internal18FormatSpecTemplateIJLNS0_23FormatConversionCharSetE131067ELS3_655355ELS3_655355ELS3_655355EEEC2EUa9enable_ifIXclL_ZNS1_15ValidFormatImplIJLS3_131067ELS3_655355ELS3_655355ELS3_655355EEEEbNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEfL0p_EEEPKc:
  159|  5.60k|      : Base(s) {}

_ZN4absl12lts_2026081719str_format_internal17UnboundConversionC2Ev:
   36|  22.6k|  UnboundConversion() {}  // NOLINT
_ZN4absl12lts_2026081719str_format_internal17UnboundConversion10InputValue9set_valueEi:
   45|  17.0k|    constexpr void set_value(int value) {
   46|       |      assert(value >= 0);
   47|  17.0k|      value_ = value;
   48|  17.0k|    }
_ZNK4absl12lts_2026081719str_format_internal17UnboundConversion10InputValue5valueEv:
   49|  34.1k|    constexpr int value() const { return value_; }
_ZNK4absl12lts_2026081719str_format_internal17UnboundConversion10InputValue11is_from_argEv:
   60|  34.1k|    constexpr bool is_from_arg() const { return value_ < -1; }
_ZNK4absl12lts_2026081719str_format_internal7ConvTag7is_convEv:
   94|  39.7k|  constexpr bool is_conv() const { return (tag_ & 0x80) == 0; }
_ZNK4absl12lts_2026081719str_format_internal7ConvTag8is_flagsEv:
   96|  11.4k|  constexpr bool is_flags() const { return (tag_ & 0xE0) == 0xC0; }
_ZNK4absl12lts_2026081719str_format_internal7ConvTag7as_convEv:
   98|  22.6k|  constexpr FormatConversionChar as_conv() const {
   99|  22.6k|    assert(is_conv());
  100|  22.6k|    assert(!is_length());
  101|       |    assert(!is_flags());
  102|  22.6k|    return static_cast<FormatConversionChar>(tag_);
  103|  22.6k|  }
_ZNK4absl12lts_2026081719str_format_internal7ConvTag8as_flagsEv:
  110|  11.4k|  constexpr Flags as_flags() const {
  111|  11.4k|    assert(!is_conv());
  112|  11.4k|    assert(!is_length());
  113|       |    assert(is_flags());
  114|  11.4k|    return static_cast<Flags>(tag_ & 0x1F);
  115|  11.4k|  }
_ZN4absl12lts_2026081719str_format_internal17ConsumeConversionILb0EEEPKcS4_S4_PNS1_17UnboundConversionEPi:
  216|  17.0k|                                        int* next_arg) {
  217|  17.0k|  const char* const original_pos = pos;
  218|  17.0k|  char c = 0;
  219|       |  // Read the next char into `c` and update `pos`. Returns false if there are
  220|       |  // no more chars to read.
  221|  17.0k|#define ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR()          \
  222|  17.0k|  do {                                                  \
  223|  17.0k|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  224|  17.0k|    c = *pos++;                                         \
  225|  17.0k|  } while (0)
  226|       |
  227|  17.0k|  if (is_positional) {
  ------------------
  |  Branch (227:7): [Folded, False: 17.0k]
  ------------------
  228|      0|    ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  229|      0|    if (ABSL_PREDICT_FALSE(c < '1' || c > '9')) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  230|      0|    conv->arg_position = ParseDigits(c, pos, end);
  231|      0|    assert(conv->arg_position > 0);
  232|      0|    if (ABSL_PREDICT_FALSE(c != '$')) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  233|      0|  }
  234|       |
  235|  17.0k|  ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|  17.0k|  do {                                                  \
  |  |  223|  17.0k|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|  17.0k|    c = *pos++;                                         \
  |  |  225|  17.0k|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 17.0k]
  |  |  ------------------
  ------------------
  236|       |
  237|       |  // We should start with the basic flag on.
  238|  17.0k|  assert(conv->flags == Flags::kBasic);
  239|       |
  240|       |  // Any non alpha character makes this conversion not basic.
  241|       |  // This includes flags (-+ #0), width (1-9, *) or precision (.).
  242|       |  // All conversion characters and length modifiers are alpha characters.
  243|  17.0k|  if (c < 'A') {
  ------------------
  |  Branch (243:7): [True: 17.0k, False: 0]
  ------------------
  244|  28.5k|    while (c <= '0') {
  ------------------
  |  Branch (244:12): [True: 11.4k, False: 17.0k]
  ------------------
  245|  11.4k|      auto tag = GetTagForChar(c);
  246|  11.4k|      if (tag.is_flags()) {
  ------------------
  |  Branch (246:11): [True: 11.4k, False: 0]
  ------------------
  247|  11.4k|        conv->flags = conv->flags | tag.as_flags();
  248|  11.4k|        ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|  11.4k|  do {                                                  \
  |  |  223|  11.4k|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|  11.4k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 11.4k]
  |  |  |  |  |  Branch (190:49): [Folded, False: 11.4k]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 11.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|  11.4k|    c = *pos++;                                         \
  |  |  225|  11.4k|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 11.4k]
  |  |  ------------------
  ------------------
  249|  11.4k|      } else {
  250|      0|        break;
  251|      0|      }
  252|  11.4k|    }
  253|       |
  254|  17.0k|    if (c <= '9') {
  ------------------
  |  Branch (254:9): [True: 17.0k, False: 0]
  ------------------
  255|  17.0k|      if (c >= '0') {
  ------------------
  |  Branch (255:11): [True: 17.0k, False: 0]
  ------------------
  256|  17.0k|        int maybe_width = ParseDigits(c, pos, end);
  257|  17.0k|        if (!is_positional && c == '$') {
  ------------------
  |  Branch (257:13): [True: 17.0k, Folded]
  |  Branch (257:31): [True: 0, False: 17.0k]
  ------------------
  258|      0|          if (ABSL_PREDICT_FALSE(*next_arg != 0)) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  259|       |          // Positional conversion.
  260|      0|          *next_arg = -1;
  261|      0|          return ConsumeConversion<true>(original_pos, end, conv, next_arg);
  262|      0|        }
  263|  17.0k|        conv->flags = conv->flags | Flags::kNonBasic;
  264|  17.0k|        conv->width.set_value(maybe_width);
  265|  17.0k|      } else if (c == '*') {
  ------------------
  |  Branch (265:18): [True: 0, False: 0]
  ------------------
  266|      0|        conv->flags = conv->flags | Flags::kNonBasic;
  267|      0|        ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  268|      0|        if (is_positional) {
  ------------------
  |  Branch (268:13): [Folded, False: 0]
  ------------------
  269|      0|          if (ABSL_PREDICT_FALSE(c < '1' || c > '9')) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  270|      0|          conv->width.set_from_arg(ParseDigits(c, pos, end));
  271|      0|          if (ABSL_PREDICT_FALSE(c != '$')) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  272|      0|          ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  273|      0|        } else {
  274|      0|          conv->width.set_from_arg(++*next_arg);
  275|      0|        }
  276|      0|      }
  277|  17.0k|    }
  278|       |
  279|  17.0k|    if (c == '.') {
  ------------------
  |  Branch (279:9): [True: 0, False: 17.0k]
  ------------------
  280|      0|      conv->flags = conv->flags | Flags::kNonBasic;
  281|      0|      ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  282|      0|      if ('0' <= c && c <= '9') {
  ------------------
  |  Branch (282:11): [True: 0, False: 0]
  |  Branch (282:23): [True: 0, False: 0]
  ------------------
  283|      0|        conv->precision.set_value(ParseDigits(c, pos, end));
  284|      0|      } else if (c == '*') {
  ------------------
  |  Branch (284:18): [True: 0, False: 0]
  ------------------
  285|      0|        ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  286|      0|        if (is_positional) {
  ------------------
  |  Branch (286:13): [Folded, False: 0]
  ------------------
  287|      0|          if (ABSL_PREDICT_FALSE(c < '1' || c > '9')) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  288|      0|          conv->precision.set_from_arg(ParseDigits(c, pos, end));
  289|      0|          if (c != '$') return nullptr;
  ------------------
  |  Branch (289:15): [True: 0, False: 0]
  ------------------
  290|      0|          ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  291|      0|        } else {
  292|      0|          conv->precision.set_from_arg(++*next_arg);
  293|      0|        }
  294|      0|      } else {
  295|      0|        conv->precision.set_value(0);
  296|      0|      }
  297|      0|    }
  298|  17.0k|  }
  299|       |
  300|  17.0k|  auto tag = GetTagForChar(c);
  301|       |
  302|  17.0k|  if (ABSL_PREDICT_FALSE(c == 'v' && conv->flags != Flags::kBasic)) {
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:59): [True: 0, False: 17.0k]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  303|      0|    return nullptr;
  304|      0|  }
  305|       |
  306|  17.0k|  if (ABSL_PREDICT_FALSE(!tag.is_conv())) {
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
  307|      0|    if (ABSL_PREDICT_FALSE(!tag.is_length())) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  308|       |
  309|       |    // It is a length modifier.
  310|      0|    LengthMod length_mod = tag.as_length();
  311|      0|    ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  312|      0|    if (c == 'h' && length_mod == LengthMod::h) {
  ------------------
  |  Branch (312:9): [True: 0, False: 0]
  |  Branch (312:21): [True: 0, False: 0]
  ------------------
  313|      0|      conv->length_mod = LengthMod::hh;
  314|      0|      ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  315|      0|    } else if (c == 'l' && length_mod == LengthMod::l) {
  ------------------
  |  Branch (315:16): [True: 0, False: 0]
  |  Branch (315:28): [True: 0, False: 0]
  ------------------
  316|      0|      conv->length_mod = LengthMod::ll;
  317|      0|      ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  318|      0|    } else {
  319|      0|      conv->length_mod = length_mod;
  320|      0|    }
  321|      0|    tag = GetTagForChar(c);
  322|       |
  323|      0|    if (ABSL_PREDICT_FALSE(c == 'v')) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  324|      0|    if (ABSL_PREDICT_FALSE(!tag.is_conv())) return nullptr;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  325|       |
  326|       |    // `wchar_t` args are marked non-basic so `Bind()` will copy the length mod.
  327|      0|    if (conv->length_mod == LengthMod::l && c == 'c') {
  ------------------
  |  Branch (327:9): [True: 0, False: 0]
  |  Branch (327:45): [True: 0, False: 0]
  ------------------
  328|      0|      conv->flags = conv->flags | Flags::kNonBasic;
  329|      0|    }
  330|      0|  }
  331|  17.0k|#undef ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR
  332|       |
  333|  17.0k|  assert(CheckFastPathSetting(*conv));
  334|  17.0k|  (void)(&CheckFastPathSetting);
  335|       |
  336|  17.0k|  conv->conv = tag.as_conv();
  337|  17.0k|  if (!is_positional) conv->arg_position = ++*next_arg;
  ------------------
  |  Branch (337:7): [True: 17.0k, Folded]
  ------------------
  338|  17.0k|  return pos;
  339|  17.0k|}
_ZN4absl12lts_2026081719str_format_internal13GetTagForCharEc:
  169|  51.1k|constexpr ConvTag GetTagForChar(char c) {
  170|  51.1k|  return ConvTagHolder::value[static_cast<unsigned char>(c)];
  171|  51.1k|}
_ZN4absl12lts_2026081719str_format_internal11ParseDigitsERcRPKcS4_:
  196|  17.0k|constexpr int ParseDigits(char& c, const char*& pos, const char* const end) {
  197|  17.0k|  int digits = c - '0';
  198|       |  // We do not want to overflow `digits` so we consume at most digits10
  199|       |  // digits. If there are more digits the parsing will fail later on when the
  200|       |  // digit doesn't match the expected characters.
  201|  17.0k|  int num_digits = std::numeric_limits<int>::digits10;
  202|  17.0k|  for (;;) {
  203|  17.0k|    if (ABSL_PREDICT_FALSE(pos == end)) break;
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
  204|  17.0k|    c = *pos++;
  205|  17.0k|    if ('0' > c || c > '9') break;
  ------------------
  |  Branch (205:9): [True: 0, False: 17.0k]
  |  Branch (205:20): [True: 17.0k, False: 0]
  ------------------
  206|      0|    --num_digits;
  207|      0|    if (ABSL_PREDICT_FALSE(!num_digits)) break;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  208|      0|    digits = 10 * digits + c - '0';
  209|      0|  }
  210|  17.0k|  return digits;
  211|  17.0k|}
_ZN4absl12lts_2026081719str_format_internal24ConsumeUnboundConversionEPKcS3_PNS1_17UnboundConversionEPi:
  348|  17.0k|                                               int* next_arg) {
  349|  17.0k|  if (*next_arg < 0) return ConsumeConversion<true>(p, end, conv, next_arg);
  ------------------
  |  Branch (349:7): [True: 0, False: 17.0k]
  ------------------
  350|  17.0k|  return ConsumeConversion<false>(p, end, conv, next_arg);
  351|  17.0k|}

_ZN4absl12lts_2026081719str_format_internal17FormatRawSinkImpl5WriteENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   48|  5.85k|  void Write(string_view s) { write_(sink_, s); }
_ZN4absl12lts_2026081719str_format_internal14FormatSinkImplC2ENS1_17FormatRawSinkImplE:
   68|  5.85k|  explicit FormatSinkImpl(FormatRawSinkImpl raw) : raw_(raw) {}
_ZN4absl12lts_2026081719str_format_internal14FormatSinkImplD2Ev:
   70|  5.85k|  ~FormatSinkImpl() { Flush(); }
_ZN4absl12lts_2026081719str_format_internal14FormatSinkImpl5FlushEv:
   72|  5.85k|  void Flush() {
   73|  5.85k|    raw_.Write(string_view(buf_, static_cast<size_t>(pos_ - buf_)));
   74|  5.85k|    pos_ = buf_;
   75|  5.85k|  }
_ZN4absl12lts_2026081719str_format_internal14FormatSinkImpl6AppendEmc:
   77|  62.4k|  void Append(size_t n, char c) {
   78|  62.4k|    if (n == 0) return;
  ------------------
  |  Branch (78:9): [True: 50.5k, False: 11.8k]
  ------------------
   79|  11.8k|    size_ += n;
   80|  11.8k|    auto raw_append = [&](size_t count) {
   81|  11.8k|      memset(pos_, c, count);
   82|  11.8k|      pos_ += count;
   83|  11.8k|    };
   84|  11.8k|    while (n > Avail()) {
  ------------------
  |  Branch (84:12): [True: 0, False: 11.8k]
  ------------------
   85|      0|      n -= Avail();
   86|      0|      if (Avail() > 0) {
  ------------------
  |  Branch (86:11): [True: 0, False: 0]
  ------------------
   87|      0|        raw_append(Avail());
   88|      0|      }
   89|      0|      Flush();
   90|      0|    }
   91|  11.8k|    raw_append(n);
   92|  11.8k|  }
_ZN4absl12lts_2026081719str_format_internal14FormatSinkImpl6AppendENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   94|  79.7k|  void Append(string_view v) {
   95|  79.7k|    size_t n = v.size();
   96|  79.7k|    if (n == 0) return;
  ------------------
  |  Branch (96:9): [True: 39.7k, False: 39.9k]
  ------------------
   97|  39.9k|    size_ += n;
   98|  39.9k|    if (n >= Avail()) {
  ------------------
  |  Branch (98:9): [True: 0, False: 39.9k]
  ------------------
   99|      0|      Flush();
  100|      0|      raw_.Write(v);
  101|      0|      return;
  102|      0|    }
  103|  39.9k|    memcpy(pos_, v.data(), n);
  104|  39.9k|    pos_ += n;
  105|  39.9k|  }
_ZNK4absl12lts_2026081719str_format_internal14FormatSinkImpl5AvailEv:
  123|  51.8k|  size_t Avail() const {
  124|  51.8k|    return static_cast<size_t>(buf_ + sizeof(buf_) - pos_);
  125|  51.8k|  }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl8is_basicEv:
  277|  17.0k|  bool is_basic() const { return flags_ == Flags::kBasic; }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl13has_left_flagEv:
  278|  45.3k|  bool has_left_flag() const { return FlagsContains(flags_, Flags::kLeft); }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl17has_show_pos_flagEv:
  279|  16.8k|  bool has_show_pos_flag() const {
  280|  16.8k|    return FlagsContains(flags_, Flags::kShowPos);
  281|  16.8k|  }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl17has_sign_col_flagEv:
  282|  16.8k|  bool has_sign_col_flag() const {
  283|  16.8k|    return FlagsContains(flags_, Flags::kSignCol);
  284|  16.8k|  }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl12has_alt_flagEv:
  285|  34.1k|  bool has_alt_flag() const { return FlagsContains(flags_, Flags::kAlt); }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl13has_zero_flagEv:
  286|  17.0k|  bool has_zero_flag() const { return FlagsContains(flags_, Flags::kZero); }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl10length_modEv:
  288|  5.60k|  LengthMod length_mod() const { return length_mod_; }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl15conversion_charEv:
  290|   153k|  FormatConversionChar conversion_char() const {
  291|       |    // Keep this field first in the struct . It generates better code when
  292|       |    // accessing it when ConversionSpec is passed by value in registers.
  293|   153k|    static_assert(offsetof(FormatConversionSpecImpl, conv_) == 0, "");
  294|   153k|    return conv_;
  295|   153k|  }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl5widthEv:
  301|  39.7k|  int width() const { return width_; }
_ZNK4absl12lts_2026081719str_format_internal24FormatConversionSpecImpl9precisionEv:
  304|  17.0k|  int precision() const { return precision_; }
_ZN4absl12lts_2026081719str_format_internal30FormatConversionSpecImplFriend8SetFlagsENS1_5FlagsEPNS1_24FormatConversionSpecImplE:
  321|  22.6k|  static void SetFlags(Flags f, FormatConversionSpecImpl* conv) {
  322|  22.6k|    conv->flags_ = f;
  323|  22.6k|  }
_ZN4absl12lts_2026081719str_format_internal30FormatConversionSpecImplFriend12SetLengthModENS0_9LengthModEPNS1_24FormatConversionSpecImplE:
  324|  17.0k|  static void SetLengthMod(LengthMod l, FormatConversionSpecImpl* conv) {
  325|  17.0k|    conv->length_mod_ = l;
  326|  17.0k|  }
_ZN4absl12lts_2026081719str_format_internal30FormatConversionSpecImplFriend17SetConversionCharENS0_20FormatConversionCharEPNS1_24FormatConversionSpecImplE:
  328|  22.6k|                                FormatConversionSpecImpl* conv) {
  329|  22.6k|    conv->conv_ = c;
  330|  22.6k|  }
_ZN4absl12lts_2026081719str_format_internal30FormatConversionSpecImplFriend8SetWidthEiPNS1_24FormatConversionSpecImplE:
  331|  22.6k|  static void SetWidth(int w, FormatConversionSpecImpl* conv) {
  332|  22.6k|    conv->width_ = w;
  333|  22.6k|  }
_ZN4absl12lts_2026081719str_format_internal30FormatConversionSpecImplFriend12SetPrecisionEiPNS1_24FormatConversionSpecImplE:
  334|  22.6k|  static void SetPrecision(int p, FormatConversionSpecImpl* conv) {
  335|  22.6k|    conv->precision_ = p;
  336|  22.6k|  }
_ZN4absl12lts_2026081719str_format_internalorENS1_5FlagsES2_:
  146|  28.5k|constexpr Flags operator|(Flags a, Flags b) {
  147|  28.5k|  return static_cast<Flags>(static_cast<uint8_t>(a) | static_cast<uint8_t>(b));
  148|  28.5k|}
_ZN4absl12lts_2026081719str_format_internal13FlagsContainsENS1_5FlagsES2_:
  150|   130k|constexpr bool FlagsContains(Flags haystack, Flags needle) {
  151|   130k|  return (static_cast<uint8_t>(haystack) & static_cast<uint8_t>(needle)) ==
  152|   130k|         static_cast<uint8_t>(needle);
  153|   130k|}
_ZN4absl12lts_2026081719str_format_internal29FormatConversionCharToConvIntENS0_20FormatConversionCharE:
  360|  22.6k|constexpr uint64_t FormatConversionCharToConvInt(FormatConversionChar c) {
  361|  22.6k|  return uint64_t{1} << (1 + static_cast<uint8_t>(c));
  362|  22.6k|}
_ZN4absl12lts_2026081719str_format_internal8ContainsENS0_23FormatConversionCharSetENS0_20FormatConversionCharE:
  442|  22.6k|constexpr bool Contains(FormatConversionCharSet set, FormatConversionChar c) {
  443|  22.6k|  return (static_cast<uint64_t>(set) & FormatConversionCharToConvInt(c)) != 0;
  444|  22.6k|}
_ZN4absl12lts_2026081719str_format_internal6ExcessEmm:
  447|  90.9k|inline size_t Excess(size_t used, size_t capacity) {
  448|  90.9k|  return used < capacity ? capacity - used : 0;
  ------------------
  |  Branch (448:10): [True: 24.9k, False: 65.9k]
  ------------------
  449|  90.9k|}
_ZZN4absl12lts_2026081719str_format_internal14FormatSinkImpl6AppendEmcENKUlmE_clEm:
   80|  11.8k|    auto raw_append = [&](size_t count) {
   81|  11.8k|      memset(pos_, c, count);
   82|  11.8k|      pos_ += count;
   83|  11.8k|    };
_ZN4absl12lts_2026081719str_format_internal17FormatRawSinkImplC2INSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEETnPDTclsr19str_format_internalE11InvokeFlushclsr3stdE7declvalIPT_EEcvNS4_17basic_string_viewIcS7_EE_EEELPv0EEESC_:
   46|    256|      : sink_(raw), write_(&FormatRawSinkImpl::Flush<T>) {}
_ZN4absl12lts_2026081719str_format_internal17FormatRawSinkImpl5FlushINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEvPvNS4_17basic_string_viewIcS7_EE:
   57|    256|  static void Flush(void* r, string_view s) {
   58|    256|    str_format_internal::InvokeFlush(static_cast<T*>(r), s);
   59|    256|  }
_ZN4absl12lts_2026081719str_format_internal17FormatRawSinkImplC2INS1_13BufferRawSinkETnPDTclsr19str_format_internalE11InvokeFlushclsr3stdE7declvalIPT_EEcvNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE_EEELPv0EEES6_:
   46|  5.60k|      : sink_(raw), write_(&FormatRawSinkImpl::Flush<T>) {}
_ZN4absl12lts_2026081719str_format_internal17FormatRawSinkImpl5FlushINS1_13BufferRawSinkEEEvPvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
   57|  5.60k|  static void Flush(void* r, string_view s) {
   58|  5.60k|    str_format_internal::InvokeFlush(static_cast<T*>(r), s);
   59|  5.60k|  }

_ZN4absl12lts_2026081719str_format_internal13BufferRawSink5WriteENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   34|  5.60k|void BufferRawSink::Write(string_view v) {
   35|  5.60k|  size_t to_write = std::min(v.size(), size_);
   36|  5.60k|  if (to_write > 0) {
  ------------------
  |  Branch (36:7): [True: 5.60k, False: 0]
  ------------------
   37|  5.60k|    std::memcpy(buffer_, v.data(), to_write);
   38|  5.60k|    buffer_ += to_write;
   39|  5.60k|    size_ -= to_write;
   40|  5.60k|  }
   41|  5.60k|  total_written_ += v.size();
   42|  5.60k|}

_ZN4absl12lts_2026081719str_format_internal13BufferRawSinkC2EPcm:
   41|  5.60k|  BufferRawSink(char* buffer, size_t size) : buffer_(buffer), size_(size) {}
_ZNK4absl12lts_2026081719str_format_internal13BufferRawSink13total_writtenEv:
   43|  5.60k|  size_t total_written() const { return total_written_; }
_ZN4absl12lts_2026081719str_format_internal15AbslFormatFlushEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS2_17basic_string_viewIcS5_EE:
   71|    256|inline void AbslFormatFlush(std::string* out, string_view s) {
   72|    256|  out->append(s.data(), s.size());
   73|    256|}
_ZN4absl12lts_2026081719str_format_internal15AbslFormatFlushEPNS1_13BufferRawSinkENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
   82|  5.60k|inline void AbslFormatFlush(BufferRawSink* sink, string_view v) {
   83|  5.60k|  sink->Write(v);
   84|  5.60k|}
_ZN4absl12lts_2026081719str_format_internal11InvokeFlushINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEDTcl15AbslFormatFlushfp_fp0_EEPT_NS3_17basic_string_viewIcS6_EE:
   89|    256|auto InvokeFlush(T* out, string_view s) -> decltype(AbslFormatFlush(out, s)) {
   90|    256|  AbslFormatFlush(out, s);
   91|    256|}
_ZN4absl12lts_2026081719str_format_internal11InvokeFlushINS1_13BufferRawSinkEEEDTcl15AbslFormatFlushfp_fp0_EEPT_NSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE:
   89|  5.60k|auto InvokeFlush(T* out, string_view s) -> decltype(AbslFormatFlush(out, s)) {
   90|  5.60k|  AbslFormatFlush(out, s);
   91|  5.60k|}

_ZN4absl12lts_2026081719str_format_internal32ConsumeUnboundConversionNoInlineEPKcS3_PNS1_17UnboundConversionEPi:
   38|  17.0k|    const char* p, const char* end, UnboundConversion* conv, int* next_arg) {
   39|  17.0k|  return ConsumeUnboundConversion(p, end, conv, next_arg);
   40|  17.0k|}

bind.cc:_ZN4absl12lts_2026081719str_format_internal17ParseFormatStringINS1_12_GLOBAL__N_117ConverterConsumerINS3_16DefaultConverterEEEEEbNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEET_:
   57|  5.85k|bool ParseFormatString(string_view src, Consumer consumer) {
   58|  5.85k|  int next_arg = 0;
   59|  5.85k|  const char* p = src.data();
   60|  5.85k|  const char* const end = p + src.size();
   61|  28.5k|  while (p != end) {
  ------------------
  |  Branch (61:10): [True: 28.5k, False: 0]
  ------------------
   62|  28.5k|    const char* percent =
   63|  28.5k|        static_cast<const char*>(memchr(p, '%', static_cast<size_t>(end - p)));
   64|  28.5k|    if (!percent) {
  ------------------
  |  Branch (64:9): [True: 5.85k, False: 22.6k]
  ------------------
   65|       |      // We found the last substring.
   66|  5.85k|      return consumer.Append(string_view(p, static_cast<size_t>(end - p)));
   67|  5.85k|    }
   68|       |    // We found a percent, so push the text run then process the percent.
   69|  22.6k|    if (ABSL_PREDICT_FALSE(!consumer.Append(
  ------------------
  |  |  190|  22.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 22.6k]
  |  |  |  Branch (190:49): [Folded, False: 22.6k]
  |  |  |  Branch (190:58): [True: 0, False: 22.6k]
  |  |  ------------------
  ------------------
   70|  22.6k|            string_view(p, static_cast<size_t>(percent - p))))) {
   71|      0|      return false;
   72|      0|    }
   73|  22.6k|    if (ABSL_PREDICT_FALSE(percent + 1 >= end)) return false;
  ------------------
  |  |  190|  22.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 22.6k]
  |  |  |  Branch (190:49): [Folded, False: 22.6k]
  |  |  |  Branch (190:58): [True: 0, False: 22.6k]
  |  |  ------------------
  ------------------
   74|       |
   75|  22.6k|    auto tag = GetTagForChar(percent[1]);
   76|  22.6k|    if (tag.is_conv()) {
  ------------------
  |  Branch (76:9): [True: 5.60k, False: 17.0k]
  ------------------
   77|  5.60k|      if (ABSL_PREDICT_FALSE(next_arg < 0)) {
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
   78|       |        // This indicates an error in the format string.
   79|       |        // The only way to get `next_arg < 0` here is to have a positional
   80|       |        // argument first which sets next_arg to -1 and then a non-positional
   81|       |        // argument.
   82|      0|        return false;
   83|      0|      }
   84|  5.60k|      p = percent + 2;
   85|       |
   86|       |      // Keep this case separate from the one below.
   87|       |      // ConvertOne is more efficient when the compiler can see that the `basic`
   88|       |      // flag is set.
   89|  5.60k|      UnboundConversion conv;
   90|  5.60k|      conv.conv = tag.as_conv();
   91|  5.60k|      conv.arg_position = ++next_arg;
   92|  5.60k|      if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
   93|  5.60k|              !consumer.ConvertOne(conv, string_view(percent + 1, 1)))) {
   94|      0|        return false;
   95|      0|      }
   96|  17.0k|    } else if (percent[1] != '%') {
  ------------------
  |  Branch (96:16): [True: 17.0k, False: 0]
  ------------------
   97|  17.0k|      UnboundConversion conv;
   98|  17.0k|      p = ConsumeUnboundConversionNoInline(percent + 1, end, &conv, &next_arg);
   99|  17.0k|      if (ABSL_PREDICT_FALSE(p == nullptr)) return false;
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
  100|  17.0k|      if (ABSL_PREDICT_FALSE(!consumer.ConvertOne(
  ------------------
  |  |  190|  17.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.0k]
  |  |  |  Branch (190:49): [Folded, False: 17.0k]
  |  |  |  Branch (190:58): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
  101|  17.0k|              conv, string_view(percent + 1,
  102|  17.0k|                                static_cast<size_t>(p - (percent + 1)))))) {
  103|      0|        return false;
  104|      0|      }
  105|  17.0k|    } else {
  106|      0|      if (ABSL_PREDICT_FALSE(!consumer.Append("%"))) return false;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  107|      0|      p = percent + 2;
  108|      0|      continue;
  109|      0|    }
  110|  22.6k|  }
  111|      0|  return true;
  112|  5.85k|}

_ZN4absl12lts_2026081716strings_internallsIA31_cEERNS1_15StringifyStreamES5_RKT_:
   69|  10.5k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  10.5k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  10.5k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  10.5k|    return stream;
   76|  10.5k|  }
_ZN4absl12lts_2026081716strings_internallsIA2_cEERNS1_15StringifyStreamES5_RKT_:
   69|  10.5k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  10.5k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  10.5k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  10.5k|    return stream;
   76|  10.5k|  }
_ZN4absl12lts_2026081716strings_internallsIiEERNS1_15StringifyStreamES4_RKT_:
   69|  10.5k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  10.5k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  10.5k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  10.5k|    return stream;
   76|  10.5k|  }
_ZN4absl12lts_2026081716strings_internallsIA4_cEERNS1_15StringifyStreamES5_RKT_:
   69|  10.5k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  10.5k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  10.5k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  10.5k|    return stream;
   76|  10.5k|  }
_ZN4absl12lts_2026081716strings_internallsIA66_cEERNS1_15StringifyStreamES5_RKT_:
   69|  4.65k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  4.65k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  4.65k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  4.65k|    return stream;
   76|  4.65k|  }
_ZN4absl12lts_2026081716strings_internallsIA3_cEERNS1_15StringifyStreamES5_RKT_:
   69|  10.5k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  10.5k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  10.5k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  10.5k|    return stream;
   76|  10.5k|  }
_ZN4absl12lts_2026081716strings_internallsIA34_cEERNS1_15StringifyStreamES5_RKT_:
   69|  2.50k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  2.50k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  2.50k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  2.50k|    return stream;
   76|  2.50k|  }
_ZN4absl12lts_2026081716strings_internallsIA33_cEERNS1_15StringifyStreamES5_RKT_:
   69|  3.37k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  3.37k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  3.37k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  3.37k|    return stream;
   76|  3.37k|  }
_ZN4absl12lts_2026081716strings_internallsIA52_cEERNS1_15StringifyStreamES5_RKT_:
   69|  3.37k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  3.37k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  3.37k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  3.37k|    return stream;
   76|  3.37k|  }
_ZN4absl12lts_2026081716strings_internallsIA53_cEERNS1_15StringifyStreamES5_RKT_:
   69|  2.50k|  friend StringifyStream& operator<<(StringifyStream& stream, const T& t) {
   70|  2.50k|    if constexpr (HasStreamInsertion<T>::value) {
   71|  2.50k|      stream.sink_.os << t;
   72|       |    } else {
   73|       |      AbslStringify(stream.sink_, t);
   74|       |    }
   75|  2.50k|    return stream;
   76|  2.50k|  }
_ZN4absl12lts_2026081716strings_internal15StringifyStreamC2ERNSt3__113basic_ostreamIcNS3_11char_traitsIcEEEE:
   64|  10.5k|  explicit StringifyStream(std::ostream& os) : sink_{os} {}

_ZN4absl12lts_2026081710StartsWithENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   59|  6.60M|                                 absl::string_view prefix) noexcept {
   60|  6.60M|  if (prefix.empty()) {
  ------------------
  |  Branch (60:7): [True: 0, False: 6.60M]
  ------------------
   61|      0|    return true;
   62|      0|  }
   63|  6.60M|  if (text.size() < prefix.size()) {
  ------------------
  |  Branch (63:7): [True: 2.42M, False: 4.17M]
  ------------------
   64|  2.42M|    return false;
   65|  2.42M|  }
   66|  4.17M|  absl::string_view possible_match = text.substr(0, prefix.size());
   67|       |
   68|  4.17M|  return possible_match == prefix;
   69|  6.60M|}
_ZN4absl12lts_2026081711StrContainsENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   47|  40.0k|                        absl::string_view needle) noexcept {
   48|  40.0k|  return haystack.find(needle, 0) != haystack.npos;
   49|  40.0k|}
_ZN4absl12lts_202608178EndsWithENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   75|   584M|                               absl::string_view suffix) noexcept {
   76|   584M|  if (suffix.empty()) {
  ------------------
  |  Branch (76:7): [True: 0, False: 584M]
  ------------------
   77|      0|    return true;
   78|      0|  }
   79|   584M|  if (text.size() < suffix.size()) {
  ------------------
  |  Branch (79:7): [True: 70, False: 584M]
  ------------------
   80|     70|    return false;
   81|     70|  }
   82|   584M|  absl::string_view possible_match = text.substr(text.size() - suffix.size());
   83|   584M|  return possible_match == suffix;
   84|   584M|}

_ZN4absl12lts_2026081716numbers_internal15FastIntToBufferEiPc:
  350|  22.4k|    int32_t i, char* absl_nonnull buffer) {
  351|  22.4k|  uint32_t u = static_cast<uint32_t>(i);
  352|  22.4k|  if (i < 0) {
  ------------------
  |  Branch (352:7): [True: 0, False: 22.4k]
  ------------------
  353|      0|    *buffer++ = '-';
  354|       |    // We need to do the negation in modular (i.e., "unsigned")
  355|       |    // arithmetic; MSVC++ apparently warns for plain "-u", so
  356|       |    // we write the equivalent expression "0 - u" instead.
  357|      0|    u = 0 - u;
  358|      0|  }
  359|  22.4k|  buffer = EncodeFullU32(u, buffer);
  360|  22.4k|  *buffer = '\0';
  361|  22.4k|  return buffer;
  362|  22.4k|}
numbers.cc:_ZN4absl12lts_2026081712_GLOBAL__N_113EncodeFullU32EjPc:
  260|  22.4k|    uint32_t n, char* absl_nonnull out_str) {
  261|  22.4k|  if (n < 10) {
  ------------------
  |  Branch (261:7): [True: 0, False: 22.4k]
  ------------------
  262|      0|    *out_str = static_cast<char>('0' + n);
  263|      0|    return out_str + 1;
  264|      0|  }
  265|  22.4k|  if (n < 100'000'000) {
  ------------------
  |  Branch (265:7): [True: 16.8k, False: 5.60k]
  ------------------
  266|  16.8k|    uint64_t bottom = PrepareEightDigits(n);
  267|  16.8k|    ABSL_ASSUME(bottom != 0);
  ------------------
  |  |  272|  16.8k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  268|       |    // 0 minus 8 to make MSVC happy.
  269|  16.8k|    uint32_t zeroes =
  270|  16.8k|        static_cast<uint32_t>(absl::countr_zero(bottom)) & (0 - 8u);
  271|  16.8k|    little_endian::Store64(out_str, (bottom + kEightZeroBytes) >> zeroes);
  272|  16.8k|    return out_str + sizeof(bottom) - zeroes / 8;
  273|  16.8k|  }
  274|  5.60k|  uint32_t div08 = n / 100'000'000;
  275|  5.60k|  uint32_t mod08 = n % 100'000'000;
  276|  5.60k|  uint64_t bottom = PrepareEightDigits(mod08) + kEightZeroBytes;
  277|  5.60k|  out_str = EncodeHundred(div08, out_str);
  278|  5.60k|  little_endian::Store64(out_str, bottom);
  279|  5.60k|  return out_str + sizeof(bottom);
  280|  22.4k|}
numbers.cc:_ZN4absl12lts_2026081712_GLOBAL__N_118PrepareEightDigitsEj:
  231|  22.4k|inline uint64_t PrepareEightDigits(uint32_t i) {
  232|  22.4k|  ABSL_ASSUME(i < 10000'0000);
  ------------------
  |  |  272|  22.4k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  233|       |  // Prepare 2 blocks of 4 digits "in parallel".
  234|  22.4k|  uint32_t hi = i / 10000;
  235|  22.4k|  uint32_t lo = i % 10000;
  236|  22.4k|  uint64_t merged = hi | (uint64_t{lo} << 32);
  237|  22.4k|  uint64_t div100 = ((merged * kDivisionBy100Mul) / kDivisionBy100Div) &
  238|  22.4k|                    ((0x7Full << 32) | 0x7Full);
  239|  22.4k|  uint64_t mod100 = merged - 100ull * div100;
  240|  22.4k|  uint64_t hundreds = (mod100 << 16) + div100;
  241|  22.4k|  uint64_t tens = (hundreds * kDivisionBy10Mul) / kDivisionBy10Div;
  242|  22.4k|  tens &= (0xFull << 48) | (0xFull << 32) | (0xFull << 16) | 0xFull;
  243|  22.4k|  tens += (hundreds - 10ull * tens) << 8;
  244|  22.4k|  return tens;
  245|  22.4k|}
numbers.cc:_ZN4absl12lts_2026081712_GLOBAL__N_113EncodeHundredEjPc:
  181|  5.60k|inline char* EncodeHundred(uint32_t n, char* absl_nonnull out_str) {
  182|  5.60k|  int num_digits = static_cast<int>(n - 10) >> 8;
  183|  5.60k|  uint32_t div10 = (n * kDivisionBy10Mul) / kDivisionBy10Div;
  184|  5.60k|  uint32_t mod10 = n - 10u * div10;
  185|  5.60k|  uint32_t base = kTwoZeroBytes + div10 + (mod10 << 8);
  186|  5.60k|  base >>= num_digits & 8;
  187|  5.60k|  little_endian::Store16(out_str, static_cast<uint16_t>(base));
  188|  5.60k|  return out_str + 2 + num_digits;
  189|  5.60k|}

_ZN4absl12lts_2026081716strings_internal28StringResizeAndOverwriteImplINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS1_37STLStringResizeUninitializedAmortizedIS9_EEvPT_mEUlPcmE_EEvRSB_NSB_9size_typeET0_:
  149|  6.81k|void StringResizeAndOverwriteImpl(T& str, typename T::size_type n, Op op) {
  150|       |#ifdef ABSL_INTERNAL_HAS_RESIZE_AND_OVERWRITE
  151|       |  str.resize_and_overwrite(n, std::move(op));
  152|       |#else
  153|       |  if constexpr (strings_internal::
  154|       |                    has__google_nonstandard_backport_resize_and_overwrite<
  155|       |                        T>::value) {
  156|       |    str.__google_nonstandard_backport_resize_and_overwrite(n, std::move(op));
  157|       |  } else if constexpr (strings_internal::has__resize_and_overwrite<T>::value) {
  158|       |    str.__resize_and_overwrite(n, std::move(op));
  159|  6.81k|  } else if constexpr (strings_internal::has__resize_default_init<T>::value) {
  160|  6.81k|    str.__resize_default_init(n);
  161|  6.81k|    str.__resize_default_init(
  162|  6.81k|        static_cast<typename T::size_type>(std::move(op)(str.data(), n)));
  163|       |  } else if constexpr (strings_internal::has_Resize_and_overwrite<T>::value) {
  164|       |    str._Resize_and_overwrite(n, std::move(op));
  165|       |  } else {
  166|       |    strings_internal::StringResizeAndOverwriteFallback(str, n, std::move(op));
  167|       |  }
  168|  6.81k|#endif
  169|  6.81k|}
str_cat.cc:_ZN4absl12lts_2026081724StringResizeAndOverwriteINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEZNS0_6StrCatERKNS0_8AlphaNumESB_E3$_0EEvRT_NSD_9size_typeET0_:
  186|     63|void StringResizeAndOverwrite(T& str, typename T::size_type n, Op op) {
  187|     63|  strings_internal::StringResizeAndOverwriteImpl(str, n, std::move(op));
  188|       |#if defined(ABSL_HAVE_MEMORY_SANITIZER)
  189|       |  __msan_check_mem_is_initialized(str.data(), str.size());
  190|       |#endif
  191|     63|}
str_cat.cc:_ZN4absl12lts_2026081716strings_internal28StringResizeAndOverwriteImplINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS0_6StrCatERKNS0_8AlphaNumESC_E3$_0EEvRT_NSE_9size_typeET0_:
  149|     63|void StringResizeAndOverwriteImpl(T& str, typename T::size_type n, Op op) {
  150|       |#ifdef ABSL_INTERNAL_HAS_RESIZE_AND_OVERWRITE
  151|       |  str.resize_and_overwrite(n, std::move(op));
  152|       |#else
  153|       |  if constexpr (strings_internal::
  154|       |                    has__google_nonstandard_backport_resize_and_overwrite<
  155|       |                        T>::value) {
  156|       |    str.__google_nonstandard_backport_resize_and_overwrite(n, std::move(op));
  157|       |  } else if constexpr (strings_internal::has__resize_and_overwrite<T>::value) {
  158|       |    str.__resize_and_overwrite(n, std::move(op));
  159|     63|  } else if constexpr (strings_internal::has__resize_default_init<T>::value) {
  160|     63|    str.__resize_default_init(n);
  161|     63|    str.__resize_default_init(
  162|     63|        static_cast<typename T::size_type>(std::move(op)(str.data(), n)));
  163|       |  } else if constexpr (strings_internal::has_Resize_and_overwrite<T>::value) {
  164|       |    str._Resize_and_overwrite(n, std::move(op));
  165|       |  } else {
  166|       |    strings_internal::StringResizeAndOverwriteFallback(str, n, std::move(op));
  167|       |  }
  168|     63|#endif
  169|     63|}
str_cat.cc:_ZN4absl12lts_2026081724StringResizeAndOverwriteINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEZNS0_6StrCatERKNS0_8AlphaNumESB_SB_E3$_0EEvRT_NSD_9size_typeET0_:
  186|     45|void StringResizeAndOverwrite(T& str, typename T::size_type n, Op op) {
  187|     45|  strings_internal::StringResizeAndOverwriteImpl(str, n, std::move(op));
  188|       |#if defined(ABSL_HAVE_MEMORY_SANITIZER)
  189|       |  __msan_check_mem_is_initialized(str.data(), str.size());
  190|       |#endif
  191|     45|}
str_cat.cc:_ZN4absl12lts_2026081716strings_internal28StringResizeAndOverwriteImplINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS0_6StrCatERKNS0_8AlphaNumESC_SC_E3$_0EEvRT_NSE_9size_typeET0_:
  149|     45|void StringResizeAndOverwriteImpl(T& str, typename T::size_type n, Op op) {
  150|       |#ifdef ABSL_INTERNAL_HAS_RESIZE_AND_OVERWRITE
  151|       |  str.resize_and_overwrite(n, std::move(op));
  152|       |#else
  153|       |  if constexpr (strings_internal::
  154|       |                    has__google_nonstandard_backport_resize_and_overwrite<
  155|       |                        T>::value) {
  156|       |    str.__google_nonstandard_backport_resize_and_overwrite(n, std::move(op));
  157|       |  } else if constexpr (strings_internal::has__resize_and_overwrite<T>::value) {
  158|       |    str.__resize_and_overwrite(n, std::move(op));
  159|     45|  } else if constexpr (strings_internal::has__resize_default_init<T>::value) {
  160|     45|    str.__resize_default_init(n);
  161|     45|    str.__resize_default_init(
  162|     45|        static_cast<typename T::size_type>(std::move(op)(str.data(), n)));
  163|       |  } else if constexpr (strings_internal::has_Resize_and_overwrite<T>::value) {
  164|       |    str._Resize_and_overwrite(n, std::move(op));
  165|       |  } else {
  166|       |    strings_internal::StringResizeAndOverwriteFallback(str, n, std::move(op));
  167|       |  }
  168|     45|#endif
  169|     45|}
str_cat.cc:_ZN4absl12lts_2026081716strings_internal28StringResizeAndOverwriteImplINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS1_24StringAppendAndOverwriteIS9_ZNS0_9StrAppendEPS9_RKNS0_8AlphaNumEE3$_0EEvRT_NSG_9size_typeET0_EUlPcmE_EEvSH_SI_SJ_:
  149|  58.0M|void StringResizeAndOverwriteImpl(T& str, typename T::size_type n, Op op) {
  150|       |#ifdef ABSL_INTERNAL_HAS_RESIZE_AND_OVERWRITE
  151|       |  str.resize_and_overwrite(n, std::move(op));
  152|       |#else
  153|       |  if constexpr (strings_internal::
  154|       |                    has__google_nonstandard_backport_resize_and_overwrite<
  155|       |                        T>::value) {
  156|       |    str.__google_nonstandard_backport_resize_and_overwrite(n, std::move(op));
  157|       |  } else if constexpr (strings_internal::has__resize_and_overwrite<T>::value) {
  158|       |    str.__resize_and_overwrite(n, std::move(op));
  159|  58.0M|  } else if constexpr (strings_internal::has__resize_default_init<T>::value) {
  160|  58.0M|    str.__resize_default_init(n);
  161|  58.0M|    str.__resize_default_init(
  162|  58.0M|        static_cast<typename T::size_type>(std::move(op)(str.data(), n)));
  163|       |  } else if constexpr (strings_internal::has_Resize_and_overwrite<T>::value) {
  164|       |    str._Resize_and_overwrite(n, std::move(op));
  165|       |  } else {
  166|       |    strings_internal::StringResizeAndOverwriteFallback(str, n, std::move(op));
  167|       |  }
  168|  58.0M|#endif
  169|  58.0M|}
str_cat.cc:_ZN4absl12lts_2026081716strings_internal28StringResizeAndOverwriteImplINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEZNS1_24StringAppendAndOverwriteIS9_ZNS0_9StrAppendEPS9_RKNS0_8AlphaNumESE_E3$_0EEvRT_NSG_9size_typeET0_EUlPcmE_EEvSH_SI_SJ_:
  149|   629k|void StringResizeAndOverwriteImpl(T& str, typename T::size_type n, Op op) {
  150|       |#ifdef ABSL_INTERNAL_HAS_RESIZE_AND_OVERWRITE
  151|       |  str.resize_and_overwrite(n, std::move(op));
  152|       |#else
  153|       |  if constexpr (strings_internal::
  154|       |                    has__google_nonstandard_backport_resize_and_overwrite<
  155|       |                        T>::value) {
  156|       |    str.__google_nonstandard_backport_resize_and_overwrite(n, std::move(op));
  157|       |  } else if constexpr (strings_internal::has__resize_and_overwrite<T>::value) {
  158|       |    str.__resize_and_overwrite(n, std::move(op));
  159|   629k|  } else if constexpr (strings_internal::has__resize_default_init<T>::value) {
  160|   629k|    str.__resize_default_init(n);
  161|   629k|    str.__resize_default_init(
  162|   629k|        static_cast<typename T::size_type>(std::move(op)(str.data(), n)));
  163|       |  } else if constexpr (strings_internal::has_Resize_and_overwrite<T>::value) {
  164|       |    str._Resize_and_overwrite(n, std::move(op));
  165|       |  } else {
  166|       |    strings_internal::StringResizeAndOverwriteFallback(str, n, std::move(op));
  167|       |  }
  168|   629k|#endif
  169|   629k|}

_ZN4absl12lts_202608176StrCatERKNS0_8AlphaNumES3_:
   80|     63|std::string StrCat(const AlphaNum& a, const AlphaNum& b) {
   81|     63|  std::string result;
   82|       |  // Use uint64_t to prevent size_t overflow. We assume it is not possible for
   83|       |  // in memory strings to overflow a uint64_t.
   84|     63|  constexpr uint64_t kMaxSize = uint64_t{std::numeric_limits<size_t>::max()};
   85|     63|  const uint64_t result_size =
   86|     63|      static_cast<uint64_t>(a.size()) + static_cast<uint64_t>(b.size());
   87|     63|  ABSL_INTERNAL_CHECK(result_size <= kMaxSize, "size_t overflow");
  ------------------
  |  |   85|     63|  do {                                                             \
  |  |   86|     63|    if (ABSL_PREDICT_FALSE(!(condition))) {                        \
  |  |  ------------------
  |  |  |  |  190|     63|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 63]
  |  |  |  |  |  Branch (190:49): [Folded, False: 63]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 63]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|      std::string death_message = "Check " #condition " failed: "; \
  |  |   88|      0|      death_message += std::string(message);                       \
  |  |   89|      0|      ABSL_INTERNAL_LOG(FATAL, death_message);                     \
  |  |  ------------------
  |  |  |  |   76|      0|  do {                                                                    \
  |  |  |  |   77|      0|    constexpr const char* absl_raw_log_internal_filename = __FILE__;      \
  |  |  |  |   78|      0|    ::absl::raw_log_internal::internal_log_function(                      \
  |  |  |  |   79|      0|        ABSL_RAW_LOG_INTERNAL_##severity, absl_raw_log_internal_filename, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  |  |  ------------------
  |  |  |  |   80|      0|        __LINE__, message);                                               \
  |  |  |  |   81|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|  } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (82:12): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|    }                                                              \
  |  |   91|     63|  } while (0)
  |  |  ------------------
  |  |  |  Branch (91:12): [Folded, False: 63]
  |  |  ------------------
  ------------------
   88|     63|  absl::StringResizeAndOverwrite(result, static_cast<size_t>(result_size),
   89|     63|                                 [&a, &b](char* const begin, size_t buf_size) {
   90|     63|                                   char* out = begin;
   91|     63|                                   out = Append(out, a);
   92|     63|                                   out = Append(out, b);
   93|     63|                                   assert(out == begin + buf_size);
   94|     63|                                   return buf_size;
   95|     63|                                 });
   96|     63|  return result;
   97|     63|}
_ZN4absl12lts_202608176StrCatERKNS0_8AlphaNumES3_S3_:
   99|     45|std::string StrCat(const AlphaNum& a, const AlphaNum& b, const AlphaNum& c) {
  100|     45|  std::string result;
  101|       |  // Use uint64_t to prevent size_t overflow. We assume it is not possible for
  102|       |  // in memory strings to overflow a uint64_t.
  103|     45|  constexpr uint64_t kMaxSize = uint64_t{std::numeric_limits<size_t>::max()};
  104|     45|  const uint64_t result_size = static_cast<uint64_t>(a.size()) +
  105|     45|                               static_cast<uint64_t>(b.size()) +
  106|     45|                               static_cast<uint64_t>(c.size());
  107|     45|  ABSL_INTERNAL_CHECK(result_size <= kMaxSize, "size_t overflow");
  ------------------
  |  |   85|     45|  do {                                                             \
  |  |   86|     45|    if (ABSL_PREDICT_FALSE(!(condition))) {                        \
  |  |  ------------------
  |  |  |  |  190|     45|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 45]
  |  |  |  |  |  Branch (190:49): [Folded, False: 45]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 45]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|      std::string death_message = "Check " #condition " failed: "; \
  |  |   88|      0|      death_message += std::string(message);                       \
  |  |   89|      0|      ABSL_INTERNAL_LOG(FATAL, death_message);                     \
  |  |  ------------------
  |  |  |  |   76|      0|  do {                                                                    \
  |  |  |  |   77|      0|    constexpr const char* absl_raw_log_internal_filename = __FILE__;      \
  |  |  |  |   78|      0|    ::absl::raw_log_internal::internal_log_function(                      \
  |  |  |  |   79|      0|        ABSL_RAW_LOG_INTERNAL_##severity, absl_raw_log_internal_filename, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  |  |  ------------------
  |  |  |  |   80|      0|        __LINE__, message);                                               \
  |  |  |  |   81|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|  } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (82:12): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|    }                                                              \
  |  |   91|     45|  } while (0)
  |  |  ------------------
  |  |  |  Branch (91:12): [Folded, False: 45]
  |  |  ------------------
  ------------------
  108|     45|  absl::StringResizeAndOverwrite(
  109|     45|      result, static_cast<size_t>(result_size),
  110|     45|      [&a, &b, &c](char* const begin, size_t buf_size) {
  111|     45|        char* out = begin;
  112|     45|        out = Append(out, a);
  113|     45|        out = Append(out, b);
  114|     45|        out = Append(out, c);
  115|     45|        assert(out == begin + buf_size);
  116|     45|        return buf_size;
  117|     45|      });
  118|     45|  return result;
  119|     45|}
_ZN4absl12lts_202608179StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_8AlphaNumE:
  207|  58.0M|void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a) {
  208|       |  ASSERT_NO_OVERLAP(*dest, a);
  ------------------
  |  |  180|  58.0M|  assert(((src).size() == 0) ||      \
  |  |  181|  58.0M|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  209|  58.0M|  strings_internal::StringAppendAndOverwrite(
  210|  58.0M|      *dest, a.size(), [&a](char* const buf, size_t buf_size) {
  211|  58.0M|        char* out = buf;
  212|  58.0M|        out = Append(out, a);
  213|  58.0M|        assert(out == buf + buf_size);
  214|  58.0M|        return buf_size;
  215|  58.0M|      });
  216|  58.0M|}
_ZN4absl12lts_202608179StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_8AlphaNumESB_:
  219|   629k|               const AlphaNum& b) {
  220|   629k|  ASSERT_NO_OVERLAP(*dest, a);
  ------------------
  |  |  180|   629k|  assert(((src).size() == 0) ||      \
  |  |  181|   629k|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  221|       |  ASSERT_NO_OVERLAP(*dest, b);
  ------------------
  |  |  180|   629k|  assert(((src).size() == 0) ||      \
  |  |  181|   629k|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  222|   629k|  strings_internal::StringAppendAndOverwrite(
  223|   629k|      *dest, SafeAdd(a.size(), b.size()),
  224|   629k|      [&a, &b](char* const buf, size_t buf_size) {
  225|   629k|        char* out = buf;
  226|   629k|        out = Append(out, a);
  227|   629k|        out = Append(out, b);
  228|   629k|        assert(out == buf + buf_size);
  229|   629k|        return buf_size;
  230|   629k|      });
  231|   629k|}
str_cat.cc:_ZN4absl12lts_2026081712_GLOBAL__N_17SafeAddEmm:
   59|   629k|inline size_t SafeAdd(size_t a, size_t b) {
   60|   629k|  const uint64_t sum = static_cast<uint64_t>(a) + b;
   61|   629k|  if (ABSL_PREDICT_FALSE(sum > (std::numeric_limits<size_t>::max)())) {
  ------------------
  |  |  190|   629k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 629k]
  |  |  |  Branch (190:49): [Folded, False: 629k]
  |  |  |  Branch (190:58): [True: 0, False: 629k]
  |  |  ------------------
  ------------------
   62|      0|    ThrowStdLengthError("absl string append length overflow");
   63|      0|  }
   64|   629k|  return static_cast<size_t>(sum);
   65|   629k|}
str_cat.cc:_ZZN4absl12lts_202608176StrCatERKNS0_8AlphaNumES3_ENK3$_0clEPcm:
   89|     63|                                 [&a, &b](char* const begin, size_t buf_size) {
   90|     63|                                   char* out = begin;
   91|     63|                                   out = Append(out, a);
   92|     63|                                   out = Append(out, b);
   93|       |                                   assert(out == begin + buf_size);
   94|     63|                                   return buf_size;
   95|     63|                                 });
str_cat.cc:_ZN4absl12lts_2026081712_GLOBAL__N_16AppendEPcRKNS0_8AlphaNumE:
   48|  59.3M|inline char* absl_nonnull Append(char* absl_nonnull out, const AlphaNum& x) {
   49|       |  // memcpy is allowed to overwrite arbitrary memory, so doing this after the
   50|       |  // call would force an extra fetch of x.size().
   51|  59.3M|  char* after = out + x.size();
   52|  59.3M|  if (x.size() != 0) {
  ------------------
  |  Branch (52:7): [True: 58.7M, False: 633k]
  ------------------
   53|  58.7M|    memcpy(out, x.data(), x.size());
   54|  58.7M|  }
   55|  59.3M|  return after;
   56|  59.3M|}
str_cat.cc:_ZZN4absl12lts_202608176StrCatERKNS0_8AlphaNumES3_S3_ENK3$_0clEPcm:
  110|     45|      [&a, &b, &c](char* const begin, size_t buf_size) {
  111|     45|        char* out = begin;
  112|     45|        out = Append(out, a);
  113|     45|        out = Append(out, b);
  114|     45|        out = Append(out, c);
  115|       |        assert(out == begin + buf_size);
  116|     45|        return buf_size;
  117|     45|      });
str_cat.cc:_ZZN4absl12lts_202608179StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_8AlphaNumEENK3$_0clEPcm:
  210|  58.0M|      *dest, a.size(), [&a](char* const buf, size_t buf_size) {
  211|  58.0M|        char* out = buf;
  212|  58.0M|        out = Append(out, a);
  213|       |        assert(out == buf + buf_size);
  214|  58.0M|        return buf_size;
  215|  58.0M|      });
str_cat.cc:_ZZN4absl12lts_202608179StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_8AlphaNumESB_ENK3$_0clEPcm:
  224|   629k|      [&a, &b](char* const buf, size_t buf_size) {
  225|   629k|        char* out = buf;
  226|   629k|        out = Append(out, a);
  227|   629k|        out = Append(out, b);
  228|       |        assert(out == buf + buf_size);
  229|   629k|        return buf_size;
  230|   629k|      });

_ZN4absl12lts_202608178AlphaNumC2INSt3__19allocatorIcEEEERKNS3_12basic_stringIcNS3_11char_traitsIcEET_EE:
  417|  27.1M|      : piece_(str) {}
_ZN4absl12lts_202608178AlphaNumC2EPKc:
  396|    153|      : piece_(NullSafeStringView(c_str)) {}
_ZN4absl12lts_202608178AlphaNumC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  399|  32.1M|      : piece_(pc) {}
_ZNK4absl12lts_202608178AlphaNum4sizeEv:
  425|   236M|  absl::string_view::size_type size() const { return piece_.size(); }
_ZNK4absl12lts_202608178AlphaNum4dataEv:
  426|  58.7M|  const char* absl_nullable data() const { return piece_.data(); }

_ZN4absl12lts_2026081717UntypedFormatSpecC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  112|  5.85k|  explicit UntypedFormatSpec(string_view s) : spec_(s) {}
_ZN4absl12lts_202608179StrFormatIJiEEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_19str_format_internal18FormatSpecTemplateIJXspclsr19str_format_internalE14ArgumentToConvIT_EEEEEEDpRKSB_:
  366|    256|                                    const Args&... args) {
  367|    256|  return str_format_internal::FormatPack(
  368|    256|      str_format_internal::UntypedFormatSpecImpl::Extract(format),
  369|    256|      {str_format_internal::FormatArgImpl(args)...});
  370|    256|}
_ZN4absl12lts_202608178SNPrintFIJciiiEEEiPcmRKNS0_19str_format_internal18FormatSpecTemplateIJXspclsr19str_format_internalE14ArgumentToConvIT_EEEEEEDpRKS5_:
  473|  5.60k|             const FormatSpec<Args...>& format, const Args&... args) {
  474|  5.60k|  return str_format_internal::SnprintF(
  475|  5.60k|      output, size, str_format_internal::UntypedFormatSpecImpl::Extract(format),
  476|  5.60k|      {str_format_internal::FormatArgImpl(args)...});
  477|  5.60k|}

_ZN4absl12lts_2026081716strings_internal18ApplySubstitutionsENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS2_6vectorINS1_18ViableSubstitutionENS2_9allocatorIS8_EEEEPNS2_12basic_stringIcS5_NS9_IcEEEE:
   41|  27.1M|    std::string* absl_nonnull result_ptr) {
   42|  27.1M|  auto& subs = *subs_ptr;
   43|  27.1M|  int substitutions = 0;
   44|  27.1M|  size_t pos = 0;
   45|  27.7M|  while (!subs.empty()) {
  ------------------
  |  Branch (45:10): [True: 629k, False: 27.1M]
  ------------------
   46|   629k|    auto& sub = subs.back();
   47|   629k|    if (sub.offset >= pos) {
  ------------------
  |  Branch (47:9): [True: 629k, False: 0]
  ------------------
   48|   629k|      if (pos <= s.size()) {
  ------------------
  |  Branch (48:11): [True: 629k, False: 0]
  ------------------
   49|   629k|        StrAppend(result_ptr, s.substr(pos, sub.offset - pos), sub.replacement);
   50|   629k|      }
   51|   629k|      pos = sub.offset + sub.old.size();
   52|   629k|      substitutions += 1;
   53|   629k|    }
   54|   629k|    sub.offset = s.find(sub.old, pos);
   55|   629k|    if (sub.offset == s.npos) {
  ------------------
  |  Branch (55:9): [True: 629k, False: 208]
  ------------------
   56|   629k|      subs.pop_back();
   57|   629k|    } else {
   58|       |      // Insertion sort to ensure the last ViableSubstitution continues to be
   59|       |      // before all the others.
   60|    208|      size_t index = subs.size();
   61|    208|      while (--index && subs[index - 1].OccursBefore(subs[index])) {
  ------------------
  |  Branch (61:14): [True: 0, False: 208]
  |  Branch (61:25): [True: 0, False: 0]
  ------------------
   62|      0|        std::swap(subs[index], subs[index - 1]);
   63|      0|      }
   64|    208|    }
   65|   629k|  }
   66|  27.1M|  result_ptr->append(s.data() + pos, s.size() - pos);
   67|  27.1M|  return substitutions;
   68|  27.1M|}
_ZN4absl12lts_2026081713StrReplaceAllENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEESt16initializer_listINS1_4pairIS5_S5_EEE:
   81|  27.1M|                          strings_internal::FixedMapping replacements) {
   82|  27.1M|  return StrReplaceAll<strings_internal::FixedMapping>(s, replacements);
   83|  27.1M|}

_ZN4absl12lts_2026081716strings_internal18ViableSubstitutionC2ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEES7_m:
  145|   629k|      : old(old_str), replacement(replacement_str), offset(offset_val) {}
_ZN4absl12lts_2026081713StrReplaceAllISt16initializer_listINSt3__14pairINS3_17basic_string_viewIcNS3_11char_traitsIcEEEES8_EEEEENS3_12basic_stringIcS7_NS3_9allocatorIcEEEES8_RKT_:
  197|  27.1M|                          const StrToStrMapping& replacements) {
  198|  27.1M|  auto subs = strings_internal::FindSubstitutions(s, replacements);
  199|  27.1M|  std::string result;
  200|  27.1M|  result.reserve(s.size());
  201|  27.1M|  strings_internal::ApplySubstitutions(s, &subs, &result);
  202|  27.1M|  return result;
  203|  27.1M|}
_ZN4absl12lts_2026081716strings_internal17FindSubstitutionsISt16initializer_listINSt3__14pairINS4_17basic_string_viewIcNS4_11char_traitsIcEEEES9_EEEEENS4_6vectorINS1_18ViableSubstitutionENS4_9allocatorISD_EEEES9_RKT_:
  161|  27.1M|    absl::string_view s, const StrToStrMapping& replacements) {
  162|  27.1M|  std::vector<ViableSubstitution> subs;
  163|  27.1M|  subs.reserve(std::size(replacements));
  164|       |
  165|  27.1M|  for (const auto& rep : replacements) {
  ------------------
  |  Branch (165:24): [True: 27.1M, False: 27.1M]
  ------------------
  166|  27.1M|    using std::get;
  167|  27.1M|    absl::string_view old(get<0>(rep));
  168|       |
  169|  27.1M|    size_t pos = s.find(old);
  170|  27.1M|    if (pos == s.npos) continue;
  ------------------
  |  Branch (170:9): [True: 26.5M, False: 629k]
  ------------------
  171|       |
  172|       |    // Ignore attempts to replace "". This condition is almost never true,
  173|       |    // but above condition is frequently true. That's why we test for this
  174|       |    // now and not before.
  175|   629k|    if (old.empty()) continue;
  ------------------
  |  Branch (175:9): [True: 0, False: 629k]
  ------------------
  176|       |
  177|   629k|    subs.emplace_back(old, get<1>(rep), pos);
  178|       |
  179|       |    // Insertion sort to ensure the last ViableSubstitution comes before
  180|       |    // all the others.
  181|   629k|    size_t index = subs.size();
  182|   629k|    while (--index && subs[index - 1].OccursBefore(subs[index])) {
  ------------------
  |  Branch (182:12): [True: 0, False: 629k]
  |  Branch (182:23): [True: 0, False: 0]
  ------------------
  183|      0|      std::swap(subs[index], subs[index - 1]);
  184|      0|    }
  185|   629k|  }
  186|  27.1M|  return subs;
  187|  27.1M|}

_ZN4absl12lts_2026081713ClippedSubstrENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEmm:
   43|   152M|                                 size_t pos, size_t n = string_view::npos) {
   44|   152M|  pos = (std::min)(pos, static_cast<size_t>(s.size()));
   45|   152M|  return s.substr(pos, n);
   46|   152M|}
_ZN4absl12lts_2026081718NullSafeStringViewEPKc:
   53|    153|constexpr string_view NullSafeStringView(const char* absl_nullable p) {
   54|    153|  return p ? string_view(p) : string_view();
  ------------------
  |  Branch (54:10): [True: 153, False: 0]
  ------------------
   55|    153|}

_ZN4absl12lts_2026081713ConsumePrefixEPNSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   49|  6.56M|                                    absl::string_view expected) {
   50|  6.56M|  if (!absl::StartsWith(*str, expected)) return false;
  ------------------
  |  Branch (50:7): [True: 4.13M, False: 2.42M]
  ------------------
   51|  2.42M|  str->remove_prefix(expected.size());
   52|  2.42M|  return true;
   53|  6.56M|}

_ZN4absl12lts_2026081724synchronization_internal14InvalidGraphIdEv:
   58|  5.60k|inline GraphId InvalidGraphId() {
   59|  5.60k|  return GraphId{0};
   60|  5.60k|}

_ZN4absl12lts_202608175Mutex4lockEv:
 1538|      5|void Mutex::lock() {
 1539|      5|  ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
 1540|      5|  GraphId id = DebugOnlyDeadlockCheck(this);
 1541|      5|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1542|       |  // try fast acquire, then spin loop
 1543|      5|  if (ABSL_PREDICT_FALSE((v & (kMuWriter | kMuReader | kMuEvent)) != 0) ||
  ------------------
  |  |  190|     10|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5]
  |  |  |  Branch (190:49): [Folded, False: 5]
  |  |  |  Branch (190:58): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1544|      5|      ABSL_PREDICT_FALSE(!mu_.compare_exchange_strong(
  ------------------
  |  |  190|      5|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5]
  |  |  |  Branch (190:49): [Folded, False: 5]
  |  |  |  Branch (190:58): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1545|      5|          v, kMuWriter | v, std::memory_order_acquire,
 1546|      5|          std::memory_order_relaxed))) {
 1547|       |    // try spin acquire, then slow loop
 1548|      0|    if (ABSL_PREDICT_FALSE(!TryAcquireWithSpinning(&this->mu_))) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1549|      0|      this->LockSlow(kExclusive, nullptr, 0);
 1550|      0|    }
 1551|      0|  }
 1552|      5|  DebugOnlyLockEnter(this, id);
 1553|      5|  ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
 1554|      5|}
_ZN4absl12lts_202608175Mutex11lock_sharedEv:
 1556|  5.60k|void Mutex::lock_shared() {
 1557|  5.60k|  ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_read_lock);
 1558|  5.60k|  GraphId id = DebugOnlyDeadlockCheck(this);
 1559|  5.60k|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1560|  5.60k|  for (;;) {
 1561|       |    // If there are non-readers holding the lock, use the slow loop.
 1562|  5.60k|    if (ABSL_PREDICT_FALSE(v & (kMuWriter | kMuWait | kMuEvent)) != 0) {
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
  |  Branch (1562:9): [True: 0, False: 5.60k]
  ------------------
 1563|      0|      this->LockSlow(kShared, nullptr, 0);
 1564|      0|      break;
 1565|      0|    }
 1566|       |    // We can avoid the loop and only use the CAS when the lock is free or
 1567|       |    // only held by readers.
 1568|  5.60k|    if (ABSL_PREDICT_TRUE(mu_.compare_exchange_weak(
  ------------------
  |  |  191|  5.60k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 5.60k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 5.60k]
  |  |  |  Branch (191:57): [True: 5.60k, False: 0]
  |  |  ------------------
  ------------------
 1569|  5.60k|            v, (kMuReader | v) + kMuOne, std::memory_order_acquire,
 1570|  5.60k|            std::memory_order_relaxed))) {
 1571|  5.60k|      break;
 1572|  5.60k|    }
 1573|  5.60k|  }
 1574|  5.60k|  DebugOnlyLockEnter(this, id);
 1575|  5.60k|  ABSL_TSAN_MUTEX_POST_LOCK(this, __tsan_mutex_read_lock, 0);
 1576|  5.60k|}
_ZN4absl12lts_202608175Mutex6unlockEv:
 1716|      5|void Mutex::unlock() {
 1717|      5|  ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
 1718|      5|  DebugOnlyLockLeave(this);
 1719|      5|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1720|       |
 1721|      5|  if (kDebugMode && ((v & (kMuWriter | kMuReader)) != kMuWriter)) {
  ------------------
  |  Branch (1721:7): [Folded, False: 5]
  |  Branch (1721:21): [True: 0, False: 0]
  ------------------
 1722|      0|    ABSL_RAW_LOG(FATAL, "Mutex unlocked when destroyed or not locked: v=0x%x",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1723|      0|                 static_cast<unsigned>(v));
 1724|      0|  }
 1725|       |
 1726|       |  // should_try_cas is whether we'll try a compare-and-swap immediately.
 1727|       |  // NOTE: optimized out when kDebugMode is false.
 1728|      5|  bool should_try_cas = ((v & (kMuEvent | kMuWriter)) == kMuWriter &&
  ------------------
  |  Branch (1728:26): [True: 5, False: 0]
  ------------------
 1729|      5|                         (v & (kMuWait | kMuDesig)) != kMuWait);
  ------------------
  |  Branch (1729:26): [True: 5, False: 0]
  ------------------
 1730|       |
 1731|       |  // But, we can use an alternate computation of it, that compilers
 1732|       |  // currently don't find on their own.  When that changes, this function
 1733|       |  // can be simplified.
 1734|       |  //
 1735|       |  // should_try_cas is true iff the bits satisfy the following conditions:
 1736|       |  //
 1737|       |  //                   Ev Wr Wa De
 1738|       |  // equal to           0  1
 1739|       |  // and not equal to         1  0
 1740|       |  //
 1741|       |  // after xoring by    0  1  0  1,  this is equivalent to:
 1742|       |  //
 1743|       |  // equal to           0  0
 1744|       |  // and not equal to         1  1,  which is the same as:
 1745|       |  //
 1746|       |  // smaller than       0  0  1  1
 1747|      5|  static_assert(kMuEvent > kMuWait, "Needed for should_try_cas_fast");
 1748|      5|  static_assert(kMuEvent > kMuDesig, "Needed for should_try_cas_fast");
 1749|      5|  static_assert(kMuWriter > kMuWait, "Needed for should_try_cas_fast");
 1750|      5|  static_assert(kMuWriter > kMuDesig, "Needed for should_try_cas_fast");
 1751|       |
 1752|      5|  bool should_try_cas_fast =
 1753|      5|      ((v ^ (kMuWriter | kMuDesig)) &
 1754|      5|       (kMuEvent | kMuWriter | kMuWait | kMuDesig)) < (kMuWait | kMuDesig);
 1755|       |
 1756|      5|  if (kDebugMode && should_try_cas != should_try_cas_fast) {
  ------------------
  |  Branch (1756:7): [Folded, False: 5]
  |  Branch (1756:21): [True: 0, False: 0]
  ------------------
 1757|       |    // We would usually use PRIdPTR here, but is not correctly implemented
 1758|       |    // within the android toolchain.
 1759|      0|    ABSL_RAW_LOG(FATAL, "internal logic error %llx %llx %llx\n",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1760|      0|                 static_cast<long long>(v),
 1761|      0|                 static_cast<long long>(should_try_cas),
 1762|      0|                 static_cast<long long>(should_try_cas_fast));
 1763|      0|  }
 1764|      5|  if (should_try_cas_fast &&
  ------------------
  |  Branch (1764:7): [True: 5, False: 0]
  ------------------
 1765|      5|      mu_.compare_exchange_strong(v, v & ~(kMuWrWait | kMuWriter),
  ------------------
  |  Branch (1765:7): [True: 5, False: 0]
  ------------------
 1766|      5|                                  std::memory_order_release,
 1767|      5|                                  std::memory_order_relaxed)) {
 1768|       |    // fast writer release (writer with no waiters or with designated waker)
 1769|      5|  } else {
 1770|      0|    this->UnlockSlow(nullptr /*no waitp*/);  // take slow path
 1771|      0|  }
 1772|      5|  ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
 1773|      5|}
_ZN4absl12lts_202608175Mutex13unlock_sharedEv:
 1786|  5.60k|void Mutex::unlock_shared() {
 1787|  5.60k|  ABSL_TSAN_MUTEX_PRE_UNLOCK(this, __tsan_mutex_read_lock);
 1788|  5.60k|  DebugOnlyLockLeave(this);
 1789|  5.60k|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1790|  5.60k|  assert((v & (kMuWriter | kMuReader)) == kMuReader);
 1791|  5.60k|  for (;;) {
 1792|  5.60k|    if (ABSL_PREDICT_FALSE((v & (kMuReader | kMuWait | kMuEvent)) !=
  ------------------
  |  |  190|  5.60k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 5.60k]
  |  |  |  Branch (190:49): [Folded, False: 5.60k]
  |  |  |  Branch (190:58): [True: 0, False: 5.60k]
  |  |  ------------------
  ------------------
 1793|  5.60k|                           kMuReader)) {
 1794|      0|      this->UnlockSlow(nullptr /*no waitp*/);  // take slow path
 1795|      0|      break;
 1796|      0|    }
 1797|       |    // fast reader release (reader with no waiters)
 1798|  5.60k|    intptr_t clear = ExactlyOneReader(v) ? kMuReader | kMuOne : kMuOne;
  ------------------
  |  Branch (1798:22): [True: 5.60k, False: 0]
  ------------------
 1799|  5.60k|    if (ABSL_PREDICT_TRUE(
  ------------------
  |  |  191|  5.60k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 5.60k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 5.60k]
  |  |  |  Branch (191:57): [True: 5.60k, False: 0]
  |  |  ------------------
  ------------------
 1800|  5.60k|            mu_.compare_exchange_strong(v, v - clear, std::memory_order_release,
 1801|  5.60k|                                        std::memory_order_relaxed))) {
 1802|  5.60k|      break;
 1803|  5.60k|    }
 1804|  5.60k|  }
 1805|  5.60k|  ABSL_TSAN_MUTEX_POST_UNLOCK(this, __tsan_mutex_read_lock);
 1806|  5.60k|}
mutex.cc:_ZN4absl12lts_20260817L22DebugOnlyDeadlockCheckEPNS0_5MutexE:
 1480|  5.60k|static inline GraphId DebugOnlyDeadlockCheck(Mutex* mu) {
 1481|  5.60k|  if (kDebugMode && synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1481:7): [Folded, False: 5.60k]
  |  Branch (1481:21): [True: 0, False: 0]
  ------------------
 1482|      0|                        OnDeadlockCycle::kIgnore) {
 1483|      0|    return DeadlockCheck(mu);
 1484|  5.60k|  } else {
 1485|  5.60k|    return InvalidGraphId();
 1486|  5.60k|  }
 1487|  5.60k|}
mutex.cc:_ZN4absl12lts_20260817L18DebugOnlyLockEnterEPNS0_5MutexENS0_24synchronization_internal7GraphIdE:
 1313|  5.60k|static inline void DebugOnlyLockEnter(Mutex* mu, GraphId id) {
 1314|  5.60k|  if (kDebugMode) {
  ------------------
  |  Branch (1314:7): [Folded, False: 5.60k]
  ------------------
 1315|      0|    if (synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1315:9): [True: 0, False: 0]
  ------------------
 1316|      0|        OnDeadlockCycle::kIgnore) {
 1317|      0|      LockEnter(mu, id, Synch_GetAllLocks());
 1318|      0|    }
 1319|      0|  }
 1320|  5.60k|}
mutex.cc:_ZN4absl12lts_20260817L18DebugOnlyLockLeaveEPNS0_5MutexE:
 1323|  5.60k|static inline void DebugOnlyLockLeave(Mutex* mu) {
 1324|  5.60k|  if (kDebugMode) {
  ------------------
  |  Branch (1324:7): [Folded, False: 5.60k]
  ------------------
 1325|      0|    if (synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1325:9): [True: 0, False: 0]
  ------------------
 1326|      0|        OnDeadlockCycle::kIgnore) {
 1327|      0|      LockLeave(mu, GetGraphId(mu), Synch_GetAllLocks());
 1328|      0|    }
 1329|      0|  }
 1330|  5.60k|}
mutex.cc:_ZN4absl12lts_20260817L16ExactlyOneReaderEl:
 1776|  5.60k|static bool ExactlyOneReader(intptr_t v) {
 1777|  5.60k|  assert((v & (kMuWriter | kMuReader)) == kMuReader);
 1778|  5.60k|  assert((v & kMuHigh) != 0);
 1779|       |  // The more straightforward "(v & kMuHigh) == kMuOne" also works, but
 1780|       |  // on some architectures the following generates slightly smaller code.
 1781|       |  // It may be faster too.
 1782|  5.60k|  constexpr intptr_t kMuMultipleWaitersMask = kMuHigh ^ kMuOne;
 1783|  5.60k|  return (v & kMuMultipleWaitersMask) == 0;
 1784|  5.60k|}

_ZN4absl12lts_202608175Mutex4LockEv:
  195|      4|  inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { lock(); }
_ZN4absl12lts_202608175Mutex6UnlockEv:
  204|      4|  inline void Unlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
_ZN4absl12lts_2026081715ReaderMutexLockC2ERNS0_5MutexE:
  672|  5.60k|      : mu_(mu) {
  673|  5.60k|    mu.lock_shared();
  674|  5.60k|  }
_ZN4absl12lts_2026081715ReaderMutexLockD2Ev:
  698|  5.60k|  ~ReaderMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock_shared(); }
_ZN4absl12lts_2026081715WriterMutexLockC2ERNS0_5MutexE:
  712|      1|      : mu_(mu) {
  713|      1|    mu.lock();
  714|      1|  }
_ZN4absl12lts_2026081715WriterMutexLockD2Ev:
  740|      1|  ~WriterMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock(); }
_ZN4absl12lts_202608175MutexC2Ev:
 1187|  20.4k|inline Mutex::Mutex() : mu_(0) {
 1188|  20.4k|  ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
 1189|  20.4k|}
_ZN4absl12lts_202608175MutexD2Ev:
 1195|  20.4k|inline Mutex::~Mutex() { Dtor(); }
_ZN4absl12lts_202608175Mutex4DtorEv:
 1206|  20.4k|inline void Mutex::Dtor() {}

_ZN4absl12lts_202608173NowEv:
   39|  33.1k|Time Now() {
   40|       |  // TODO(bww): Get a timespec instead so we don't have to divide.
   41|  33.1k|  int64_t n = absl::GetCurrentTimeNanos();
   42|  33.1k|  if (n >= 0) {
  ------------------
  |  Branch (42:7): [True: 33.1k, False: 0]
  ------------------
   43|  33.1k|    return time_internal::FromUnixDuration(
   44|  33.1k|        time_internal::MakeDuration(n / 1000000000, n % 1000000000 * 4));
   45|  33.1k|  }
   46|      0|  return time_internal::FromUnixDuration(absl::Nanoseconds(n));
   47|  33.1k|}
_ZN4absl12lts_2026081719GetCurrentTimeNanosEv:
   77|  33.1k|int64_t GetCurrentTimeNanos() { return GET_CURRENT_TIME_NANOS_FROM_SYSTEM(); }
  ------------------
  |  |   71|  33.1k|  ::absl::time_internal::GetCurrentTimeNanosFromSystem()
  ------------------

_ZN4absl12lts_202608178DurationmIES1_:
  436|  25.0k|Duration& Duration::operator-=(Duration rhs) {
  437|  25.0k|  if (time_internal::IsInfiniteDuration(*this)) return *this;
  ------------------
  |  Branch (437:7): [True: 0, False: 25.0k]
  ------------------
  438|  25.0k|  if (time_internal::IsInfiniteDuration(rhs)) {
  ------------------
  |  Branch (438:7): [True: 0, False: 25.0k]
  ------------------
  439|      0|    return *this = rhs.rep_hi_.Get() >= 0 ? -InfiniteDuration()
  ------------------
  |  Branch (439:20): [True: 0, False: 0]
  ------------------
  440|      0|                                          : InfiniteDuration();
  441|      0|  }
  442|  25.0k|  const int64_t orig_rep_hi = rep_hi_.Get();
  443|  25.0k|  rep_hi_ = DecodeTwosComp(EncodeTwosComp(rep_hi_.Get()) -
  444|  25.0k|                           EncodeTwosComp(rhs.rep_hi_.Get()));
  445|  25.0k|  if (rep_lo_ < rhs.rep_lo_) {
  ------------------
  |  Branch (445:7): [True: 755, False: 24.2k]
  ------------------
  446|    755|    rep_hi_ = DecodeTwosComp(EncodeTwosComp(rep_hi_.Get()) - 1);
  447|    755|    rep_lo_ += kTicksPerSecond;
  448|    755|  }
  449|  25.0k|  rep_lo_ -= rhs.rep_lo_;
  450|  25.0k|  if (rhs.rep_hi_.Get() < 0 ? rep_hi_.Get() < orig_rep_hi
  ------------------
  |  Branch (450:7): [True: 0, False: 25.0k]
  |  Branch (450:7): [True: 0, False: 25.0k]
  ------------------
  451|  25.0k|                            : rep_hi_.Get() > orig_rep_hi) {
  452|      0|    return *this = rhs.rep_hi_.Get() >= 0 ? -InfiniteDuration()
  ------------------
  |  Branch (452:20): [True: 0, False: 0]
  ------------------
  453|      0|                                          : InfiniteDuration();
  454|      0|  }
  455|  25.0k|  return *this;
  456|  25.0k|}
duration.cc:_ZN4absl12lts_2026081712_GLOBAL__N_114DecodeTwosCompEm:
  187|  25.7k|inline int64_t DecodeTwosComp(uint64_t v) { return absl::bit_cast<int64_t>(v); }
duration.cc:_ZN4absl12lts_2026081712_GLOBAL__N_114EncodeTwosCompEl:
  184|  50.8k|inline uint64_t EncodeTwosComp(int64_t v) {
  185|  50.8k|  return absl::bit_cast<uint64_t>(v);
  186|  50.8k|}

clock.cc:_ZN4absl12lts_2026081713time_internalL29GetCurrentTimeNanosFromSystemEv:
   13|  33.1k|static int64_t GetCurrentTimeNanosFromSystem() {
   14|  33.1k|  const int64_t kNanosPerSecond = 1000 * 1000 * 1000;
   15|  33.1k|  struct timespec ts;
   16|  33.1k|  ABSL_RAW_CHECK(clock_gettime(CLOCK_REALTIME, &ts) == 0,
  ------------------
  |  |   60|  33.1k|  do {                                                                 \
  |  |   61|  33.1k|    if (ABSL_PREDICT_FALSE(!(condition))) {                            \
  |  |  ------------------
  |  |  |  |  190|  33.1k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 33.1k]
  |  |  |  |  |  Branch (190:49): [Folded, False: 33.1k]
  |  |  |  |  |  Branch (190:58): [True: 0, False: 33.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      0|      ABSL_RAW_LOG(FATAL, "Check %s failed: %s", #condition, message); \
  |  |  ------------------
  |  |  |  |   45|      0|  do {                                                                         \
  |  |  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  |  |  ------------------
  |  |  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  237|      0|  do {                                           \
  |  |  |  |  |  |  |  |  238|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  |  |  239|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  |  |  240|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  215|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  241|      0|  } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (241:12): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|      0|  } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      0|    }                                                                  \
  |  |   64|  33.1k|  } while (0)
  |  |  ------------------
  |  |  |  Branch (64:12): [Folded, False: 33.1k]
  |  |  ------------------
  ------------------
   17|  33.1k|                 "Failed to read real-time clock.");
   18|  33.1k|  return (int64_t{ts.tv_sec} * kNanosPerSecond +
   19|  33.1k|          int64_t{ts.tv_nsec});
   20|  33.1k|}

_ZN4absl12lts_2026081711ToUnixNanosENS0_4TimeE:
  249|  5.60k|int64_t ToUnixNanos(Time t) {
  250|  5.60k|  if (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >= 0 &&
  ------------------
  |  Branch (250:7): [True: 5.60k, False: 0]
  ------------------
  251|  5.60k|      time_internal::GetRepHi(time_internal::ToUnixDuration(t)) >> 33 == 0) {
  ------------------
  |  Branch (251:7): [True: 5.60k, False: 0]
  ------------------
  252|  5.60k|    return (time_internal::GetRepHi(time_internal::ToUnixDuration(t)) * 1000 *
  253|  5.60k|            1000 * 1000) +
  254|  5.60k|           (time_internal::GetRepLo(time_internal::ToUnixDuration(t)) / 4);
  255|  5.60k|  }
  256|      0|  return FloorToUnit(time_internal::ToUnixDuration(t), absl::Nanoseconds(1));
  257|  5.60k|}
_ZN4absl12lts_2026081710ToTimespecENS0_4TimeE:
  302|  5.60k|timespec ToTimespec(Time t) {
  303|  5.60k|  timespec ts;
  304|  5.60k|  absl::Duration d = time_internal::ToUnixDuration(t);
  305|  5.60k|  if (!time_internal::IsInfiniteDuration(d)) {
  ------------------
  |  Branch (305:7): [True: 5.60k, False: 0]
  ------------------
  306|  5.60k|    ts.tv_sec = static_cast<decltype(ts.tv_sec)>(time_internal::GetRepHi(d));
  307|  5.60k|    if (ts.tv_sec == time_internal::GetRepHi(d)) {  // no time_t narrowing
  ------------------
  |  Branch (307:9): [True: 5.60k, False: 0]
  ------------------
  308|  5.60k|      ts.tv_nsec = time_internal::GetRepLo(d) / 4;  // floor
  309|  5.60k|      return ts;
  310|  5.60k|    }
  311|  5.60k|  }
  312|      0|  if (d >= absl::ZeroDuration()) {
  ------------------
  |  Branch (312:7): [True: 0, False: 0]
  ------------------
  313|      0|    ts.tv_sec = std::numeric_limits<time_t>::max();
  314|      0|    ts.tv_nsec = 1000 * 1000 * 1000 - 1;
  315|      0|  } else {
  316|      0|    ts.tv_sec = std::numeric_limits<time_t>::min();
  317|      0|    ts.tv_nsec = 0;
  318|      0|  }
  319|      0|  return ts;
  320|  5.60k|}
_ZN4absl12lts_202608179ToTimevalENS0_4TimeE:
  322|  5.60k|timeval ToTimeval(Time t) {
  323|  5.60k|  timeval tv;
  324|  5.60k|  timespec ts = absl::ToTimespec(t);
  325|  5.60k|  tv.tv_sec = static_cast<decltype(tv.tv_sec)>(ts.tv_sec);
  326|  5.60k|  if (tv.tv_sec != ts.tv_sec) {  // narrowing
  ------------------
  |  Branch (326:7): [True: 0, False: 5.60k]
  ------------------
  327|      0|    if (ts.tv_sec < 0) {
  ------------------
  |  Branch (327:9): [True: 0, False: 0]
  ------------------
  328|      0|      tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::min();
  329|      0|      tv.tv_usec = 0;
  330|      0|    } else {
  331|      0|      tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::max();
  332|      0|      tv.tv_usec = 1000 * 1000 - 1;
  333|      0|    }
  334|      0|    return tv;
  335|      0|  }
  336|  5.60k|  tv.tv_usec = static_cast<int>(ts.tv_nsec / 1000);  // suseconds_t
  337|  5.60k|  return tv;
  338|  5.60k|}

_ZN4absl12lts_202608178DurationC2Ev:
  185|  23.8k|  constexpr Duration() : rep_hi_(0), rep_lo_(0) {}  // zero-length duration
_ZN4absl12lts_202608178DurationC2Elj:
  247|  33.1k|  constexpr Duration(int64_t hi, uint32_t lo) : rep_hi_(hi), rep_lo_(lo) {}
_ZN4absl12lts_202608178Duration5HiRepC2El:
  267|  57.0k|          lo_(0),
  268|  57.0k|          hi_(0)
  269|       |#endif
  270|  57.0k|    {
  271|  57.0k|      *this = value;
  272|  57.0k|    }
_ZNK4absl12lts_202608178Duration5HiRep3GetEv:
  274|   162k|    constexpr int64_t Get() const {
  275|   162k|      const uint64_t unsigned_value =
  276|   162k|          (static_cast<uint64_t>(hi_) << 32) | static_cast<uint64_t>(lo_);
  277|       |      // `static_cast<int64_t>(unsigned_value)` is implementation-defined
  278|       |      // before c++20. On all supported platforms the behaviour is that mandated
  279|       |      // by c++20, i.e. "If the destination type is signed, [...] the result is
  280|       |      // the unique value of the destination type equal to the source value
  281|       |      // modulo 2^n, where n is the number of bits used to represent the
  282|       |      // destination type."
  283|   162k|      static_assert(
  284|   162k|          (static_cast<int64_t>((std::numeric_limits<uint64_t>::max)()) ==
  285|   162k|           int64_t{-1}) &&
  286|   162k|              (static_cast<int64_t>(static_cast<uint64_t>(
  287|   162k|                                        (std::numeric_limits<int64_t>::max)()) +
  288|   162k|                                    1) ==
  289|   162k|               (std::numeric_limits<int64_t>::min)()),
  290|   162k|          "static_cast<int64_t>(uint64_t) does not have c++20 semantics");
  291|   162k|      return static_cast<int64_t>(unsigned_value);
  292|   162k|    }
_ZN4absl12lts_202608178Duration5HiRepaSEl:
  294|  82.8k|    constexpr HiRep& operator=(const int64_t value) {
  295|       |      // "If the destination type is unsigned, the resulting value is the
  296|       |      // smallest unsigned value equal to the source value modulo 2^n
  297|       |      // where `n` is the number of bits used to represent the destination
  298|       |      // type".
  299|  82.8k|      const auto unsigned_value = static_cast<uint64_t>(value);
  300|  82.8k|      hi_ = static_cast<uint32_t>(unsigned_value >> 32);
  301|  82.8k|      lo_ = static_cast<uint32_t>(unsigned_value);
  302|  82.8k|      return *this;
  303|  82.8k|    }
_ZN4absl12lts_202608174TimeC2ENS0_8DurationE:
  877|  33.1k|  constexpr explicit Time(Duration rep) : rep_(rep) {}
_ZN4absl12lts_20260817miENS0_8DurationES1_:
  361|  25.0k|                                                        Duration rhs) {
  362|  25.0k|  return lhs -= rhs;
  363|  25.0k|}
_ZN4absl12lts_20260817miENS0_4TimeES1_:
  920|  25.0k|ABSL_ATTRIBUTE_CONST_FUNCTION inline Duration operator-(Time lhs, Time rhs) {
  921|  25.0k|  return lhs.rep_ - rhs.rep_;
  922|  25.0k|}
_ZN4absl12lts_2026081713time_internal12MakeDurationElj:
 1592|  33.1k|                                                              uint32_t lo = 0) {
 1593|  33.1k|  return Duration(hi, lo);
 1594|  33.1k|}
_ZN4absl12lts_2026081713time_internal12MakeDurationEll:
 1597|  33.1k|                                                              int64_t lo) {
 1598|  33.1k|  return MakeDuration(hi, static_cast<uint32_t>(lo));
 1599|  33.1k|}
_ZN4absl12lts_2026081713time_internal8GetRepHiENS0_8DurationE:
 1624|  36.2k|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr int64_t GetRepHi(Duration d) {
 1625|  36.2k|  return d.rep_hi_.Get();
 1626|  36.2k|}
_ZN4absl12lts_2026081713time_internal8GetRepLoENS0_8DurationE:
 1627|  91.9k|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr uint32_t GetRepLo(Duration d) {
 1628|  91.9k|  return d.rep_lo_;
 1629|  91.9k|}
_ZN4absl12lts_2026081713time_internal18IsInfiniteDurationENS0_8DurationE:
 1632|  55.6k|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr bool IsInfiniteDuration(Duration d) {
 1633|  55.6k|  return GetRepLo(d) == ~uint32_t{0};
 1634|  55.6k|}
_ZN4absl12lts_2026081713time_internal16FromUnixDurationENS0_8DurationE:
 1657|  33.1k|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr Time FromUnixDuration(Duration d) {
 1658|  33.1k|  return Time(d);
 1659|  33.1k|}
_ZN4absl12lts_2026081713time_internal14ToUnixDurationENS0_4TimeE:
 1660|  11.2k|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr Duration ToUnixDuration(Time t) {
 1661|  11.2k|  return t.rep_;
 1662|  11.2k|}
_ZN4absl12lts_2026081719ToInt64MillisecondsENS0_8DurationE:
 1885|  25.0k|    Duration d) {
 1886|  25.0k|  if (time_internal::GetRepHi(d) >= 0 &&
  ------------------
  |  Branch (1886:7): [True: 25.0k, False: 0]
  ------------------
 1887|  25.0k|      time_internal::GetRepHi(d) >> 53 == 0) {
  ------------------
  |  Branch (1887:7): [True: 25.0k, False: 0]
  ------------------
 1888|  25.0k|    return (time_internal::GetRepHi(d) * 1000) +
 1889|  25.0k|           (time_internal::GetRepLo(d) /
 1890|  25.0k|            (time_internal::kTicksPerNanosecond * 1000 * 1000));
 1891|  25.0k|  } else {
 1892|      0|    return d / Milliseconds(1);
 1893|      0|  }
 1894|  25.0k|}
_ZN4absl12lts_202608174TimeC2Ev:
  802|  5.60k|  constexpr Time() = default;

_ZN4absl12lts_2026081713span_internal7GetDataIKNS0_10FixedArrayINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEELm128ENS4_9allocatorIS8_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  5.30k|    -> decltype(GetDataImpl(c, 0)) {
   51|  5.30k|  return GetDataImpl(c, 0);
   52|  5.30k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNS0_10FixedArrayINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEELm128ENS4_9allocatorIS8_EEEEEEDTcldtfp_4dataEERT_c:
   38|  5.30k|    -> decltype(c.data()) {
   39|  5.30k|  return c.data();
   40|  5.30k|}
_ZN4absl12lts_2026081713span_internal7GetDataIKNSt3__16vectorIN13sentencepiece22SentencePieceProcessor11ExtraOptionENS3_9allocatorIS7_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  36.1k|    -> decltype(GetDataImpl(c, 0)) {
   51|  36.1k|  return GetDataImpl(c, 0);
   52|  36.1k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNSt3__16vectorIN13sentencepiece22SentencePieceProcessor11ExtraOptionENS3_9allocatorIS7_EEEEEEDTcldtfp_4dataEERT_c:
   38|  36.1k|    -> decltype(c.data()) {
   39|  36.1k|  return c.data();
   40|  36.1k|}
_ZN4absl12lts_2026081713span_internal7GetDataIKNSt3__16vectorImNS3_9allocatorImEEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  15.6k|    -> decltype(GetDataImpl(c, 0)) {
   51|  15.6k|  return GetDataImpl(c, 0);
   52|  15.6k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNSt3__16vectorImNS3_9allocatorImEEEEEEDTcldtfp_4dataEERT_c:
   38|  15.6k|    -> decltype(c.data()) {
   39|  15.6k|  return c.data();
   40|  15.6k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEDTcldtfp_4dataEERT_c:
   38|  27.3k|    -> decltype(c.data()) {
   39|  27.3k|  return c.data();
   40|  27.3k|}
_ZN4absl12lts_2026081713span_internal7GetDataIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  27.3k|    -> decltype(GetDataImpl(c, 0)) {
   51|  27.3k|  return GetDataImpl(c, 0);
   52|  27.3k|}
_ZN4absl12lts_2026081713span_internal7GetDataINSt3__15arrayIcLm15000EEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  16.8k|    -> decltype(GetDataImpl(c, 0)) {
   51|  16.8k|  return GetDataImpl(c, 0);
   52|  16.8k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplINSt3__15arrayIcLm15000EEEEEDTcldtfp_4dataEERT_c:
   38|  16.8k|    -> decltype(c.data()) {
   39|  16.8k|  return c.data();
   40|  16.8k|}
_ZN4absl12lts_2026081713span_internal7GetDataIKNS0_4SpanIcEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  5.60k|    -> decltype(GetDataImpl(c, 0)) {
   51|  5.60k|  return GetDataImpl(c, 0);
   52|  5.60k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNS0_4SpanIcEEEEDTcldtfp_4dataEERT_c:
   38|  5.60k|    -> decltype(c.data()) {
   39|  5.60k|  return c.data();
   40|  5.60k|}
_ZN4absl12lts_2026081713span_internal7GetDataINS0_13InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS5_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  5.60k|    -> decltype(GetDataImpl(c, 0)) {
   51|  5.60k|  return GetDataImpl(c, 0);
   52|  5.60k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplINS0_13InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS5_EEEEEEDTcldtfp_4dataEERT_c:
   38|  5.60k|    -> decltype(c.data()) {
   39|  5.60k|  return c.data();
   40|  5.60k|}
_ZN4absl12lts_2026081713span_internal7GetDataIKNS0_4SpanIjEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|      8|    -> decltype(GetDataImpl(c, 0)) {
   51|      8|  return GetDataImpl(c, 0);
   52|      8|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNS0_4SpanIjEEEEDTcldtfp_4dataEERT_c:
   38|      8|    -> decltype(c.data()) {
   39|      8|  return c.data();
   40|      8|}
_ZN4absl12lts_2026081713span_internal7GetDataINSt3__16vectorIPNS0_7LogSinkENS3_9allocatorIS6_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  5.60k|    -> decltype(GetDataImpl(c, 0)) {
   51|  5.60k|  return GetDataImpl(c, 0);
   52|  5.60k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplINSt3__16vectorIPNS0_7LogSinkENS3_9allocatorIS6_EEEEEEDTcldtfp_4dataEERT_c:
   38|  5.60k|    -> decltype(c.data()) {
   39|  5.60k|  return c.data();
   40|  5.60k|}

_ZNK4absl12lts_2026081712optional_refINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE9has_valueEv:
  132|  17.3k|  constexpr bool has_value() const { return ptr_ != nullptr; }
_ZNK4absl12lts_2026081712optional_refINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE8value_orIRKNS2_12basic_stringIcS5_NS2_9allocatorIcEEEEEES6_OT_:
  151|    928|  constexpr T value_or(U&& default_value) const {
  152|       |    // Instantiate std::optional<T>::value_or(U) to trigger its static_asserts.
  153|    928|    if (false) {
  ------------------
  |  Branch (153:9): [Folded, False: 928]
  ------------------
  154|       |      // We use `std::add_const_t` here since just using `const` makes MSVC
  155|       |      // complain about the syntax.
  156|      0|      (void)std::add_const_t<std::optional<T>>{}.value_or(
  157|      0|          std::forward<U>(default_value));
  158|      0|    }
  159|    928|    return ptr_ != nullptr ? *ptr_
  ------------------
  |  Branch (159:12): [True: 0, False: 928]
  ------------------
  160|    928|                           : static_cast<T>(std::forward<U>(default_value));
  161|    928|  }
_ZN4absl12lts_2026081712optional_refINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEC2ENS2_9nullopt_tE:
   89|  18.2k|      : ptr_(nullptr) {}

_ZNK4absl12lts_202608174SpanIKNS0_19str_format_internal13FormatArgImplEE4sizeEv:
  321|  45.3k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIcE4sizeEv:
  321|  1.26M|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIcE4dataEv:
  316|   550k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIcE7subspanEmm:
  465|  53.8k|  constexpr Span subspan(size_type pos = 0, size_type len = npos) const {
  466|  53.8k|    return (pos <= size()) ? Span(data() + pos, (std::min)(size() - pos, len))
  ------------------
  |  Branch (466:12): [True: 53.8k, False: 0]
  ------------------
  467|  53.8k|                           : (ThrowStdOutOfRange("pos > size()"), Span());
  468|  53.8k|  }
_ZNK4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE5beginEv:
  373|  5.30k|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE4dataEv:
  316|  10.6k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3endEv:
  386|  5.30k|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE4sizeEv:
  321|  5.30k|  constexpr size_type size() const noexcept { return len_; }
_ZN4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEC2INS0_10FixedArrayIS6_Lm128ENS2_9allocatorIS6_EEEEvSD_iEERKT_:
  252|  5.30k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEC2EPS7_m:
  228|  5.30k|      : ptr_(array), len_(length) {}
_ZNK4absl12lts_202608174SpanIKmEixEm:
  336|   611M|  constexpr reference operator[](size_type i) const noexcept {
  337|   611M|    absl::base_internal::HardeningAssertLT(i, size());
  338|   611M|    return ptr_[i];
  339|   611M|  }
_ZNK4absl12lts_202608174SpanIKmE4sizeEv:
  321|   916M|  constexpr size_type size() const noexcept { return len_; }
_ZN4absl12lts_202608174SpanIKN13sentencepiece22SentencePieceProcessor11ExtraOptionEEC2INSt3__16vectorIS4_NS8_9allocatorIS4_EEEEvSC_iEERKT_:
  252|  36.1k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608174SpanIKN13sentencepiece22SentencePieceProcessor11ExtraOptionEEC2EPS5_m:
  228|  36.1k|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608174SpanIKmEC2INSt3__16vectorImNS5_9allocatorImEEEEvS9_iEERKT_:
  252|  15.6k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608174SpanIKmEC2EPS2_m:
  228|  15.6k|      : ptr_(array), len_(length) {}
_ZNK4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE4sizeEv:
  321|  10.6k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE5beginEv:
  373|  5.30k|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE4dataEv:
  316|  10.6k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE3endEv:
  386|  5.30k|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202608174SpanIKiE4sizeEv:
  321|  10.6k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIKiE5beginEv:
  373|  5.30k|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202608174SpanIKiE4dataEv:
  316|  10.6k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIKiE3endEv:
  386|  5.30k|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202608174SpanIKNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEE5emptyEv:
  331|  5.30k|  constexpr bool empty() const noexcept { return size() == 0; }
_ZNK4absl12lts_202608174SpanIKN13sentencepiece22SentencePieceProcessor11ExtraOptionEE5beginEv:
  373|  36.1k|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202608174SpanIKN13sentencepiece22SentencePieceProcessor11ExtraOptionEE4dataEv:
  316|  72.2k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIKN13sentencepiece22SentencePieceProcessor11ExtraOptionEE3endEv:
  386|  36.1k|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202608174SpanIKN13sentencepiece22SentencePieceProcessor11ExtraOptionEE4sizeEv:
  321|  36.1k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIKiE5emptyEv:
  331|  5.30k|  constexpr bool empty() const noexcept { return size() == 0; }
_ZNK4absl12lts_202608174SpanIKcE4dataEv:
  316|   178k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIKcE4sizeEv:
  321|  1.78M|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIjE4dataEv:
  316|     10|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIjE4sizeEv:
  321|     10|  constexpr size_type size() const noexcept { return len_; }
_ZN4absl12lts_202608174SpanIjEC2EPjm:
  228|      9|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608174SpanIKjEC2EPS2_m:
  228|      8|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608174SpanIKNS0_19str_format_internal13FormatArgImplEEC2IS4_S4_EESt16initializer_listIS3_E:
  308|  5.85k|      : Span(v.begin(), v.size()) {}
_ZN4absl12lts_202608174SpanIKNS0_19str_format_internal13FormatArgImplEEC2EPS4_m:
  228|  5.85k|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608178MakeSpanITpTnRiJEjEENS0_4SpanIT0_EEPS4_m:
  727|      8|                           size_t size) noexcept {
  728|      8|  return Span<T>(ptr, size);
  729|      8|}
_ZN4absl12lts_202608174SpanIcEC2EPcm:
  228|   102k|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608174SpanIcEC2Ev:
  225|  32.0k|  constexpr Span() noexcept : Span(nullptr, 0) {}
_ZN4absl12lts_202608174SpanIKcEC2Ev:
  225|  46.1k|  constexpr Span() noexcept : Span(nullptr, 0) {}
_ZN4absl12lts_202608174SpanIKcEC2EPS2_m:
  228|   173k|      : ptr_(array), len_(length) {}
_ZNK4absl12lts_202608174SpanIKcE5emptyEv:
  331|   151k|  constexpr bool empty() const noexcept { return size() == 0; }
_ZN4absl12lts_202608174SpanIcE13remove_prefixEm:
  430|   336k|  void remove_prefix(size_type n) noexcept {
  431|   336k|    absl::base_internal::HardeningAssertGE(size(), n);
  432|   336k|    ptr_ += n;
  433|   336k|    len_ -= n;
  434|   336k|  }
_ZN4absl12lts_202608174SpanIKcE13remove_prefixEm:
  430|   271k|  void remove_prefix(size_type n) noexcept {
  431|   271k|    absl::base_internal::HardeningAssertGE(size(), n);
  432|   271k|    ptr_ += n;
  433|   271k|    len_ -= n;
  434|   271k|  }
_ZN4absl12lts_202608174SpanIKcEC2INSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEvS9_TnNS5_9enable_ifIXsr6IsViewIT_EE5valueEiE4typeELi0EEERKSB_:
  267|  27.3k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608178MakeSpanITpTnRiJENSt3__15arrayIcLm15000EEEEENS3_9enable_ifIXntsr13span_internal6IsViewIT0_EE5valueEDTclsr4abslE8MakeSpanclsr13span_internalE7GetDatafp_Ecldtfp_4sizeEEEE4typeERS7_:
  751|  11.2k|                                                c.size()))> {
  752|  11.2k|  return MakeSpan(span_internal::GetData(c), c.size());
  753|  11.2k|}
_ZN4absl12lts_202608178MakeSpanITpTnRiJEcEENS0_4SpanIT0_EEPS4_m:
  727|  11.2k|                           size_t size) noexcept {
  728|  11.2k|  return Span<T>(ptr, size);
  729|  11.2k|}
_ZN4absl12lts_202608174SpanIKcEC2INS1_IcEEvS5_TnNSt3__19enable_ifIXsr6IsViewIT_EE5valueEiE4typeELi0EEERKS8_:
  267|  5.60k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608178MakeSpanITpTnRiJENS0_13InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS5_EEEEEENS6_9enable_ifIXntsr13span_internal6IsViewIT0_EE5valueEDTclsr4abslE8MakeSpanclsr13span_internalE7GetDatafp_Ecldtfp_4sizeEEEE4typeERSB_:
  751|  5.60k|                                                c.size()))> {
  752|  5.60k|  return MakeSpan(span_internal::GetData(c), c.size());
  753|  5.60k|}
_ZN4absl12lts_202608178MakeSpanITpTnRiJEPNS0_7LogSinkEEENS0_4SpanIT0_EEPS6_m:
  727|  11.2k|                           size_t size) noexcept {
  728|  11.2k|  return Span<T>(ptr, size);
  729|  11.2k|}
_ZN4absl12lts_202608174SpanIPNS0_7LogSinkEEC2EPS3_m:
  228|  11.2k|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608174SpanIcEC2INSt3__15arrayIcLm15000EEEvS6_iEERT_:
  244|  5.60k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608174SpanIcE13remove_suffixEm:
  439|  5.60k|  void remove_suffix(size_type n) noexcept {
  440|  5.60k|    absl::base_internal::HardeningAssertGE(size(), n);
  441|  5.60k|    len_ -= n;
  442|  5.60k|  }
_ZNK4absl12lts_202608174SpanIcEixEm:
  336|   353k|  constexpr reference operator[](size_type i) const noexcept {
  337|   353k|    absl::base_internal::HardeningAssertLT(i, size());
  338|   353k|    return ptr_[i];
  339|   353k|  }
_ZNK4absl12lts_202608174SpanIKcEixEm:
  336|   556k|  constexpr reference operator[](size_type i) const noexcept {
  337|   556k|    absl::base_internal::HardeningAssertLT(i, size());
  338|   556k|    return ptr_[i];
  339|   556k|  }
_ZNK4absl12lts_202608174SpanIKcE7subspanEmm:
  465|  75.5k|  constexpr Span subspan(size_type pos = 0, size_type len = npos) const {
  466|  75.5k|    return (pos <= size()) ? Span(data() + pos, (std::min)(size() - pos, len))
  ------------------
  |  Branch (466:12): [True: 75.5k, False: 0]
  ------------------
  467|  75.5k|                           : (ThrowStdOutOfRange("pos > size()"), Span());
  468|  75.5k|  }
_ZN4absl12lts_202608178MakeSpanITpTnRiJEjLm512EEENS0_4SpanIT0_EERAT1__S4_:
  757|      1|    T (&array ABSL_ATTRIBUTE_LIFETIME_BOUND)[N]) noexcept {
  758|      1|  return Span<T>(array, N);
  759|      1|}
_ZNK4absl12lts_202608174SpanIKjE5beginEv:
  373|      8|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202608174SpanIKjE4dataEv:
  316|     16|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIKjE3endEv:
  386|      8|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202608174SpanIKjE4sizeEv:
  321|      8|  constexpr size_type size() const noexcept { return len_; }
_ZN4absl12lts_202608174SpanIKjEC2INS1_IjEEvS5_TnNSt3__19enable_ifIXsr6IsViewIT_EE5valueEiE4typeELi0EEERKS8_:
  267|      8|      : Span(span_internal::GetData(v), v.size()) {}
_ZNK4absl12lts_202608174SpanIjE5emptyEv:
  331|      1|  constexpr bool empty() const noexcept { return size() == 0; }
_ZN4absl12lts_202608174SpanINSt3__115source_locationEEC2Ev:
  225|  2.78k|  constexpr Span() noexcept : Span(nullptr, 0) {}
_ZN4absl12lts_202608174SpanINSt3__115source_locationEEC2EPS3_m:
  228|  4.64k|      : ptr_(array), len_(length) {}
_ZNK4absl12lts_202608174SpanINSt3__115source_locationEE4dataEv:
  316|  2.78k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanINSt3__115source_locationEE4sizeEv:
  321|  2.78k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202608174SpanIKNS0_19str_format_internal13FormatArgImplEEixEm:
  336|  22.6k|  constexpr reference operator[](size_type i) const noexcept {
  337|  22.6k|    absl::base_internal::HardeningAssertLT(i, size());
  338|  22.6k|    return ptr_[i];
  339|  22.6k|  }
_ZNK4absl12lts_202608174SpanIPNS0_7LogSinkEE5beginEv:
  373|  11.2k|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202608174SpanIPNS0_7LogSinkEE4dataEv:
  316|  22.4k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202608174SpanIPNS0_7LogSinkEE3endEv:
  386|  11.2k|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202608174SpanIPNS0_7LogSinkEE4sizeEv:
  321|  11.2k|  constexpr size_type size() const noexcept { return len_; }
_ZN4absl12lts_202608178MakeSpanITpTnRiJENSt3__16vectorIPNS0_7LogSinkENS3_9allocatorIS6_EEEEEENS3_9enable_ifIXntsr13span_internal6IsViewIT0_EE5valueEDTclsr4abslE8MakeSpanclsr13span_internalE7GetDatafp_Ecldtfp_4sizeEEEE4typeERSB_:
  751|  5.60k|                                                c.size()))> {
  752|  5.60k|  return MakeSpan(span_internal::GetData(c), c.size());
  753|  5.60k|}

_ZN6google8protobuf8internal7cleanup9ChunkList7CleanupERKNS1_11SerialArenaE:
  140|  20.4k|void ChunkList::Cleanup(const SerialArena& arena) {
  141|  20.4k|  Chunk* c = head_;
  142|  20.4k|  if (c == nullptr) return;
  ------------------
  |  Branch (142:7): [True: 20.4k, False: 0]
  ------------------
  143|      0|  GetDeallocator deallocator(arena.parent_.AllocPolicy());
  144|       |
  145|       |  // Iterate backwards in order to destroy in the right order.
  146|      0|  CleanupNode* it = next_ - 1;
  147|      0|  while (true) {
  ------------------
  |  Branch (147:10): [True: 0, Folded]
  ------------------
  148|      0|    CleanupNode* first = c->First();
  149|       |    // A prefetch distance of 8 here was chosen arbitrarily.
  150|      0|    constexpr int kPrefetchDistance = 8;
  151|      0|    CleanupNode* prefetch = it;
  152|       |    // Prefetch the first kPrefetchDistance nodes.
  153|      0|    for (int i = 0; prefetch >= first && i < kPrefetchDistance;
  ------------------
  |  Branch (153:21): [True: 0, False: 0]
  |  Branch (153:42): [True: 0, False: 0]
  ------------------
  154|      0|         --prefetch, ++i) {
  155|      0|      prefetch->Prefetch();
  156|      0|    }
  157|       |    // For the middle nodes, run destructor and prefetch the node
  158|       |    // kPrefetchDistance after the current one.
  159|      0|    for (; prefetch >= first; --it, --prefetch) {
  ------------------
  |  Branch (159:12): [True: 0, False: 0]
  ------------------
  160|      0|      it->Destroy();
  161|      0|      prefetch->Prefetch();
  162|      0|    }
  163|       |    // Note: we could consider prefetching `next` chunk earlier.
  164|      0|    absl::PrefetchToLocalCacheNta(c->next);
  165|       |    // Destroy the rest without prefetching.
  166|      0|    for (; it >= first; --it) {
  ------------------
  |  Branch (166:12): [True: 0, False: 0]
  ------------------
  167|      0|      it->Destroy();
  168|      0|    }
  169|      0|    Chunk* next = c->next;
  170|      0|    deallocator({c, c->size});
  171|      0|    if (next == nullptr) return;
  ------------------
  |  Branch (171:9): [True: 0, False: 0]
  ------------------
  172|      0|    c = next;
  173|      0|    it = c->Last();
  174|      0|  };
  175|      0|}
_ZN6google8protobuf8internal11SerialArena23AllocateAlignedFallbackEm:
  264|   337k|void* SerialArena::AllocateAlignedFallback(size_t n) {
  265|   337k|  AllocateNewBlock(n);
  266|   337k|  void* ret = nullptr;
  267|   337k|  bool res = MaybeAllocateAligned(n, &ret);
  268|   337k|  ABSL_DCHECK(res);
  ------------------
  |  |   47|   337k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|   337k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   674k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|   337k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   674k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   674k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 337k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   337k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 337k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   337k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 337k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   674k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   674k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|   337k|  return ret;
  270|   337k|}
_ZN6google8protobuf8internal11SerialArena31AllocateFromStringBlockFallbackEv:
  273|   510k|void* SerialArena::AllocateFromStringBlockFallback() {
  274|   510k|  ABSL_DCHECK_EQ(string_block_unused_.load(std::memory_order_relaxed), 0U);
  ------------------
  |  |   74|   510k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|   510k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   510k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 510k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   510k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|   510k|  StringBlock* sb = string_block_.load(std::memory_order_relaxed);
  276|   510k|  if (sb) {
  ------------------
  |  Branch (276:7): [True: 495k, False: 14.5k]
  ------------------
  277|   495k|    AddSpaceUsed(sb->effective_size());
  278|   495k|  }
  279|       |
  280|   510k|  void* ptr;
  281|   510k|  StringBlock* new_sb;
  282|   510k|  size_t size = StringBlock::NextSize(sb);
  283|   510k|  if (MaybeAllocateAligned(size, &ptr)) {
  ------------------
  |  Branch (283:7): [True: 304k, False: 205k]
  ------------------
  284|       |    // Correct space_used_ to avoid double counting
  285|   304k|    AddSpaceUsed(-size);
  286|   304k|    new_sb = StringBlock::Emplace(ptr, size, sb);
  287|   304k|  } else {
  288|   205k|    new_sb = StringBlock::New(sb);
  289|   205k|    AddSpaceAllocated(new_sb->allocated_size());
  290|   205k|  }
  291|   510k|  string_block_.store(new_sb, std::memory_order_release);
  292|   510k|  size_t unused = new_sb->effective_size() - sizeof(std::string);
  293|   510k|  string_block_unused_.store(unused, std::memory_order_relaxed);
  294|   510k|  return new_sb->AtOffset(unused);
  295|   510k|}
_ZN6google8protobuf8internal11SerialArena16FreeStringBlocksEPNS1_11StringBlockEm:
  361|  14.5k|                                     size_t unused_bytes) {
  362|  14.5k|  ABSL_DCHECK(string_block != nullptr);
  ------------------
  |  |   47|  14.5k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  14.5k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  29.0k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  14.5k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  29.0k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  29.0k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14.5k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  14.5k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  14.5k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14.5k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  29.0k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  29.0k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  363|  14.5k|  StringBlock* next = string_block->next();
  364|  14.5k|  absl::PrefetchToLocalCacheNta(next);
  365|  14.5k|  std::string* end = string_block->end();
  366|   509k|  for (std::string* s = string_block->AtOffset(unused_bytes); s != end; ++s) {
  ------------------
  |  Branch (366:63): [True: 494k, False: 14.5k]
  ------------------
  367|   494k|    s->~basic_string();
  368|   494k|  }
  369|  14.5k|  size_t deallocated = StringBlock::Delete(string_block);
  370|       |
  371|   510k|  while ((string_block = next) != nullptr) {
  ------------------
  |  Branch (371:10): [True: 495k, False: 14.5k]
  ------------------
  372|   495k|    next = string_block->next();
  373|   495k|    absl::PrefetchToLocalCacheNta(next);
  374|   160M|    for (std::string& s : *string_block) {
  ------------------
  |  Branch (374:25): [True: 160M, False: 495k]
  ------------------
  375|   160M|      s.~basic_string();
  376|   160M|    }
  377|   495k|    deallocated += StringBlock::Delete(string_block);
  378|   495k|  }
  379|  14.5k|  return deallocated;
  380|  14.5k|}
_ZN6google8protobuf8internal15ThreadSafeArena22SentrySerialArenaChunkEv:
  532|  20.4k|ThreadSafeArena::SerialArenaChunk* ThreadSafeArena::SentrySerialArenaChunk() {
  533|       |  // const_cast is okay because the sentry chunk is never mutated. Also,
  534|       |  // reinterpret_cast is acceptable here as it should be identical to
  535|       |  // SerialArenaChunk with zero payload. This is a necessary trick to
  536|       |  // constexpr initialize kSentryArenaChunk.
  537|  20.4k|  return reinterpret_cast<SerialArenaChunk*>(
  538|  20.4k|      const_cast<SerialArenaChunkHeader*>(&kSentryArenaChunk));
  539|  20.4k|}
_ZN6google8protobuf8internal15ThreadSafeArenaC2Ev:
  560|  20.4k|ThreadSafeArena::ThreadSafeArena() : first_arena_(*this) { Init(); }
_ZN6google8protobuf8internal15ThreadSafeArena18GetNextLifeCycleIdEv:
  649|  20.4k|uint64_t ThreadSafeArena::GetNextLifeCycleId() {
  650|  20.4k|  ThreadCache& tc = thread_cache();
  651|  20.4k|  uint64_t id = tc.next_lifecycle_id;
  652|  20.4k|  constexpr uint64_t kInc = ThreadCache::kPerThreadIds;
  653|  20.4k|  if (ABSL_PREDICT_FALSE((id & (kInc - 1)) == 0)) {
  ------------------
  |  |  190|  20.4k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 80, False: 20.3k]
  |  |  |  Branch (190:49): [Folded, False: 20.4k]
  |  |  |  Branch (190:58): [True: 80, False: 20.3k]
  |  |  ------------------
  ------------------
  654|       |    // On platforms that don't support uint64_t atomics we can certainly not
  655|       |    // afford to increment by large intervals and expect uniqueness due to
  656|       |    // wrapping, hence we only add by 1.
  657|     80|    id = lifecycle_id_.fetch_add(1, std::memory_order_relaxed) * kInc;
  658|     80|  }
  659|  20.4k|  tc.next_lifecycle_id = id + 1;
  660|  20.4k|  return id;
  661|  20.4k|}
_ZN6google8protobuf8internal15ThreadSafeArena4InitEv:
  730|  20.4k|void ThreadSafeArena::Init() {
  731|  20.4k|  tag_and_id_ = GetNextLifeCycleId();
  732|  20.4k|  arena_stats_ = Sample();
  733|  20.4k|  head_.store(SentrySerialArenaChunk(), std::memory_order_relaxed);
  734|  20.4k|  first_owner_ = &thread_cache();
  735|       |
  736|       |  // Record allocation for the first block that was either user-provided or
  737|       |  // newly allocated.
  738|  20.4k|  ThreadSafeArenaStats::RecordAllocateStats(
  739|  20.4k|      arena_stats_.MutableStats(),
  740|  20.4k|      /*used=*/0,
  741|  20.4k|      /*allocated=*/first_arena_.SpaceAllocated(),
  742|  20.4k|      /*wasted=*/0);
  743|       |
  744|  20.4k|  CacheSerialArena(&first_arena_);
  745|  20.4k|}
_ZN6google8protobuf8internal15ThreadSafeArenaD2Ev:
  747|  20.4k|ThreadSafeArena::~ThreadSafeArena() {
  748|       |  // Have to do this in a first pass, because some of the destructors might
  749|       |  // refer to memory in other blocks.
  750|  20.4k|  CleanupList();
  751|       |
  752|  20.4k|  auto mem = Free();
  753|  20.4k|  if (alloc_policy_.is_user_owned_initial_block()) {
  ------------------
  |  Branch (753:7): [True: 0, False: 20.4k]
  ------------------
  754|       |    // Unpoison the initial block, now that it's going back to the user.
  755|      0|    internal::UnpoisonMemoryRegion(mem.p, mem.n);
  756|  20.4k|  } else if (mem.n > 0) {
  ------------------
  |  Branch (756:14): [True: 0, False: 20.4k]
  ------------------
  757|      0|    GetDeallocator(alloc_policy_.get())(mem);
  758|      0|  }
  759|  20.4k|}
_ZN6google8protobuf8internal15ThreadSafeArena4FreeEv:
  761|  20.4k|SizedPtr ThreadSafeArena::Free() {
  762|  20.4k|  auto deallocator = GetDeallocator(alloc_policy_.get());
  763|       |
  764|  20.4k|  WalkSerialArenaChunk([&](SerialArenaChunk* chunk) {
  765|  20.4k|    absl::Span<std::atomic<SerialArena*>> span = chunk->arenas();
  766|       |    // Walks arenas backward to handle the first serial arena the last. Freeing
  767|       |    // in reverse-order to the order in which objects were created may not be
  768|       |    // necessary to Free and we should revisit this. (b/247560530)
  769|  20.4k|    for (auto it = span.rbegin(); it != span.rend(); ++it) {
  770|  20.4k|      SerialArena* serial = it->load(std::memory_order_relaxed);
  771|  20.4k|      ABSL_DCHECK_NE(serial, nullptr);
  772|       |      // Always frees the first block of "serial" as it cannot be user-provided.
  773|  20.4k|      SizedPtr mem = serial->Free(deallocator);
  774|  20.4k|      ABSL_DCHECK_NE(mem.p, nullptr);
  775|  20.4k|      deallocator(mem);
  776|  20.4k|    }
  777|       |
  778|       |    // Delete the chunk as we're done with it.
  779|  20.4k|    internal::SizedDelete(chunk,
  780|  20.4k|                          SerialArenaChunk::AllocSize(chunk->capacity()));
  781|  20.4k|  });
  782|       |
  783|       |  // The first block of the first arena is special and let the caller handle it.
  784|  20.4k|  return first_arena_.Free(deallocator);
  785|  20.4k|}
_ZN6google8protobuf8internal15ThreadSafeArena23AllocateFromStringBlockEv:
  848|   161M|void* ThreadSafeArena::AllocateFromStringBlock() {
  849|   161M|  return GetSerialArena()->AllocateFromStringBlock();
  850|   161M|}
_ZN6google8protobuf8internal15ThreadSafeArena11CleanupListEv:
  926|  20.4k|void ThreadSafeArena::CleanupList() {
  927|       |  if constexpr (HasMemoryPoisoning()) {
  928|       |    UnpoisonAllArenaBlocks();
  929|       |  }
  930|       |
  931|  20.4k|  WalkSerialArenaChunk([](SerialArenaChunk* chunk) {
  932|  20.4k|    absl::Span<std::atomic<SerialArena*>> span = chunk->arenas();
  933|       |    // Walks arenas backward to handle the first serial arena the last.
  934|       |    // Destroying in reverse-order to the construction is often assumed by users
  935|       |    // and required not to break inter-object dependencies. (b/247560530)
  936|  20.4k|    for (auto it = span.rbegin(); it != span.rend(); ++it) {
  937|  20.4k|      SerialArena* serial = it->load(std::memory_order_relaxed);
  938|  20.4k|      ABSL_DCHECK_NE(serial, nullptr);
  939|  20.4k|      serial->CleanupList();
  940|  20.4k|    }
  941|  20.4k|  });
  942|       |  // First arena must be cleaned up last. (b/247560530)
  943|  20.4k|  first_arena_.CleanupList();
  944|  20.4k|}
_ZN6google8protobuf5Arena8AllocateEm:
  983|  92.8M|void* PROTOBUF_NONNULL Arena::Allocate(size_t n) {
  984|  92.8M|  return impl_.AllocateAligned(n);
  985|  92.8M|}
_ZN6google8protobuf5Arena16AllocateForArrayEm:
  987|  54.0k|void* PROTOBUF_NONNULL Arena::AllocateForArray(size_t n) {
  988|  54.0k|  return impl_.AllocateAligned<internal::AllocationClient::kArray>(n);
  989|  54.0k|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114AllocationSizeEmmm:
   54|   337k|                             size_t max_size) {
   55|   337k|  if (last_size == 0) return start_size;
  ------------------
  |  Branch (55:7): [True: 20.4k, False: 317k]
  ------------------
   56|       |  // Double the current block size, up to a limit.
   57|   317k|  return std::min(2 * last_size, max_size);
   58|   337k|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114AllocateMemoryERKNS1_16AllocationPolicyEm:
   60|   337k|SizedPtr AllocateMemory(const AllocationPolicy& policy, size_t size) {
   61|   337k|  if (policy.block_alloc == nullptr) {
  ------------------
  |  Branch (61:7): [True: 337k, False: 0]
  ------------------
   62|   337k|    return AllocateAtLeast(size);
   63|   337k|  }
   64|      0|  return {policy.block_alloc(size), size};
   65|   337k|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114GetDeallocatorC2EPKNS1_16AllocationPolicyE:
   95|  20.4k|      : dealloc_(policy ? policy->block_dealloc : nullptr) {}
  ------------------
  |  Branch (95:18): [True: 0, False: 20.4k]
  ------------------
arena.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_114GetDeallocatorclENS1_8SizedPtrE:
   97|   337k|  void operator()(SizedPtr mem) const {
   98|   337k|    if (dealloc_) {
  ------------------
  |  Branch (98:9): [True: 0, False: 337k]
  ------------------
   99|      0|      dealloc_(mem.p, mem.n);
  100|   337k|    } else {
  101|   337k|      internal::SizedDelete(mem.p, mem.n);
  102|   337k|    }
  103|   337k|  }
_ZN6google8protobuf8internal11SerialArena16AllocateNewBlockEm:
  305|   337k|void SerialArena::AllocateNewBlock(size_t n) {
  306|   337k|  size_t used = 0;
  307|   337k|  size_t wasted = 0;
  308|   337k|  ArenaBlock* old_head = head();
  309|   337k|  if (!old_head->IsSentry()) {
  ------------------
  |  Branch (309:7): [True: 317k, False: 20.4k]
  ------------------
  310|       |    // Record how much used in this block.
  311|   317k|    used = static_cast<size_t>(ptr() - old_head->Pointer(kBlockHeaderSize));
  312|   317k|    wasted = old_head->size - used - kBlockHeaderSize;
  313|   317k|    AddSpaceUsed(used);
  314|   317k|  }
  315|       |
  316|       |  // TODO: Evaluate if pushing unused space into the cached blocks is a
  317|       |  // win. In preliminary testing showed increased memory savings as expected,
  318|       |  // but with a CPU regression. The regression might have been an artifact of
  319|       |  // the microbenchmark.
  320|       |
  321|   337k|  auto mem = AllocateBlock(parent_.AllocPolicy(), old_head->size, n);
  322|   337k|  AddSpaceAllocated(mem.n);
  323|   337k|  ThreadSafeArenaStats::RecordAllocateStats(parent_.arena_stats_.MutableStats(),
  324|   337k|                                            /*used=*/used,
  325|   337k|                                            /*allocated=*/mem.n, wasted);
  326|   337k|  auto* new_head = new (mem.p) ArenaBlock{old_head, mem.n};
  327|   337k|  set_range(new_head->Pointer(kBlockHeaderSize), new_head->Limit());
  328|       |  // Previous writes must take effect before writing new head.
  329|   337k|  head_.store(new_head, std::memory_order_release);
  330|       |
  331|   337k|  internal::PoisonMemoryRegion(ptr(), limit_ - ptr());
  332|   337k|}
_ZN6google8protobuf8internal11SerialArenaC2ERNS1_15ThreadSafeArenaE:
  210|  20.4k|    : head_{SentryArenaBlock()}, parent_{parent} {}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_116SentryArenaBlockEv:
   48|  20.4k|ArenaBlock* SentryArenaBlock() {
   49|       |  // const_cast<> is okay as kSentryArenaBlock will never be mutated.
   50|  20.4k|  return const_cast<ArenaBlock*>(&kSentryArenaBlock);
   51|  20.4k|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_113AllocateBlockEPKNS1_16AllocationPolicyEmm:
   68|   337k|                       size_t min_bytes) {
   69|   337k|  AllocationPolicy policy;  // default policy
   70|   337k|  if (policy_ptr) policy = *policy_ptr;
  ------------------
  |  Branch (70:7): [True: 0, False: 337k]
  ------------------
   71|   337k|  size_t size =
   72|   337k|      AllocationSize(last_size, policy.start_block_size, policy.max_block_size);
   73|       |  // Verify that min_bytes + kBlockHeaderSize won't overflow.
   74|   337k|  ABSL_CHECK_LE(min_bytes, std::numeric_limits<size_t>::max() -
  ------------------
  |  |   54|   337k|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   53|   337k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|   337k|  while (const char* absl_nullable absl_log_internal_check_op_result           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (68:36): [True: 0, False: 337k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|   337k|         [[maybe_unused]] = ::absl::log_internal::name##Impl(                  \
  |  |  |  |  |  |   70|   337k|             ::absl::log_internal::GetReferenceableValue(val1),                \
  |  |  |  |  |  |   71|   337k|             ::absl::log_internal::GetReferenceableValue(val2),                \
  |  |  |  |  |  |   72|   337k|             ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text " " #op          \
  |  |  |  |  |  |   73|   337k|                                                              " " val2_text))) \
  |  |  |  |  |  |   74|   337k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|  ABSL_LOG_INTERNAL_CHECK(::absl::implicit_cast<const char* absl_nonnull>(     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|                              absl_log_internal_check_op_result))              \
  |  |  |  |  |  |   77|      0|      .InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|   337k|                               SerialArena::kBlockHeaderSize);
   76|   337k|  size = std::max(size, SerialArena::kBlockHeaderSize + min_bytes);
   77|       |
   78|   337k|  return AllocateMemory(policy, size);
   79|   337k|}
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk8IsSentryEv:
  431|  40.8k|  bool IsSentry() const { return capacity() == 0; }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk8capacityEv:
  441|  40.8k|  uint32_t capacity() const { return header().capacity; }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk6headerEv:
  511|  40.8k|  const SerialArenaChunkHeader& header() const {
  512|  40.8k|    return *layout_type::Partial().Pointer<kHeader>(ptr());
  513|  40.8k|  }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk3ptrEv:
  505|  40.8k|  const char* ptr() const { return reinterpret_cast<const char*>(this); }
arena.cc:_ZN6google8protobuf8internal11SerialArena4FreeINS1_12_GLOBAL__N_114GetDeallocatorEEENS1_8SizedPtrET_:
  250|  20.4k|SizedPtr SerialArena::Free(Deallocator deallocator) {
  251|  20.4k|  FreeStringBlocks();
  252|       |
  253|  20.4k|  ArenaBlock* b = head();
  254|  20.4k|  SizedPtr mem = {b, b->size};
  255|   357k|  while (b->next) {
  ------------------
  |  Branch (255:10): [True: 337k, False: 20.4k]
  ------------------
  256|   337k|    b = b->next;  // We must first advance before deleting this block
  257|   337k|    deallocator(mem);
  258|   337k|    mem = {b, b->size};
  259|   337k|  }
  260|  20.4k|  return mem;
  261|  20.4k|}
arena.cc:_ZN6google8protobuf8internal15ThreadSafeArena20WalkSerialArenaChunkIZNS2_4FreeEvE3$_0EEvT_:
  864|  20.4k|void ThreadSafeArena::WalkSerialArenaChunk(Callback fn) {
  865|       |  // By omitting an Acquire barrier we help the sanitizer that any user code
  866|       |  // that doesn't properly synchronize Reset() or the destructor will throw a
  867|       |  // TSAN warning.
  868|  20.4k|  SerialArenaChunk* chunk = head_.load(std::memory_order_relaxed);
  869|       |
  870|  20.4k|  while (!chunk->IsSentry()) {
  ------------------
  |  Branch (870:10): [True: 0, False: 20.4k]
  ------------------
  871|       |    // Cache next chunk in case this chunk is destroyed.
  872|      0|    SerialArenaChunk* next_chunk = chunk->next_chunk();
  873|       |    // Prefetch the next chunk.
  874|      0|    absl::PrefetchToLocalCache(next_chunk);
  875|      0|    fn(chunk);
  876|      0|    chunk = next_chunk;
  877|      0|  }
  878|  20.4k|}
arena.cc:_ZN6google8protobuf8internal15ThreadSafeArena20WalkSerialArenaChunkIZNS2_11CleanupListEvE3$_0EEvT_:
  864|  20.4k|void ThreadSafeArena::WalkSerialArenaChunk(Callback fn) {
  865|       |  // By omitting an Acquire barrier we help the sanitizer that any user code
  866|       |  // that doesn't properly synchronize Reset() or the destructor will throw a
  867|       |  // TSAN warning.
  868|  20.4k|  SerialArenaChunk* chunk = head_.load(std::memory_order_relaxed);
  869|       |
  870|  20.4k|  while (!chunk->IsSentry()) {
  ------------------
  |  Branch (870:10): [True: 0, False: 20.4k]
  ------------------
  871|       |    // Cache next chunk in case this chunk is destroyed.
  872|      0|    SerialArenaChunk* next_chunk = chunk->next_chunk();
  873|       |    // Prefetch the next chunk.
  874|      0|    absl::PrefetchToLocalCache(next_chunk);
  875|      0|    fn(chunk);
  876|      0|    chunk = next_chunk;
  877|      0|  }
  878|  20.4k|}

_ZN6google8protobuf5ArenaC2Ev:
  293|  20.4k|  inline Arena() : impl_() {}
_ZN6google8protobuf5ArenaD2Ev:
  318|  20.4k|  inline ~Arena() = default;
_ZN6google8protobuf5Arena16DefaultConstructIN13sentencepiece31SentencePieceText_SentencePieceEEEPvPS1_:
 1134|  92.7M|Arena::DefaultConstruct(Arena* PROTOBUF_NULLABLE arena) {
 1135|       |  if constexpr (internal::FieldHasArenaOffset<T>()) {
 1136|       |    if (arena != nullptr) {
 1137|       |      using ArenaRepT = typename internal::FieldArenaRep<T>::Type;
 1138|       |      static_assert(is_destructor_skippable<ArenaRepT>::value);
 1139|       |
 1140|       |      void* mem = arena->AllocateAligned(sizeof(ArenaRepT));
 1141|       |      ArenaRepT* arena_rep = new (mem) ArenaRepT(arena);
 1142|       |      return internal::FieldArenaRep<T>::Get(arena_rep);
 1143|       |    } else {
 1144|       |      static_assert(is_destructor_skippable<T>::value);
 1145|       |      // Fields which use arena offsets don't have constructors that take an
 1146|       |      // arena pointer. Since the arena is nullptr, it is safe to default
 1147|       |      // construct the object.
 1148|       |      return new (internal::Allocate(sizeof(T))) T();
 1149|       |    }
 1150|  92.7M|  } else {
 1151|  92.7M|    static_assert(is_destructor_skippable<T>::value);
 1152|  92.7M|    void* mem = arena != nullptr ? arena->AllocateAligned(sizeof(T))
  ------------------
  |  Branch (1152:17): [True: 92.7M, False: 0]
  ------------------
 1153|  92.7M|                                 : internal::Allocate(sizeof(T));
 1154|       |    if constexpr (internal::HasDeprecatedArenaConstructor<T>()) {
 1155|       |      return new (mem) T(internal::InternalVisibility(), arena);
 1156|  92.7M|    } else {
 1157|  92.7M|      return new (mem) T(arena);
 1158|  92.7M|    }
 1159|  92.7M|  }
 1160|  92.7M|}
_ZN6google8protobuf5Arena15AllocateAlignedEmm:
  406|  92.8M|  AllocateAligned(size_t size, size_t align = 8) {
  407|  92.8M|    if (align <= internal::ArenaAlignDefault::align) {
  ------------------
  |  Branch (407:9): [True: 92.8M, False: 0]
  ------------------
  408|  92.8M|      return Allocate(internal::ArenaAlignDefault::Ceil(size));
  409|  92.8M|    } else {
  410|       |      // We are wasting space by over allocating align - 8 bytes. Compared
  411|       |      // to a dedicated function that takes current alignment in consideration.
  412|       |      // Such a scheme would only waste (align - 8)/2 bytes on average, but
  413|       |      // requires a dedicated function in the outline arena allocation
  414|       |      // functions. Possibly re-evaluate tradeoffs later.
  415|      0|      auto align_as = internal::ArenaAlignAs(align);
  416|      0|      return align_as.Ceil(Allocate(align_as.Padded(size)));
  417|      0|    }
  418|  92.8M|  }
_ZN6google8protobuf5Arena16DefaultConstructIN13sentencepiece17SentencePieceTextEEEPvPS1_:
 1134|  18.1k|Arena::DefaultConstruct(Arena* PROTOBUF_NULLABLE arena) {
 1135|       |  if constexpr (internal::FieldHasArenaOffset<T>()) {
 1136|       |    if (arena != nullptr) {
 1137|       |      using ArenaRepT = typename internal::FieldArenaRep<T>::Type;
 1138|       |      static_assert(is_destructor_skippable<ArenaRepT>::value);
 1139|       |
 1140|       |      void* mem = arena->AllocateAligned(sizeof(ArenaRepT));
 1141|       |      ArenaRepT* arena_rep = new (mem) ArenaRepT(arena);
 1142|       |      return internal::FieldArenaRep<T>::Get(arena_rep);
 1143|       |    } else {
 1144|       |      static_assert(is_destructor_skippable<T>::value);
 1145|       |      // Fields which use arena offsets don't have constructors that take an
 1146|       |      // arena pointer. Since the arena is nullptr, it is safe to default
 1147|       |      // construct the object.
 1148|       |      return new (internal::Allocate(sizeof(T))) T();
 1149|       |    }
 1150|  18.1k|  } else {
 1151|  18.1k|    static_assert(is_destructor_skippable<T>::value);
 1152|  18.1k|    void* mem = arena != nullptr ? arena->AllocateAligned(sizeof(T))
  ------------------
  |  Branch (1152:17): [True: 18.1k, False: 0]
  ------------------
 1153|  18.1k|                                 : internal::Allocate(sizeof(T));
 1154|       |    if constexpr (internal::HasDeprecatedArenaConstructor<T>()) {
 1155|       |      return new (mem) T(internal::InternalVisibility(), arena);
 1156|  18.1k|    } else {
 1157|  18.1k|      return new (mem) T(arena);
 1158|  18.1k|    }
 1159|  18.1k|  }
 1160|  18.1k|}
_ZN6google8protobuf5Arena6CreateIN13sentencepiece22NBestSentencePieceTextEJEEEPT_PS1_DpOT0_:
  330|  6.81k|      Create(Arena* PROTOBUF_NULLABLE arena, Args&&... args) {
  331|  6.81k|    if constexpr (is_arena_constructable<T>::value) {
  332|  6.81k|      using Type = std::remove_const_t<T>;
  333|       |      // DefaultConstruct/CopyConstruct are optimized for messages, which
  334|       |      // are both arena constructible and destructor skippable and they
  335|       |      // assume much. Don't use these functions unless the invariants
  336|       |      // hold.
  337|  6.81k|      if constexpr (is_destructor_skippable<T>::value) {
  338|  6.81k|        constexpr auto construct_type = GetConstructType<T, Args&&...>();
  339|       |        // We delegate to DefaultConstruct/CopyConstruct where appropriate
  340|       |        // because protobuf generated classes have external templates for
  341|       |        // these functions for code size reasons. When `if constexpr` is not
  342|       |        // available always use the fallback.
  343|  6.81k|        if constexpr (construct_type == ConstructType::kDefault) {
  344|  6.81k|          return static_cast<Type*>(DefaultConstruct<Type>(arena));
  345|       |        } else if constexpr (construct_type == ConstructType::kCopy) {
  346|       |          return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  347|       |        }
  348|  6.81k|      }
  349|      0|      return CreateArenaCompatible<Type>(arena, std::forward<Args>(args)...);
  350|       |    } else {
  351|       |      if (ABSL_PREDICT_FALSE(arena == nullptr)) {
  352|       |        return new T(std::forward<Args>(args)...);
  353|       |      }
  354|       |      return new (arena->AllocateInternal<T>()) T(std::forward<Args>(args)...);
  355|       |    }
  356|  6.81k|  }
_ZN6google8protobuf5Arena16DefaultConstructIN13sentencepiece22NBestSentencePieceTextEEEPvPS1_:
 1134|  6.81k|Arena::DefaultConstruct(Arena* PROTOBUF_NULLABLE arena) {
 1135|       |  if constexpr (internal::FieldHasArenaOffset<T>()) {
 1136|       |    if (arena != nullptr) {
 1137|       |      using ArenaRepT = typename internal::FieldArenaRep<T>::Type;
 1138|       |      static_assert(is_destructor_skippable<ArenaRepT>::value);
 1139|       |
 1140|       |      void* mem = arena->AllocateAligned(sizeof(ArenaRepT));
 1141|       |      ArenaRepT* arena_rep = new (mem) ArenaRepT(arena);
 1142|       |      return internal::FieldArenaRep<T>::Get(arena_rep);
 1143|       |    } else {
 1144|       |      static_assert(is_destructor_skippable<T>::value);
 1145|       |      // Fields which use arena offsets don't have constructors that take an
 1146|       |      // arena pointer. Since the arena is nullptr, it is safe to default
 1147|       |      // construct the object.
 1148|       |      return new (internal::Allocate(sizeof(T))) T();
 1149|       |    }
 1150|  6.81k|  } else {
 1151|  6.81k|    static_assert(is_destructor_skippable<T>::value);
 1152|  6.81k|    void* mem = arena != nullptr ? arena->AllocateAligned(sizeof(T))
  ------------------
  |  Branch (1152:17): [True: 6.81k, False: 0]
  ------------------
 1153|  6.81k|                                 : internal::Allocate(sizeof(T));
 1154|       |    if constexpr (internal::HasDeprecatedArenaConstructor<T>()) {
 1155|       |      return new (mem) T(internal::InternalVisibility(), arena);
 1156|  6.81k|    } else {
 1157|  6.81k|      return new (mem) T(arena);
 1158|  6.81k|    }
 1159|  6.81k|  }
 1160|  6.81k|}
_ZN6google8protobuf5Arena6CreateIN13sentencepiece17SentencePieceTextEJEEEPT_PS1_DpOT0_:
  330|  13.6k|      Create(Arena* PROTOBUF_NULLABLE arena, Args&&... args) {
  331|  13.6k|    if constexpr (is_arena_constructable<T>::value) {
  332|  13.6k|      using Type = std::remove_const_t<T>;
  333|       |      // DefaultConstruct/CopyConstruct are optimized for messages, which
  334|       |      // are both arena constructible and destructor skippable and they
  335|       |      // assume much. Don't use these functions unless the invariants
  336|       |      // hold.
  337|  13.6k|      if constexpr (is_destructor_skippable<T>::value) {
  338|  13.6k|        constexpr auto construct_type = GetConstructType<T, Args&&...>();
  339|       |        // We delegate to DefaultConstruct/CopyConstruct where appropriate
  340|       |        // because protobuf generated classes have external templates for
  341|       |        // these functions for code size reasons. When `if constexpr` is not
  342|       |        // available always use the fallback.
  343|  13.6k|        if constexpr (construct_type == ConstructType::kDefault) {
  344|  13.6k|          return static_cast<Type*>(DefaultConstruct<Type>(arena));
  345|       |        } else if constexpr (construct_type == ConstructType::kCopy) {
  346|       |          return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  347|       |        }
  348|  13.6k|      }
  349|      0|      return CreateArenaCompatible<Type>(arena, std::forward<Args>(args)...);
  350|       |    } else {
  351|       |      if (ABSL_PREDICT_FALSE(arena == nullptr)) {
  352|       |        return new T(std::forward<Args>(args)...);
  353|       |      }
  354|       |      return new (arena->AllocateInternal<T>()) T(std::forward<Args>(args)...);
  355|       |    }
  356|  13.6k|  }
_ZN6google8protobuf5Arena17ReturnArrayMemoryEPvm:
  695|  43.2k|  void ReturnArrayMemory(void* PROTOBUF_NONNULL p, size_t size) {
  696|  43.2k|    impl_.ReturnArrayMemory(p, size);
  697|  43.2k|  }
_ZN6google8protobuf5Arena23AllocateAlignedForArrayEmm:
  804|  54.0k|  void* PROTOBUF_NONNULL AllocateAlignedForArray(size_t n, size_t align) {
  805|  54.0k|    if (align <= internal::ArenaAlignDefault::align) {
  ------------------
  |  Branch (805:9): [True: 54.0k, False: 0]
  ------------------
  806|  54.0k|      return AllocateForArray(internal::ArenaAlignDefault::Ceil(n));
  807|  54.0k|    } else {
  808|       |      // We are wasting space by over allocating align - 8 bytes. Compared
  809|       |      // to a dedicated function that takes current alignment in consideration.
  810|       |      // Such a scheme would only waste (align - 8)/2 bytes on average, but
  811|       |      // requires a dedicated function in the outline arena allocation
  812|       |      // functions. Possibly re-evaluate tradeoffs later.
  813|      0|      auto align_as = internal::ArenaAlignAs(align);
  814|      0|      return align_as.Ceil(AllocateForArray(align_as.Padded(n)));
  815|      0|    }
  816|  54.0k|  }
_ZN6google8protobuf5Arena16AllocateInternalINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELb0EEEPvv:
 1191|   161M|inline void* PROTOBUF_NONNULL Arena::AllocateInternal<std::string, false>() {
 1192|   161M|  return impl_.AllocateFromStringBlock();
 1193|   161M|}
_ZN6google8protobuf5Arena6CreateINS0_8internal16InternalMetadata9ContainerINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEJEEEPT_PS1_DpOT0_:
  330|  23.2k|      Create(Arena* PROTOBUF_NULLABLE arena, Args&&... args) {
  331|       |    if constexpr (is_arena_constructable<T>::value) {
  332|       |      using Type = std::remove_const_t<T>;
  333|       |      // DefaultConstruct/CopyConstruct are optimized for messages, which
  334|       |      // are both arena constructible and destructor skippable and they
  335|       |      // assume much. Don't use these functions unless the invariants
  336|       |      // hold.
  337|       |      if constexpr (is_destructor_skippable<T>::value) {
  338|       |        constexpr auto construct_type = GetConstructType<T, Args&&...>();
  339|       |        // We delegate to DefaultConstruct/CopyConstruct where appropriate
  340|       |        // because protobuf generated classes have external templates for
  341|       |        // these functions for code size reasons. When `if constexpr` is not
  342|       |        // available always use the fallback.
  343|       |        if constexpr (construct_type == ConstructType::kDefault) {
  344|       |          return static_cast<Type*>(DefaultConstruct<Type>(arena));
  345|       |        } else if constexpr (construct_type == ConstructType::kCopy) {
  346|       |          return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  347|       |        }
  348|       |      }
  349|       |      return CreateArenaCompatible<Type>(arena, std::forward<Args>(args)...);
  350|  23.2k|    } else {
  351|  23.2k|      if (ABSL_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  190|  23.2k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 23.2k, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 23.2k]
  |  |  |  Branch (190:58): [True: 23.2k, False: 0]
  |  |  ------------------
  ------------------
  352|  23.2k|        return new T(std::forward<Args>(args)...);
  353|  23.2k|      }
  354|      0|      return new (arena->AllocateInternal<T>()) T(std::forward<Args>(args)...);
  355|  23.2k|    }
  356|  23.2k|  }
_ZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEPT_PS1_DpOT0_:
  330|  51.6M|      Create(Arena* PROTOBUF_NULLABLE arena, Args&&... args) {
  331|       |    if constexpr (is_arena_constructable<T>::value) {
  332|       |      using Type = std::remove_const_t<T>;
  333|       |      // DefaultConstruct/CopyConstruct are optimized for messages, which
  334|       |      // are both arena constructible and destructor skippable and they
  335|       |      // assume much. Don't use these functions unless the invariants
  336|       |      // hold.
  337|       |      if constexpr (is_destructor_skippable<T>::value) {
  338|       |        constexpr auto construct_type = GetConstructType<T, Args&&...>();
  339|       |        // We delegate to DefaultConstruct/CopyConstruct where appropriate
  340|       |        // because protobuf generated classes have external templates for
  341|       |        // these functions for code size reasons. When `if constexpr` is not
  342|       |        // available always use the fallback.
  343|       |        if constexpr (construct_type == ConstructType::kDefault) {
  344|       |          return static_cast<Type*>(DefaultConstruct<Type>(arena));
  345|       |        } else if constexpr (construct_type == ConstructType::kCopy) {
  346|       |          return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  347|       |        }
  348|       |      }
  349|       |      return CreateArenaCompatible<Type>(arena, std::forward<Args>(args)...);
  350|  51.6M|    } else {
  351|  51.6M|      if (ABSL_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  190|  51.6M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 796k, False: 50.8M]
  |  |  |  Branch (190:49): [Folded, False: 51.6M]
  |  |  |  Branch (190:58): [True: 796k, False: 50.8M]
  |  |  ------------------
  ------------------
  352|   796k|        return new T(std::forward<Args>(args)...);
  353|   796k|      }
  354|  50.8M|      return new (arena->AllocateInternal<T>()) T(std::forward<Args>(args)...);
  355|  51.6M|    }
  356|  51.6M|  }
_ZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJPKcmEEEPT_PS1_DpOT0_:
  330|   110M|      Create(Arena* PROTOBUF_NULLABLE arena, Args&&... args) {
  331|       |    if constexpr (is_arena_constructable<T>::value) {
  332|       |      using Type = std::remove_const_t<T>;
  333|       |      // DefaultConstruct/CopyConstruct are optimized for messages, which
  334|       |      // are both arena constructible and destructor skippable and they
  335|       |      // assume much. Don't use these functions unless the invariants
  336|       |      // hold.
  337|       |      if constexpr (is_destructor_skippable<T>::value) {
  338|       |        constexpr auto construct_type = GetConstructType<T, Args&&...>();
  339|       |        // We delegate to DefaultConstruct/CopyConstruct where appropriate
  340|       |        // because protobuf generated classes have external templates for
  341|       |        // these functions for code size reasons. When `if constexpr` is not
  342|       |        // available always use the fallback.
  343|       |        if constexpr (construct_type == ConstructType::kDefault) {
  344|       |          return static_cast<Type*>(DefaultConstruct<Type>(arena));
  345|       |        } else if constexpr (construct_type == ConstructType::kCopy) {
  346|       |          return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  347|       |        }
  348|       |      }
  349|       |      return CreateArenaCompatible<Type>(arena, std::forward<Args>(args)...);
  350|   110M|    } else {
  351|   110M|      if (ABSL_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  190|   110M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 110M]
  |  |  |  Branch (190:49): [Folded, False: 110M]
  |  |  |  Branch (190:58): [True: 0, False: 110M]
  |  |  ------------------
  ------------------
  352|      0|        return new T(std::forward<Args>(args)...);
  353|      0|      }
  354|   110M|      return new (arena->AllocateInternal<T>()) T(std::forward<Args>(args)...);
  355|   110M|    }
  356|   110M|  }
_ZN6google8protobuf5Arena11CreateArrayIcEEPT_PS1_m:
  429|  54.0k|      CreateArray(Arena* PROTOBUF_NULLABLE arena, size_t num_elements) {
  430|  54.0k|    static_assert(std::is_trivially_default_constructible_v<T>,
  431|  54.0k|                  "CreateArray requires a trivially constructible type");
  432|  54.0k|    static_assert(std::is_trivially_destructible_v<T>,
  433|  54.0k|                  "CreateArray requires a trivially destructible type");
  434|  54.0k|    ABSL_CHECK_LE(num_elements,
  ------------------
  |  |   54|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   53|  54.0k|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  54.0k|  while (const char* absl_nullable absl_log_internal_check_op_result           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (68:36): [True: 0, False: 54.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|  54.0k|         [[maybe_unused]] = ::absl::log_internal::name##Impl(                  \
  |  |  |  |  |  |   70|  54.0k|             ::absl::log_internal::GetReferenceableValue(val1),                \
  |  |  |  |  |  |   71|  54.0k|             ::absl::log_internal::GetReferenceableValue(val2),                \
  |  |  |  |  |  |   72|  54.0k|             ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text " " #op          \
  |  |  |  |  |  |   73|  54.0k|                                                              " " val2_text))) \
  |  |  |  |  |  |   74|  54.0k|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   75|  54.0k|  ABSL_LOG_INTERNAL_CHECK(::absl::implicit_cast<const char* absl_nonnull>(     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|  54.0k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|                              absl_log_internal_check_op_result))              \
  |  |  |  |  |  |   77|      0|      .InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|       |                  // Max rounded down to the 8 byte alignment.
  436|      0|                  (std::numeric_limits<size_t>::max() & ~7) / sizeof(T))
  437|      0|        << "Requested size is too large to fit into size_t.";
  438|  54.0k|    if (ABSL_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  190|  54.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 54.0k]
  |  |  |  Branch (190:49): [Folded, False: 54.0k]
  |  |  |  Branch (190:58): [True: 0, False: 54.0k]
  |  |  ------------------
  ------------------
  439|      0|      return new T[num_elements];
  440|  54.0k|    } else {
  441|       |      // We count on compiler to realize that if sizeof(T) is a multiple of
  442|       |      // 8 AlignUpTo can be elided.
  443|  54.0k|      return static_cast<T*>(
  444|  54.0k|          arena->AllocateAlignedForArray(sizeof(T) * num_elements, alignof(T)));
  445|  54.0k|    }
  446|  54.0k|  }

_ZN6google8protobuf8internal17ArenaAlignDefault4CeilEm:
   79|  92.8M|  static PROTOBUF_ALWAYS_INLINE constexpr size_t Ceil(size_t n) {
   80|  92.8M|    return (n + align - 1) & ~(align - 1);
   81|  92.8M|  }

_ZN6google8protobuf8internal16AllocationPolicy19DefaultMaxBlockSizeEv:
   30|   337k|  static size_t DefaultMaxBlockSize() {
   31|   337k|    return kCurrentDefaultMaxBlockSize;
   32|   337k|  }
_ZN6google8protobuf8internal25TaggedAllocationPolicyPtrC2Ev:
   50|  20.4k|  constexpr TaggedAllocationPolicyPtr() : policy_(0) {}
_ZN6google8protobuf8internal25TaggedAllocationPolicyPtr3getEv:
   60|  20.4k|  AllocationPolicy* get() {
   61|  20.4k|    return reinterpret_cast<AllocationPolicy*>(policy_ & kPtrMask);
   62|  20.4k|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr3getEv:
   63|   337k|  const AllocationPolicy* get() const {
   64|   337k|    return reinterpret_cast<const AllocationPolicy*>(policy_ & kPtrMask);
   65|   337k|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr27is_user_owned_initial_blockEv:
   73|  20.4k|  bool is_user_owned_initial_block() const {
   74|  20.4k|    return static_cast<bool>(get_mask<kUserOwnedInitialBlock>());
   75|  20.4k|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr8get_maskILm1EEEmv:
   91|  20.4k|  uintptr_t get_mask() const {
   92|  20.4k|    return policy_ & kMask;
   93|  20.4k|  }

_ZNK6google8protobuf8internal10LazyString4InitEv:
   58|      4|const std::string& LazyString::Init() const {
   59|      4|  static absl::Mutex mu{absl::kConstInit};
   60|      4|  mu.Lock();
   61|      4|  const std::string* res = inited_.load(std::memory_order_acquire);
   62|      4|  if (res == nullptr) {
  ------------------
  |  Branch (62:7): [True: 4, False: 0]
  ------------------
   63|      4|    auto init_value = init_value_;
   64|      4|    res = ::new (static_cast<void*>(string_buf_))
   65|      4|        std::string(init_value.ptr, init_value.size);
   66|      4|    inited_.store(res, std::memory_order_release);
   67|      4|  }
   68|      4|  mu.Unlock();
   69|      4|  return *res;
   70|      4|}
_ZN6google8protobuf8internal14ArenaStringPtr3SetENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPNS0_5ArenaE:
  105|   110M|void ArenaStringPtr::Set(absl::string_view value, Arena* arena) {
  106|   110M|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  107|   110M|  if (IsDefault()) {
  ------------------
  |  Branch (107:7): [True: 110M, False: 0]
  ------------------
  108|       |    // If we're not on an arena, skip straight to a true string to avoid
  109|       |    // possible copy cost later.
  110|   110M|    tagged_ptr_ = arena != nullptr ? CreateArenaString(*arena, value)
  ------------------
  |  Branch (110:19): [True: 110M, False: 3]
  ------------------
  111|   110M|                                   : CreateString(value);
  112|   110M|  } else {
  113|      0|    if (internal::DebugHardenForceCopyDefaultString()) {
  ------------------
  |  Branch (113:9): [Folded, False: 0]
  ------------------
  114|      0|      if (arena == nullptr) {
  ------------------
  |  Branch (114:11): [True: 0, False: 0]
  ------------------
  115|      0|        auto* old = tagged_ptr_.GetIfAllocated();
  116|      0|        tagged_ptr_ = CreateString(value);
  117|      0|        delete old;
  118|      0|      } else {
  119|      0|        auto* old = UnsafeMutablePointer();
  120|      0|        tagged_ptr_ = CreateArenaString(*arena, value);
  121|      0|        old->assign("garbagedata");
  122|      0|      }
  123|      0|    } else {
  124|      0|      UnsafeMutablePointer()->assign(value.data(), value.length());
  125|      0|    }
  126|      0|  }
  127|   110M|}
_ZN6google8protobuf8internal14ArenaStringPtr7MutableEPNS0_5ArenaE:
  169|   219M|std::string* ArenaStringPtr::Mutable(Arena* arena) {
  170|   219M|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  171|   219M|  if (tagged_ptr_.IsMutable()) {
  ------------------
  |  Branch (171:7): [True: 169M, False: 50.8M]
  ------------------
  172|   169M|    return tagged_ptr_.Get();
  173|   169M|  } else {
  174|  50.8M|    return MutableSlow(arena);
  175|  50.8M|  }
  176|   219M|}
_ZN6google8protobuf8internal14ArenaStringPtr13MutableNoCopyEPNS0_5ArenaE:
  188|   231k|std::string* ArenaStringPtr::MutableNoCopy(Arena* arena) {
  189|   231k|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  190|   231k|  if (tagged_ptr_.IsMutable()) {
  ------------------
  |  Branch (190:7): [True: 89.1k, False: 142k]
  ------------------
  191|  89.1k|    return tagged_ptr_.Get();
  192|   142k|  } else {
  193|   142k|    ABSL_DCHECK(IsDefault());
  ------------------
  |  |   47|   142k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|   142k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   285k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|   142k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   285k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   285k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 142k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   142k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 142k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   142k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 142k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   285k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   285k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|       |    // Allocate empty. The contents are not relevant.
  195|   142k|    return NewString(arena);
  196|   142k|  }
  197|   231k|}
_ZN6google8protobuf8internal14ArenaStringPtr7DestroyEv:
  243|  2.40M|void ArenaStringPtr::Destroy() { delete tagged_ptr_.GetIfAllocated(); }
arenastring.cc:_ZN6google8protobuf8internal12_GLOBAL__N_117CreateArenaStringERNS0_5ArenaENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
   85|   110M|TaggedStringPtr CreateArenaString(Arena& arena, absl::string_view s) {
   86|   110M|  TaggedStringPtr res;
   87|   110M|  res.SetMutableArena(Arena::Create<std::string>(&arena, s.data(), s.length()));
   88|   110M|  return res;
   89|   110M|}
arenastring.cc:_ZN6google8protobuf8internal12_GLOBAL__N_112CreateStringENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   76|      3|inline TaggedStringPtr CreateString(absl::string_view value) {
   77|      3|  TaggedStringPtr res;
   78|      3|  res.SetAllocated(new std::string(value.data(), value.length()));
   79|      3|  return res;
   80|      3|}
_ZN6google8protobuf8internal24ScopedCheckPtrInvariantsC2EPKNS1_15TaggedStringPtrE:
   97|   330M|  explicit ScopedCheckPtrInvariants(const TaggedStringPtr*) {}
_ZN6google8protobuf8internal14ArenaStringPtr11MutableSlowIJEEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPNS0_5ArenaEDpRKT_:
  201|  50.8M|                                         const Lazy&... lazy_default) {
  202|  50.8M|  ABSL_DCHECK(IsDefault());
  ------------------
  |  |   47|  50.8M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  50.8M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   101M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  50.8M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   101M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   101M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 50.8M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  50.8M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 50.8M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  50.8M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 50.8M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   101M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   101M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|       |
  204|       |  // For empty defaults, this ends up calling the default constructor which is
  205|       |  // more efficient than a copy construction from
  206|       |  // GetEmptyStringAlreadyInited().
  207|  50.8M|  return NewString(arena, lazy_default.get()...);
  208|  50.8M|}

_ZNK6google8protobuf8internal14ArenaStringPtr3GetEv:
  338|   147M|  PROTOBUF_NDEBUG_INLINE const std::string& Get() const {
  339|       |    // Unconditionally mask away the tag.
  340|   147M|    return *tagged_ptr_.Get();
  341|   147M|  }
_ZNK6google8protobuf8internal15TaggedStringPtr3GetEv:
  164|   316M|  inline std::string* Get() const {
  165|   316M|    return reinterpret_cast<std::string*>(as_int() & ~kMask);
  166|   316M|  }
_ZNK6google8protobuf8internal15TaggedStringPtr6as_intEv:
  200|   649M|  uintptr_t as_int() const { return reinterpret_cast<uintptr_t>(ptr_); }
_ZNK6google8protobuf8internal14ArenaStringPtr9IsDefaultEv:
  395|   110M|  inline bool IsDefault() const { return tagged_ptr_.IsDefault(); }
_ZNK6google8protobuf8internal15TaggedStringPtr9IsDefaultEv:
  141|   110M|  inline bool IsDefault() const { return (as_int() & kMask) == kDefault; }
_ZNK6google8protobuf8internal10LazyString3getEv:
   59|  54.3k|  const std::string& get() const {
   60|       |    // This check generates less code than a call-once invocation.
   61|  54.3k|    auto* res = inited_.load(std::memory_order_acquire);
   62|  54.3k|    if (ABSL_PREDICT_FALSE(res == nullptr)) return Init();
  ------------------
  |  |  190|  54.3k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 4, False: 54.2k]
  |  |  |  Branch (190:49): [Folded, False: 54.3k]
  |  |  |  Branch (190:58): [True: 4, False: 54.2k]
  |  |  ------------------
  ------------------
   63|  54.2k|    return *res;
   64|  54.3k|  }
_ZN6google8protobuf8internal14ArenaStringPtr3SetEPKcmPNS0_5ArenaE:
  484|   110M|inline void ArenaStringPtr::Set(const char* s, size_t n, Arena* arena) {
  485|   110M|  Set(absl::string_view{s, n}, arena);
  486|   110M|}
_ZN6google8protobuf8internal14ArenaStringPtr3SetEPKcPNS0_5ArenaE:
  479|      3|inline void ArenaStringPtr::Set(const char* s, Arena* arena) {
  480|      3|  ABSL_DCHECK(s != nullptr);
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|      3|  Set(absl::string_view{s}, arena);
  482|      3|}
_ZN6google8protobuf8internal15TaggedStringPtrC2EPKNS1_26GlobalEmptyStringConstexprE:
  108|   185M|      : ptr_(const_cast<void*>(static_cast<const void*>(ptr))) {}
_ZN6google8protobuf8internal15TaggedStringPtr12SetAllocatedEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  119|   142k|  inline std::string* SetAllocated(std::string* p) {
  120|   142k|    return TagAs(kAllocated, p);
  121|   142k|  }
_ZN6google8protobuf8internal15TaggedStringPtr15SetMutableArenaEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  133|   161M|  inline std::string* SetMutableArena(std::string* p) {
  134|   161M|    return TagAs(kMutableArena, p);
  135|   161M|  }
_ZNK6google8protobuf8internal15TaggedStringPtr9IsMutableEv:
  138|   220M|  inline bool IsMutable() const { return as_int() & kMutableBit; }
_ZNK6google8protobuf8internal15TaggedStringPtr14GetIfAllocatedEv:
  145|  2.40M|  inline std::string* GetIfAllocated() const {
  146|  2.40M|    auto allocated = as_int() ^ kAllocated;
  147|  2.40M|    if (allocated & kMask) return nullptr;
  ------------------
  |  Branch (147:9): [True: 2.25M, False: 142k]
  ------------------
  148|       |
  149|   142k|    auto ptr = reinterpret_cast<std::string*>(allocated);
  150|   142k|    PROTOBUF_ASSUME(ptr != nullptr);
  ------------------
  |  |  733|   142k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  151|   142k|    return ptr;
  152|  2.40M|  }
_ZN6google8protobuf8internal15TaggedStringPtr14assert_alignedEPKv:
  183|   161M|  static inline void assert_aligned(const void* p) {
  184|   161M|    static_assert(kMask <= alignof(void*), "Pointer underaligned for bit mask");
  185|   161M|    static_assert(kMask <= alignof(std::string),
  186|   161M|                  "std::string underaligned for bit mask");
  187|   161M|    ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(p) & kMask, 0UL);
  ------------------
  |  |   74|   161M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|   161M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   161M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 161M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   161M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|   161M|  }
_ZN6google8protobuf8internal15TaggedStringPtr5TagAsENS2_4TypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  193|   161M|  inline std::string* TagAs(Type type, std::string* p) {
  194|   161M|    ABSL_DCHECK(p != nullptr);
  ------------------
  |  |   47|   161M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|   161M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   322M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|   161M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   322M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   322M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 161M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   161M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 161M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   161M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 161M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   322M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   322M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|   161M|    assert_aligned(p);
  196|   161M|    ptr_ = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(p) | type);
  197|   161M|    return p;
  198|   161M|  }
_ZN6google8protobuf8internal14ArenaStringPtrC2EPNS0_5ArenaE:
  243|   185M|      : tagged_ptr_(&fixed_address_empty_string) {
  244|   185M|    if (DebugHardenForceCopyDefaultString()) {
  ------------------
  |  Branch (244:9): [Folded, False: 185M]
  ------------------
  245|      0|      Set(absl::string_view(""), arena);
  246|      0|    }
  247|   185M|  }
_ZN6google8protobuf8internal14ArenaStringPtr9NewStringIJEEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPNS0_5ArenaEDpOT_:
  399|  51.0M|  inline std::string* NewString(Arena* arena, Args&&... args) {
  400|  51.0M|    if (arena == nullptr) {
  ------------------
  |  Branch (400:9): [True: 142k, False: 50.8M]
  ------------------
  401|   142k|      auto* s = new std::string(std::forward<Args>(args)...);
  402|   142k|      return tagged_ptr_.SetAllocated(s);
  403|  50.8M|    } else {
  404|  50.8M|      auto* s = Arena::Create<std::string>(arena, std::forward<Args>(args)...);
  405|  50.8M|      return tagged_ptr_.SetMutableArena(s);
  406|  50.8M|    }
  407|  51.0M|  }

_ZN6google8protobuf8internal20ThreadSafeArenaStats19RecordAllocateStatsEPS2_mmm:
  169|   357k|                                  size_t /*allocated*/, size_t /*wasted*/) {}
_ZN6google8protobuf8internal26ThreadSafeArenaStatsHandleC2EPNS1_20ThreadSafeArenaStatsE:
  178|  20.4k|  explicit ThreadSafeArenaStatsHandle(ThreadSafeArenaStats*) {}
_ZN6google8protobuf8internal26ThreadSafeArenaStatsHandle12MutableStatsEv:
  182|   357k|  ThreadSafeArenaStats* MutableStats() { return nullptr; }
_ZN6google8protobuf8internal6SampleEv:
  198|  20.4k|[[nodiscard]] inline ThreadSafeArenaStatsHandle Sample() {
  199|  20.4k|  return ThreadSafeArenaStatsHandle(nullptr);
  200|  20.4k|}

_ZNK6google8protobuf8internal14MessageCreator3tagEv:
   98|  2.33M|  Tag tag() const { return tag_; }
_ZNK6google8protobuf8internal9ClassData16default_instanceEv:
  203|  7.81M|  const MessageLite* default_instance() const { return prototype; }
_ZNK6google8protobuf8internal13ClassDataLite4baseEv:
  227|  2.34M|  constexpr const ClassData* base() const { return this; }
_ZNK6google8protobuf8internal14MessageCreator15AllocateMessageINS0_5ArenaEEEPvPT_:
   90|  2.33M|  void* AllocateMessage(Arena* arena) const {
   91|  2.33M|    if (arena != nullptr) {
  ------------------
  |  Branch (91:9): [True: 0, False: 2.33M]
  ------------------
   92|      0|      return arena->AllocateAligned(allocation_size_);
   93|  2.33M|    } else {
   94|  2.33M|      return Allocate(allocation_size_);
   95|  2.33M|    }
   96|  2.33M|  }

_ZN6google8protobuf8internal13little_endian6ToHostEt:
  100|  3.74M|inline uint16_t ToHost(uint16_t value) {
  101|       |#if defined(ABSL_IS_BIG_ENDIAN)
  102|       |  return BSwap16(value);
  103|       |#else
  104|  3.74M|  return value;
  105|  3.74M|#endif
  106|  3.74M|}
_ZN6google8protobuf8internal13little_endian6ToHostEj:
  109|   165k|inline uint32_t ToHost(uint32_t value) {
  110|       |#if defined(ABSL_IS_BIG_ENDIAN)
  111|       |  return BSwap32(value);
  112|       |#else
  113|   165k|  return value;
  114|   165k|#endif
  115|   165k|}
_ZN6google8protobuf8internal13little_endian6ToHostEm:
  118|   192k|inline uint64_t ToHost(uint64_t value) {
  119|       |#if defined(ABSL_IS_BIG_ENDIAN)
  120|       |  return BSwap64(value);
  121|       |#else
  122|   192k|  return value;
  123|   192k|#endif
  124|   192k|}

_ZN6google8protobuf8internal24GeneratedExtensionFinder4FindEiPNS1_13ExtensionInfoE:
  128|  3.14M|bool GeneratedExtensionFinder::Find(int number, ExtensionInfo* output) {
  129|  3.14M|  const ExtensionInfo* extension = FindRegisteredExtension(extendee_, number);
  130|  3.14M|  if (extension == nullptr) {
  ------------------
  |  Branch (130:7): [True: 3.14M, False: 0]
  ------------------
  131|  3.14M|    return false;
  132|  3.14M|  } else {
  133|      0|    *output = *extension;
  134|      0|    return true;
  135|      0|  }
  136|  3.14M|}
_ZN6google8protobuf8internal12ExtensionSetD2Ev:
  188|  2.34M|ExtensionSet::~ExtensionSet() {
  189|       |  // Deletes all allocated extensions.
  190|       |
  191|  2.34M|  ForEach([](int /* number */, Extension& ext) { ext.Free(); }, PrefetchNta{});
  192|  2.34M|  if (ABSL_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  190|  2.34M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 2.34M]
  |  |  |  Branch (190:49): [Folded, False: 2.34M]
  |  |  |  Branch (190:58): [True: 0, False: 2.34M]
  |  |  ------------------
  ------------------
  193|      0|    delete map_.large;
  194|  2.34M|  } else {
  195|  2.34M|    DeleteFlatMap(map_.flat, flat_capacity_);
  196|  2.34M|  }
  197|  2.34M|}
_ZN6google8protobuf8internal12ExtensionSet13DeleteFlatMapEPKNS2_8KeyValueEt:
  213|  2.34M|                                 uint16_t flat_capacity) {
  214|       |  // Arena::CreateArray already requires a trivially destructible type, but
  215|       |  // ensure this constraint is not violated in the future.
  216|  2.34M|  static_assert(std::is_trivially_destructible<KeyValue>::value,
  217|  2.34M|                "CreateArray requires a trivially destructible type");
  218|       |  // A const-cast is needed, but this is safe as we are about to deallocate the
  219|       |  // array.
  220|  2.34M|  internal::SizedArrayDelete(const_cast<KeyValue*>(flat),
  221|  2.34M|                             sizeof(*flat) * flat_capacity);
  222|  2.34M|}
_ZN6google8protobuf8internal12ExtensionSet5ClearEv:
  762|  26.0k|void ExtensionSet::Clear() {
  763|  26.0k|  ForEach([](int /* number */, Extension& ext) { ext.Clear(); }, Prefetch{});
  764|  26.0k|}
_ZNK6google8protobuf8internal12ExtensionSet13IsInitializedEPNS0_5ArenaEPKNS0_11MessageLiteE:
 1111|  2.08M|                                 const MessageLite* extendee) const {
 1112|       |  // Extensions are never required.  However, we need to check that all
 1113|       |  // embedded messages are initialized.
 1114|  2.08M|  if (ABSL_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  190|  2.08M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 2.08M]
  |  |  |  Branch (190:49): [Folded, False: 2.08M]
  |  |  |  Branch (190:58): [True: 0, False: 2.08M]
  |  |  ------------------
  ------------------
 1115|      0|    for (const auto& kv : *map_.large) {
  ------------------
  |  Branch (1115:25): [True: 0, False: 0]
  ------------------
 1116|      0|      if (!kv.second.IsInitialized(this, extendee, kv.first, arena)) {
  ------------------
  |  Branch (1116:11): [True: 0, False: 0]
  ------------------
 1117|      0|        return false;
 1118|      0|      }
 1119|      0|    }
 1120|      0|    return true;
 1121|      0|  }
 1122|  2.08M|  for (const KeyValue* it = flat_begin(); it != flat_end(); ++it) {
  ------------------
  |  Branch (1122:43): [True: 0, False: 2.08M]
  ------------------
 1123|      0|    if (!it->second.IsInitialized(this, extendee, it->first, arena)) {
  ------------------
  |  Branch (1123:9): [True: 0, False: 0]
  ------------------
 1124|      0|      return false;
 1125|      0|    }
 1126|      0|  }
 1127|  2.08M|  return true;
 1128|  2.08M|}
_ZN6google8protobuf8internal12ExtensionSet10ParseFieldEmPKcPKNS0_11MessageLiteEPNS1_16InternalMetadataEPNS1_12ParseContextE:
 1133|  3.14M|                                     internal::ParseContext* ctx) {
 1134|  3.14M|  GeneratedExtensionFinder finder(extendee);
 1135|  3.14M|  int number = tag >> 3;
 1136|  3.14M|  bool was_packed_on_wire;
 1137|  3.14M|  ExtensionInfo extension;
 1138|  3.14M|  if (!FindExtensionInfoFromFieldNumber(tag & 7, number, &finder, &extension,
  ------------------
  |  Branch (1138:7): [True: 3.14M, False: 0]
  ------------------
 1139|  3.14M|                                        &was_packed_on_wire)) {
 1140|  3.14M|    return UnknownFieldParse(
 1141|  3.14M|        tag, metadata->mutable_unknown_fields<std::string>(), ptr, ctx);
 1142|  3.14M|  }
 1143|      0|  return ParseFieldWithExtensionInfo<std::string>(
 1144|      0|      number, was_packed_on_wire, extension, metadata, ptr, ctx);
 1145|  3.14M|}
_ZNK6google8protobuf8internal12ExtensionSet8ByteSizeEv:
 1217|   123k|size_t ExtensionSet::ByteSize() const {
 1218|   123k|  size_t total_size = 0;
 1219|   123k|  ForEach(
 1220|   123k|      [&total_size](int number, const Extension& ext) {
 1221|   123k|        total_size += ext.ByteSize(number);
 1222|   123k|      },
 1223|   123k|      Prefetch{});
 1224|   123k|  return total_size;
 1225|   123k|}
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_123FindRegisteredExtensionEPKNS0_11MessageLiteEi:
  111|  3.14M|                                             int number) {
  112|  3.14M|  if (!global_registry) return nullptr;
  ------------------
  |  Branch (112:7): [True: 3.14M, False: 0]
  ------------------
  113|       |
  114|      0|  ExtensionInfoKey info;
  115|      0|  info.message = extendee;
  116|      0|  info.number = number;
  117|       |
  118|      0|  auto it = global_registry->find(info);
  119|      0|  if (it == global_registry->end()) {
  ------------------
  |  Branch (119:7): [True: 0, False: 0]
  ------------------
  120|      0|    return nullptr;
  121|      0|  } else {
  122|      0|    return &*it;
  123|      0|  }
  124|      0|}

_ZN6google8protobuf8internal13ExtensionInfoC2Ev:
  122|  3.14M|      : is_packed(false), is_utf8(false), enum_validity_check() {}
_ZN6google8protobuf8internal24GeneratedExtensionFinderC2EPKNS0_11MessageLiteE:
  217|  3.14M|      : extendee_(extendee) {}
_ZNK6google8protobuf8internal12ExtensionSet21_InternalSerializeAllEPKNS0_11MessageLiteEPhPNS0_2io19EpsCopyOutputStreamE:
  578|   123k|      io::EpsCopyOutputStream* stream) const {
  579|   123k|    if (flat_size_ == 0) {
  ------------------
  |  Branch (579:9): [True: 123k, False: 0]
  ------------------
  580|   123k|      assert(!is_large());
  581|   123k|      return target;
  582|   123k|    }
  583|      0|    return _InternalSerializeAllImpl(extendee, target, stream);
  584|   123k|  }
_ZNK6google8protobuf8internal12ExtensionSet8is_largeEv:
  914|  6.93M|  bool is_large() const { return static_cast<int16_t>(flat_size_) < 0; }
_ZN6google8protobuf8internal12ExtensionSet10flat_beginEv:
 1210|  2.37M|  KeyValue* flat_begin() {
 1211|       |    assert(!is_large());
 1212|  2.37M|    return map_.flat;
 1213|  2.37M|  }
_ZNK6google8protobuf8internal12ExtensionSet10flat_beginEv:
 1214|  2.21M|  const KeyValue* flat_begin() const {
 1215|       |    assert(!is_large());
 1216|  2.21M|    return map_.flat;
 1217|  2.21M|  }
_ZN6google8protobuf8internal12ExtensionSet8flat_endEv:
 1218|  2.37M|  KeyValue* flat_end() {
 1219|       |    assert(!is_large());
 1220|  2.37M|    return map_.flat + flat_size_;
 1221|  2.37M|  }
_ZNK6google8protobuf8internal12ExtensionSet8flat_endEv:
 1222|  2.21M|  const KeyValue* flat_end() const {
 1223|       |    assert(!is_large());
 1224|  2.21M|    return map_.flat + flat_size_;
 1225|  2.21M|  }
_ZN6google8protobuf8internal12ExtensionSet32FindExtensionInfoFromFieldNumberINS1_24GeneratedExtensionFinderEEEbiiPT_PNS1_13ExtensionInfoEPb:
 1095|  3.14M|      ExtensionInfo* extension, bool* was_packed_on_wire) {
 1096|  3.14M|    if (!extension_finder->Find(field_number, extension)) {
  ------------------
  |  Branch (1096:9): [True: 3.14M, False: 0]
  ------------------
 1097|  3.14M|      return false;
 1098|  3.14M|    }
 1099|       |
 1100|      0|    ABSL_DCHECK(extension->type > 0 &&
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  3.14M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|      0|                extension->type <= WireFormatLite::MAX_FIELD_TYPE);
 1102|      0|    auto schema_type = static_cast<WireFormatLite::FieldType>(extension->type);
 1103|       |
 1104|      0|    WireFormatLite::WireType expected_wire_type =
 1105|      0|        WireFormatLite::WireTypeForFieldType(schema_type);
 1106|       |
 1107|       |    // Check if this is a packed field.
 1108|      0|    *was_packed_on_wire = false;
 1109|      0|    if (extension->is_repeated &&
  ------------------
  |  Branch (1109:9): [True: 0, False: 0]
  ------------------
 1110|      0|        wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED &&
  ------------------
  |  Branch (1110:9): [True: 0, False: 0]
  ------------------
 1111|      0|        is_packable(expected_wire_type)) {
  ------------------
  |  Branch (1111:9): [True: 0, False: 0]
  ------------------
 1112|      0|      *was_packed_on_wire = true;
 1113|      0|      return true;
 1114|      0|    }
 1115|       |    // Otherwise the wire type must match.
 1116|      0|    return expected_wire_type == wire_type;
 1117|      0|  }
_ZN6google8protobuf8internal12ExtensionSetC2Ev:
  265|  92.8M|  constexpr ExtensionSet() = default;
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet7ForEachIZNS2_D1EvE3$_0NS2_11PrefetchNtaEEEvT_T0_:
  964|  2.34M|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) {
  965|  2.34M|    if (ABSL_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  190|  2.34M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 2.34M]
  |  |  |  Branch (190:49): [Folded, False: 2.34M]
  |  |  |  Branch (190:58): [True: 0, False: 2.34M]
  |  |  ------------------
  ------------------
  966|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  967|      0|                          std::move(func), std::move(prefetch_func));
  968|      0|      return;
  969|      0|    }
  970|  2.34M|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  971|  2.34M|                        std::move(prefetch_func));
  972|  2.34M|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPNS2_8KeyValueEZNS2_D1EvE3$_0NS2_11PrefetchNtaEEEvT_S8_T0_T1_:
  939|  2.34M|                                  PrefetchFunctor prefetch_func) {
  940|       |    // Note: based on arena's ChunkList::Cleanup().
  941|       |    // Prefetch distance 16 performs better than 8 in load tests.
  942|  2.34M|    constexpr int kPrefetchDistance = 16;
  943|  2.34M|    Iterator prefetch = it;
  944|       |    // Prefetch the first kPrefetchDistance extensions.
  945|  2.34M|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (945:21): [True: 0, False: 2.34M]
  |  Branch (945:40): [True: 0, False: 0]
  ------------------
  946|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  947|      0|    }
  948|       |    // For the middle extensions, call func and then prefetch the extension
  949|       |    // kPrefetchDistance after the current one.
  950|  2.34M|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (950:12): [True: 0, False: 2.34M]
  ------------------
  951|      0|      func(it->first, it->second);
  952|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  953|      0|    }
  954|       |    // Call func on the rest without prefetching.
  955|  2.34M|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (955:12): [True: 0, False: 2.34M]
  ------------------
  956|  2.34M|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet7ForEachIZNS2_5ClearEvE3$_0NS2_8PrefetchEEEvT_T0_:
  964|  26.0k|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) {
  965|  26.0k|    if (ABSL_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  190|  26.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 26.0k]
  |  |  |  Branch (190:49): [Folded, False: 26.0k]
  |  |  |  Branch (190:58): [True: 0, False: 26.0k]
  |  |  ------------------
  ------------------
  966|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  967|      0|                          std::move(func), std::move(prefetch_func));
  968|      0|      return;
  969|      0|    }
  970|  26.0k|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  971|  26.0k|                        std::move(prefetch_func));
  972|  26.0k|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPNS2_8KeyValueEZNS2_5ClearEvE3$_0NS2_8PrefetchEEEvT_S8_T0_T1_:
  939|  26.0k|                                  PrefetchFunctor prefetch_func) {
  940|       |    // Note: based on arena's ChunkList::Cleanup().
  941|       |    // Prefetch distance 16 performs better than 8 in load tests.
  942|  26.0k|    constexpr int kPrefetchDistance = 16;
  943|  26.0k|    Iterator prefetch = it;
  944|       |    // Prefetch the first kPrefetchDistance extensions.
  945|  26.0k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (945:21): [True: 0, False: 26.0k]
  |  Branch (945:40): [True: 0, False: 0]
  ------------------
  946|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  947|      0|    }
  948|       |    // For the middle extensions, call func and then prefetch the extension
  949|       |    // kPrefetchDistance after the current one.
  950|  26.0k|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (950:12): [True: 0, False: 26.0k]
  ------------------
  951|      0|      func(it->first, it->second);
  952|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  953|      0|    }
  954|       |    // Call func on the rest without prefetching.
  955|  26.0k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (955:12): [True: 0, False: 26.0k]
  ------------------
  956|  26.0k|  }
extension_set.cc:_ZNK6google8protobuf8internal12ExtensionSet7ForEachIZNKS2_8ByteSizeEvE3$_0NS2_8PrefetchEEEvT_T0_:
  975|   123k|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) const {
  976|   123k|    if (ABSL_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  190|   123k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 123k]
  |  |  |  Branch (190:49): [Folded, False: 123k]
  |  |  |  Branch (190:58): [True: 0, False: 123k]
  |  |  ------------------
  ------------------
  977|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  978|      0|                          std::move(func), std::move(prefetch_func));
  979|      0|      return;
  980|      0|    }
  981|   123k|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  982|   123k|                        std::move(prefetch_func));
  983|   123k|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPKNS2_8KeyValueEZNKS2_8ByteSizeEvE3$_0NS2_8PrefetchEEEvT_S9_T0_T1_:
  939|   123k|                                  PrefetchFunctor prefetch_func) {
  940|       |    // Note: based on arena's ChunkList::Cleanup().
  941|       |    // Prefetch distance 16 performs better than 8 in load tests.
  942|   123k|    constexpr int kPrefetchDistance = 16;
  943|   123k|    Iterator prefetch = it;
  944|       |    // Prefetch the first kPrefetchDistance extensions.
  945|   123k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (945:21): [True: 0, False: 123k]
  |  Branch (945:40): [True: 0, False: 0]
  ------------------
  946|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  947|      0|    }
  948|       |    // For the middle extensions, call func and then prefetch the extension
  949|       |    // kPrefetchDistance after the current one.
  950|   123k|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (950:12): [True: 0, False: 123k]
  ------------------
  951|      0|      func(it->first, it->second);
  952|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  953|      0|    }
  954|       |    // Call func on the rest without prefetching.
  955|   123k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (955:12): [True: 0, False: 123k]
  ------------------
  956|   123k|  }

_ZN6google8protobuf8internal11TcFieldDataC2ENS2_11DefaultInitE:
   64|  9.19M|  TcFieldData(DefaultInit) {}  // NOLINT(google-explicit-constructor)
_ZNK6google8protobuf8internal11TcFieldData10hasbit_idxEv:
   85|   559k|  uint8_t hasbit_idx() const { return static_cast<uint8_t>(data >> 16); }
_ZNK6google8protobuf8internal11TcFieldData7aux_idxEv:
   86|   153k|  uint8_t aux_idx() const { return static_cast<uint8_t>(data >> 24); }
_ZNK6google8protobuf8internal11TcFieldData6offsetEv:
   87|   559k|  uint16_t offset() const { return static_cast<uint16_t>(data >> 48); }
_ZNK6google8protobuf8internal11TcFieldData3tagEv:
  145|  3.24M|  uint32_t tag() const { return static_cast<uint32_t>(data); }
_ZNK6google8protobuf8internal11TcFieldData12entry_offsetEv:
  146|  80.4k|  uint32_t entry_offset() const { return static_cast<uint32_t>(data >> 32); }
_ZNK6google8protobuf8internal16TcParseTableBase14FastFieldEntry6targetEv:
  376|  3.73M|    TailCallParseFunc target() const { return target_function; }
_ZNK6google8protobuf8internal16TcParseTableBase10fast_entryEm:
  379|  3.73M|  const FastFieldEntry* fast_entry(size_t idx) const {
  380|  3.73M|    return reinterpret_cast<const FastFieldEntry*>(this + 1) + idx;
  381|  3.73M|  }
_ZNK6google8protobuf8internal16TcParseTableBase18field_lookup_beginEv:
  421|  82.2k|  const uint16_t* field_lookup_begin() const {
  422|  82.2k|    return reinterpret_cast<const uint16_t*>(reinterpret_cast<uintptr_t>(this) +
  423|  82.2k|                                             lookup_table_offset);
  424|  82.2k|  }
_ZNK6google8protobuf8internal16TcParseTableBase19field_entries_beginEv:
  441|  3.17M|  const FieldEntry* field_entries_begin() const {
  442|  3.17M|    return reinterpret_cast<const FieldEntry*>(
  443|  3.17M|        reinterpret_cast<uintptr_t>(this) + field_entries_offset);
  444|  3.17M|  }
_ZNK6google8protobuf8internal16TcParseTableBase8FieldAux9table_ptrEv:
  492|  41.2k|    const TcParseTableBase* table_ptr() const {
  493|  41.2k|#ifndef PROTOBUF_MESSAGE_GLOBALS
  494|  41.2k|      return table;
  495|       |#else
  496|       |      return MessageGlobalsBase::ToParseTableBase(message_globals_p);
  497|       |#endif
  498|  41.2k|    }
_ZNK6google8protobuf8internal16TcParseTableBase9field_auxEj:
  500|  59.2k|  const FieldAux* field_aux(uint32_t idx) const {
  501|  59.2k|    return reinterpret_cast<const FieldAux*>(reinterpret_cast<uintptr_t>(this) +
  502|  59.2k|                                             aux_offset) +
  503|  59.2k|           idx;
  504|  59.2k|  }
_ZNK6google8protobuf8internal16TcParseTableBase9field_auxEPKNS2_10FieldEntryE:
  510|  20.3k|  const FieldAux* field_aux(const FieldEntry* entry) const {
  511|  20.3k|    return field_aux(entry->aux_idx);
  512|  20.3k|  }
_ZNK6google8protobuf8internal16TcParseTableBase16default_instanceEv:
  526|  3.14M|  const MessageLite* default_instance() const {
  527|  3.14M|    return class_data->default_instance();
  528|  3.14M|  }
_ZNK6google8protobuf8internal11TcFieldData9coded_tagIhEET_v:
   82|  2.07M|  TagType coded_tag() const {
   83|  2.07M|    return static_cast<TagType>(data);
   84|  2.07M|  }
_ZNK6google8protobuf8internal11TcFieldData9coded_tagItEET_v:
   82|  34.5k|  TagType coded_tag() const {
   83|  34.5k|    return static_cast<TagType>(data);
   84|  34.5k|  }

_ZN6google8protobuf8internal8TcParser11SyncHasbitsEPNS0_11MessageLiteEmPKNS1_16TcParseTableBaseE:
  924|  3.32M|      MessageLite* msg, uint64_t hasbits, const TcParseTableBase* table) {
  925|  3.32M|    const uint32_t has_bits_offset = table->has_bits_offset;
  926|       |    if constexpr (internal::PerformDebugChecks()) {
  927|       |      // We always have some offset to write to.
  928|       |      ABSL_DCHECK_NE(has_bits_offset, 0u);
  929|       |      // and if we actually have has bits to push, we should be pushing to a
  930|       |      // real HasBits.
  931|       |      // `has_bits_offset` points to `_cached_size_` when we have
  932|       |      // no has bits, just to point somewhere and avoid a branch here.
  933|       |      // In that case we would be doing `|= 0` so the target just need to be
  934|       |      // some valid space in the message.
  935|       |      if (static_cast<uint32_t>(hasbits) != 0) {
  936|       |        ABSL_DCHECK_NE(has_bits_offset, table->class_data->cached_size_offset);
  937|       |      }
  938|       |    }
  939|       |    // Only the first 32 has-bits are updated. Nothing above those is stored,
  940|       |    // but e.g. messages without has-bits update the upper bits.
  941|  3.32M|    RefAt<uint32_t>(msg, has_bits_offset) |= static_cast<uint32_t>(hasbits);
  942|  3.32M|  }
_ZN6google8protobuf8internal8TcParser11TagDispatchEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1142|  3.73M|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1143|  3.73M|  const auto coded_tag = UnalignedLoad<uint16_t>(ptr);
 1144|  3.73M|  const size_t idx = coded_tag & table->fast_idx_mask;
 1145|  3.73M|  PROTOBUF_ASSUME((idx & 7) == 0);
  ------------------
  |  |  733|  3.73M|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 1146|  3.73M|  auto* fast_entry = table->fast_entry(idx >> 3);
 1147|  3.73M|  TcFieldData data = fast_entry->bits;
 1148|  3.73M|  data.data ^= coded_tag;
 1149|  3.73M|  PROTOBUF_MUSTTAIL return fast_entry->target()(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  3.73M|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return fast_entry->target()(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  3.73M|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1150|  3.73M|}
_ZN6google8protobuf8internal8TcParser13ToTagDispatchEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1158|   564k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1159|   564k|  constexpr bool always_return = !PROTOBUF_TAILCALL;
  ------------------
  |  |  234|   564k|#define PROTOBUF_TAILCALL true
  ------------------
 1160|   564k|  if (always_return || !ctx->DataAvailable(ptr)) {
  ------------------
  |  Branch (1160:7): [Folded, False: 564k]
  |  Branch (1160:24): [True: 151k, False: 412k]
  ------------------
 1161|   151k|    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|   151k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|   151k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1162|   151k|  }
 1163|   412k|  PROTOBUF_MUSTTAIL return TagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|   412k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return TagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|   412k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1164|   564k|}
_ZN6google8protobuf8internal8TcParser11ToParseLoopEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1167|   158k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1168|   158k|  (void)ctx;
 1169|   158k|  SyncHasbits(msg, hasbits, table);
 1170|   158k|  return ptr;
 1171|   158k|}
_ZN6google8protobuf8internal8TcParser9ParseLoopEPNS0_11MessageLiteEPKcPNS1_12ParseContextEPKNS1_16TcParseTableBaseE:
 1175|  2.35M|    const TcParseTableBase* table) {
 1176|       |  // Note: TagDispatch uses a dispatch table at "&table->fast_entries".
 1177|       |  // For fast dispatch, we'd like to have a pointer to that, but if we use
 1178|       |  // that expression, there's no easy way to get back to "table", which we also
 1179|       |  // need during dispatch.  It turns out that "table + 1" points exactly to
 1180|       |  // fast_entries, so we just increment table by 1 here, to get the register
 1181|       |  // holding the value we want.
 1182|  2.35M|  table += 1;
 1183|  5.67M|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (1183:10): [True: 3.32M, False: 2.35M]
  ------------------
 1184|  3.32M|#if defined(__GNUC__)
 1185|       |    // Note: this asm prevents the compiler (clang, specifically) from
 1186|       |    // believing (thanks to CSE) that it needs to dedicate a register both
 1187|       |    // to "table" and "&table->fast_entries".
 1188|       |    // TODO: remove this asm
 1189|  3.32M|    asm("" : "+r"(table));
 1190|  3.32M|#endif
 1191|  3.32M|    ptr = TagDispatch(msg, ptr, ctx, TcFieldData::DefaultInit(), table - 1, 0);
 1192|  3.32M|    if (ptr == nullptr) break;
  ------------------
  |  Branch (1192:9): [True: 5.13k, False: 3.32M]
  ------------------
 1193|  3.32M|    if (ctx->LastTag() != 1) break;  // Ended on terminating tag
  ------------------
  |  Branch (1193:9): [True: 472, False: 3.31M]
  ------------------
 1194|  3.32M|  }
 1195|  2.35M|  table -= 1;
 1196|  2.35M|  if (ABSL_PREDICT_FALSE(table->has_post_loop_handler)) {
  ------------------
  |  |  190|  2.35M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 2.35M]
  |  |  |  Branch (190:49): [Folded, False: 2.35M]
  |  |  |  Branch (190:58): [True: 0, False: 2.35M]
  |  |  ------------------
  ------------------
 1197|      0|    return table->post_loop_handler(msg, ptr, ctx);
 1198|      0|  }
 1199|  2.35M|  if (ABSL_PREDICT_FALSE(PerformDebugChecks() && ptr == nullptr)) {
  ------------------
  |  |  190|  2.35M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [Folded, False: 2.35M]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1200|      0|    CheckHasBitConsistency(msg, table);
 1201|      0|  }
 1202|  2.35M|  return ptr;
 1203|  2.35M|}
_ZN6google8protobuf8internal8TcParser5RefAtIjEERT_Pvm:
  727|  3.48M|  static inline T& RefAt(void* x, size_t offset) {
  728|  3.48M|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  3.48M|    return *target;
  739|  3.48M|  }
_ZN6google8protobuf8internal8TcParser19GenericFallbackImplINS0_11MessageLiteEEEPKcPS4_S6_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  966|  3.14M|  PROTOBUF_CC static const char* GenericFallbackImpl(PROTOBUF_TC_PARAM_DECL) {
  967|  3.14M|    SyncHasbits(msg, hasbits, table);
  968|  3.14M|    uint32_t tag = data.tag();
  969|  3.14M|    if ((tag & 7) == WireFormatLite::WIRETYPE_END_GROUP || tag == 0) {
  ------------------
  |  Branch (969:9): [True: 327, False: 3.14M]
  |  Branch (969:60): [True: 145, False: 3.14M]
  ------------------
  970|    472|      ctx->SetLastTag(tag);
  971|    472|      return ptr;
  972|    472|    }
  973|       |
  974|  3.14M|    ABSL_DCHECK(table->extension_offset != 0);
  ------------------
  |  |   47|  3.14M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  3.14M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  9.44M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  3.14M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  6.29M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  6.29M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3.14M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  3.14M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3.14M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  3.14M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3.14M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  9.44M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  9.44M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  975|  3.14M|    return RefAt<ExtensionSet>(msg, table->extension_offset)
  976|  3.14M|        .ParseField(tag, ptr,
  977|  3.14M|                    static_cast<const MessageBaseT*>(table->default_instance()),
  978|  3.14M|                    &msg->_internal_metadata_, ctx);
  979|  3.14M|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_12ExtensionSetEEERT_Pvm:
  727|  3.14M|  static inline T& RefAt(void* x, size_t offset) {
  728|  3.14M|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  3.14M|    return *target;
  739|  3.14M|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_16TcParseTableBase10FieldEntryEEERKT_PKvm:
  742|  80.4k|  static inline const T& RefAt(const void* x, size_t offset) {
  743|  80.4k|    const T* target =
  744|  80.4k|        reinterpret_cast<const T*>(static_cast<const char*>(x) + offset);
  745|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  746|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  747|       |    // not respect the alignment as expressed by `alignof(T)`
  748|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  749|       |                           0)) {
  750|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  751|       |                reinterpret_cast<uintptr_t>(target));
  752|       |    }
  753|       |#endif
  754|  80.4k|    return *target;
  755|  80.4k|  }
_ZN6google8protobuf8internal8TcParser5RefAtImEERT_Pvm:
  727|  18.1k|  static inline T& RefAt(void* x, size_t offset) {
  728|  18.1k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  18.1k|    return *target;
  739|  18.1k|  }
_ZN6google8protobuf8internal8TcParser32MaybeCreateRepeatedPtrFieldRefAtINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEELb0EEERNS0_16RepeatedPtrFieldIT_EEPvmPNS0_11MessageLiteE:
  813|  1.74k|      void* x, size_t offset, MessageLite* msg) {
  814|  1.74k|    return MaybeCreateRepeatedRefAt<RepeatedPtrField<T>, is_split>(x, offset,
  815|  1.74k|                                                                   msg);
  816|  1.74k|  }
_ZN6google8protobuf8internal8TcParser24MaybeCreateRepeatedRefAtINS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELb0EEERT_PvmPNS0_11MessageLiteE:
  796|  1.74k|                                            MessageLite* msg) {
  797|  1.74k|    if (!is_split) return RefAt<T>(x, offset);
  ------------------
  |  Branch (797:9): [True: 1.74k, Folded]
  ------------------
  798|      0|    void*& ptr = RefAt<void*>(x, offset);
  799|      0|    if (ptr == DefaultRawPtr()) {
  ------------------
  |  Branch (799:9): [True: 0, False: 0]
  ------------------
  800|      0|      ptr = Arena::Create<T>(msg->GetArena());
  801|      0|    }
  802|      0|    return *static_cast<T*>(ptr);
  803|  1.74k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEERT_Pvm:
  727|  10.1k|  static inline T& RefAt(void* x, size_t offset) {
  728|  10.1k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  10.1k|    return *target;
  739|  10.1k|  }
_ZN6google8protobuf8internal8TcParser24MaybeCreateRepeatedRefAtINS1_20RepeatedPtrFieldBaseELb0EEERT_PvmPNS0_11MessageLiteE:
  796|  1.35k|                                            MessageLite* msg) {
  797|  1.35k|    if (!is_split) return RefAt<T>(x, offset);
  ------------------
  |  Branch (797:9): [True: 1.35k, Folded]
  ------------------
  798|      0|    void*& ptr = RefAt<void*>(x, offset);
  799|      0|    if (ptr == DefaultRawPtr()) {
  ------------------
  |  Branch (799:9): [True: 0, False: 0]
  ------------------
  800|      0|      ptr = Arena::Create<T>(msg->GetArena());
  801|      0|    }
  802|      0|    return *static_cast<T*>(ptr);
  803|  1.35k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_20RepeatedPtrFieldBaseEEERT_Pvm:
  727|  25.0k|  static inline T& RefAt(void* x, size_t offset) {
  728|  25.0k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  25.0k|    return *target;
  739|  25.0k|  }
_ZN6google8protobuf8internal8TcParser5RefAtIbEERT_Pvm:
  727|  17.0k|  static inline T& RefAt(void* x, size_t offset) {
  728|  17.0k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  17.0k|    return *target;
  739|  17.0k|  }
_ZN6google8protobuf8internal8TcParser5RefAtIiEERT_Pvm:
  727|   100k|  static inline T& RefAt(void* x, size_t offset) {
  728|   100k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|   100k|    return *target;
  739|   100k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_14ArenaStringPtrEEERT_Pvm:
  727|   231k|  static inline T& RefAt(void* x, size_t offset) {
  728|   231k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|   231k|    return *target;
  739|   231k|  }
_ZN6google8protobuf8internal8TcParser5RefAtIPNS0_11MessageLiteEEERT_Pvm:
  727|  16.2k|  static inline T& RefAt(void* x, size_t offset) {
  728|  16.2k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  729|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  730|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  731|       |    // not respect the alignment as expressed by `alignof(T)`
  732|       |    if (ABSL_PREDICT_FALSE(reinterpret_cast<uintptr_t>(target) % alignof(T) !=
  733|       |                           0)) {
  734|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  735|       |                reinterpret_cast<uintptr_t>(target));
  736|       |    }
  737|       |#endif
  738|  16.2k|    return *target;
  739|  16.2k|  }

_ZN6google8protobuf8internal8TcParser19GenericFallbackLiteEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
   75|  3.14M|const char* TcParser::GenericFallbackLite(PROTOBUF_TC_PARAM_DECL) {
   76|  3.14M|  PROTOBUF_MUSTTAIL return GenericFallbackImpl<MessageLite>(
  ------------------
  |  |  233|  3.14M|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
   77|  3.14M|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  3.14M|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
   78|  3.14M|}
_ZN6google8protobuf8internal8TcParser21ParseLoopPreserveNoneEPNS0_11MessageLiteEPKcPNS1_12ParseContextEPKNS1_16TcParseTableBaseE:
  303|  3.29k|    const TcParseTableBase* table) {
  304|  3.29k|  return ParseLoop(msg, ptr, ctx, table);
  305|  3.29k|}
_ZN6google8protobuf8internal8TcParser14FindFieldEntryEPKNS1_16TcParseTableBaseEj:
  357|  3.17M|    const TcParseTableBase* table, uint32_t field_num) {
  358|  3.17M|  const FieldEntry* const field_entries = table->field_entries_begin();
  359|       |
  360|  3.17M|  uint32_t fstart = 1;
  361|  3.17M|  uint32_t adj_fnum = field_num - fstart;
  362|       |
  363|  3.17M|  if (ABSL_PREDICT_TRUE(adj_fnum < 32)) {
  ------------------
  |  |  191|  3.17M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 3.09M, False: 82.2k]
  |  |  |  Branch (191:48): [Folded, False: 3.17M]
  |  |  |  Branch (191:57): [True: 3.09M, False: 82.2k]
  |  |  ------------------
  ------------------
  364|  3.09M|    uint32_t skipmap = table->skipmap32;
  365|  3.09M|    uint32_t skipbit = 1 << adj_fnum;
  366|  3.09M|    if (ABSL_PREDICT_FALSE(skipmap & skipbit)) return nullptr;
  ------------------
  |  |  190|  3.09M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 3.02M, False: 73.4k]
  |  |  |  Branch (190:49): [Folded, False: 3.09M]
  |  |  |  Branch (190:58): [True: 3.02M, False: 73.4k]
  |  |  ------------------
  ------------------
  367|  73.4k|    skipmap &= skipbit - 1;
  368|  73.4k|    adj_fnum -= absl::popcount(skipmap);
  369|  73.4k|    auto* entry = field_entries + adj_fnum;
  370|  73.4k|    PROTOBUF_ASSUME(entry != nullptr);
  ------------------
  |  |  733|  73.4k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  371|  73.4k|    return entry;
  372|  3.09M|  }
  373|  82.2k|  const uint16_t* lookup_table = table->field_lookup_begin();
  374|  86.9k|  for (;;) {
  375|  86.9k|#ifdef ABSL_IS_LITTLE_ENDIAN
  376|  86.9k|    memcpy(&fstart, lookup_table, sizeof(fstart));
  377|       |#else
  378|       |    fstart = lookup_table[0] | (lookup_table[1] << 16);
  379|       |#endif
  380|  86.9k|    lookup_table += sizeof(fstart) / sizeof(*lookup_table);
  381|  86.9k|    uint32_t num_skip_entries = *lookup_table++;
  382|  86.9k|    if (field_num < fstart) return nullptr;
  ------------------
  |  Branch (382:9): [True: 79.8k, False: 7.12k]
  ------------------
  383|  7.12k|    adj_fnum = field_num - fstart;
  384|  7.12k|    uint32_t skip_num = adj_fnum / 16;
  385|  7.12k|    if (ABSL_PREDICT_TRUE(skip_num < num_skip_entries)) {
  ------------------
  |  |  191|  7.12k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 2.43k, False: 4.68k]
  |  |  |  Branch (191:48): [Folded, False: 7.12k]
  |  |  |  Branch (191:57): [True: 2.43k, False: 4.68k]
  |  |  ------------------
  ------------------
  386|       |      // for each group of 16 fields we have:
  387|       |      // a bitmap of 16 bits
  388|       |      // a 16-bit field-entry offset for the first of them.
  389|  2.43k|      auto* skip_data = lookup_table + (adj_fnum / 16) * (sizeof(SkipEntry16) /
  390|  2.43k|                                                          sizeof(uint16_t));
  391|  2.43k|      SkipEntry16 se = {skip_data[0], skip_data[1]};
  392|  2.43k|      adj_fnum &= 15;
  393|  2.43k|      uint32_t skipmap = se.skipmap;
  394|  2.43k|      uint16_t skipbit = 1 << adj_fnum;
  395|  2.43k|      if (ABSL_PREDICT_FALSE(skipmap & skipbit)) return nullptr;
  ------------------
  |  |  190|  2.43k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 96, False: 2.34k]
  |  |  |  Branch (190:49): [Folded, False: 2.43k]
  |  |  |  Branch (190:58): [True: 96, False: 2.34k]
  |  |  ------------------
  ------------------
  396|  2.34k|      skipmap &= skipbit - 1;
  397|  2.34k|      adj_fnum += se.field_entry_offset;
  398|  2.34k|      adj_fnum -= absl::popcount(skipmap);
  399|  2.34k|      auto* entry = field_entries + adj_fnum;
  400|  2.34k|      PROTOBUF_ASSUME(entry != nullptr);
  ------------------
  |  |  733|  2.34k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  401|  2.34k|      return entry;
  402|  2.43k|    }
  403|  4.68k|    lookup_table +=
  404|  4.68k|        num_skip_entries * (sizeof(SkipEntry16) / sizeof(*lookup_table));
  405|  4.68k|  }
  406|  82.2k|}
_ZN6google8protobuf8internal8TcParser5ErrorEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  488|  1.19k|PROTOBUF_NOINLINE const char* TcParser::Error(PROTOBUF_TC_PARAM_NO_DATA_DECL) {
  489|  1.19k|  (void)ctx;
  490|  1.19k|  (void)ptr;
  491|  1.19k|  SyncHasbits(msg, hasbits, table);
  492|  1.19k|  return nullptr;
  493|  1.19k|}
_ZN6google8protobuf8internal8TcParser9MiniParseEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  592|  3.17M|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
  593|  3.17M|  PROTOBUF_MUSTTAIL return MiniParse<false>(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  3.17M|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return MiniParse<false>(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  3.17M|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  594|  3.17M|}
_ZN6google8protobuf8internal8TcParser10AddMessageEPKNS1_9ClassDataERNS1_20RepeatedPtrFieldBaseEPNS0_5ArenaE:
  634|  2.32M|                                  RepeatedPtrFieldBase& field, Arena* arena) {
  635|  2.32M|  return field.AddFromPrototype<GenericTypeHandler<MessageLite>>(
  636|  2.32M|      arena, class_data->default_instance());
  637|  2.32M|}
_ZN6google8protobuf8internal8TcParser8FastMtS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  738|  49.9k|PROTOBUF_NOINLINE const char* TcParser::FastMtS1(PROTOBUF_TC_PARAM_DECL) {
  739|  49.9k|  PROTOBUF_MUSTTAIL return SingularParseMessageAuxImpl<uint8_t, false, true>(
  ------------------
  |  |  233|  49.9k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  740|  49.9k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  49.9k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  741|  49.9k|}
_ZN6google8protobuf8internal8TcParser8FastMtR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  829|  1.46M|PROTOBUF_NOINLINE const char* TcParser::FastMtR1(PROTOBUF_TC_PARAM_DECL) {
  830|  1.46M|  PROTOBUF_MUSTTAIL return RepeatedParseMessageAuxImpl<uint8_t, false, true>(
  ------------------
  |  |  233|  1.46M|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  831|  1.46M|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  1.46M|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  832|  1.46M|}
_ZN6google8protobuf8internal8TcParser9FastF32S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  866|   146k|PROTOBUF_NOINLINE const char* TcParser::FastF32S1(PROTOBUF_TC_PARAM_DECL) {
  867|   146k|  PROTOBUF_MUSTTAIL return SingularFixed<uint32_t, uint8_t>(
  ------------------
  |  |  233|   146k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  868|   146k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|   146k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  869|   146k|}
_ZN6google8protobuf8internal8TcParser8FastV8S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1131|  3.75k|PROTOBUF_NOINLINE const char* TcParser::FastV8S1(PROTOBUF_TC_PARAM_DECL) {
 1132|  3.75k|  using TagType = uint8_t;
 1133|       |
 1134|       |  // Special case for a varint bool field with a tag of 1 byte:
 1135|       |  // The coded_tag() field will actually contain the value too and we can check
 1136|       |  // both at the same time.
 1137|  3.75k|  auto coded_tag = data.coded_tag<uint16_t>();
 1138|  3.75k|  if (ABSL_PREDICT_TRUE(coded_tag == 0x0000 || coded_tag == 0x0100)) {
  ------------------
  |  |  191|  7.09k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 561, False: 3.18k]
  |  |  |  Branch (191:48): [Folded, False: 3.75k]
  |  |  |  Branch (191:58): [True: 408, False: 3.34k]
  |  |  |  Branch (191:58): [True: 153, False: 3.18k]
  |  |  ------------------
  ------------------
 1139|    561|    auto& field = RefAt<bool>(msg, data.offset());
 1140|       |    // Note: we use `data.data` because Clang generates suboptimal code when
 1141|       |    // using coded_tag.
 1142|       |    // In x86_64 this uses the CH register to read the second byte out of
 1143|       |    // `data`.
 1144|    561|    uint8_t value = data.data >> 8;
 1145|       |    // The assume allows using a mov instead of test+setne.
 1146|    561|    PROTOBUF_ASSUME(value <= 1);
  ------------------
  |  |  733|    561|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 1147|    561|    field = static_cast<bool>(value);
 1148|       |
 1149|    561|    ptr += sizeof(TagType) + 1;  // Consume the tag and the value.
 1150|    561|    SetCachedHasBit(hasbits, data.hasbit_idx());
 1151|       |
 1152|    561|    PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    561|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    561|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1153|    561|  }
 1154|       |
 1155|       |  // If it didn't match above either the tag is wrong, or the value is encoded
 1156|       |  // non-canonically.
 1157|       |  // Jump to MiniParse as wrong tag is the most probable reason.
 1158|  3.18k|  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  3.18k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  3.18k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1159|  3.75k|}
_ZN6google8protobuf8internal8TcParser8FastV8S2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1161|  16.8k|PROTOBUF_NOINLINE const char* TcParser::FastV8S2(PROTOBUF_TC_PARAM_DECL) {
 1162|  16.8k|  PROTOBUF_MUSTTAIL return SingularVarint<bool, uint16_t>(
  ------------------
  |  |  233|  16.8k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1163|  16.8k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  16.8k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1164|  16.8k|}
_ZN6google8protobuf8internal8TcParser9FastV32S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1165|  14.0k|PROTOBUF_NOINLINE const char* TcParser::FastV32S1(PROTOBUF_TC_PARAM_DECL) {
 1166|  14.0k|  PROTOBUF_MUSTTAIL return FastVarintS1<uint32_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  14.0k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return FastVarintS1<uint32_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  14.0k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1167|  14.0k|}
_ZN6google8protobuf8internal8TcParser9FastV32S2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1168|  8.19k|PROTOBUF_NOINLINE const char* TcParser::FastV32S2(PROTOBUF_TC_PARAM_DECL) {
 1169|  8.19k|  PROTOBUF_MUSTTAIL return SingularVarint<uint32_t, uint16_t>(
  ------------------
  |  |  233|  8.19k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1170|  8.19k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  8.19k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1171|  8.19k|}
_ZN6google8protobuf8internal8TcParser9FastV64S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1172|  19.1k|PROTOBUF_NOINLINE const char* TcParser::FastV64S1(PROTOBUF_TC_PARAM_DECL) {
 1173|  19.1k|  PROTOBUF_MUSTTAIL return FastVarintS1<uint64_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  19.1k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return FastVarintS1<uint64_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  19.1k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1174|  19.1k|}
_ZN6google8protobuf8internal8TcParser21MpUnknownEnumFallbackEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1378|  17.8k|    PROTOBUF_TC_PARAM_DECL) {
 1379|       |  // Like FastUnknownEnumFallback, but with the Mp ABI.
 1380|  17.8k|  uint32_t tag = data.tag();
 1381|  17.8k|  uint64_t tmp;
 1382|  17.8k|  ptr = ParseVarint(ptr, &tmp);
 1383|  17.8k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  17.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 17.8k]
  |  |  |  Branch (190:49): [Folded, False: 17.8k]
  |  |  |  Branch (190:58): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
 1384|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1385|      0|  }
 1386|  17.8k|  AddUnknownEnum(msg, table, tag, static_cast<int32_t>(tmp));
 1387|  17.8k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  17.8k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  17.8k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1388|  17.8k|}
_ZN6google8protobuf8internal8TcParser20WriteVarintToUnknownEPNS0_11MessageLiteEPKNS1_9ClassDataEii:
 1470|  17.8k|                                    int value) {
 1471|  17.8k|  if (class_data->is_lite) {
  ------------------
  |  Branch (1471:7): [True: 17.8k, False: 0]
  ------------------
 1472|  17.8k|    internal::WriteVarint(
 1473|  17.8k|        number, value,
 1474|  17.8k|        msg->_internal_metadata_.mutable_unknown_fields<std::string>());
 1475|  17.8k|  } else {
 1476|      0|    internal::WriteVarint(
 1477|      0|        number, value,
 1478|      0|        msg->_internal_metadata_.mutable_unknown_fields<UnknownFieldSet>());
 1479|      0|  }
 1480|  17.8k|}
_ZN6google8protobuf8internal8TcParser14AddUnknownEnumEPNS0_11MessageLiteEPKNS1_16TcParseTableBaseEji:
 1519|  17.8k|                                                int32_t enum_value) {
 1520|  17.8k|  WriteVarintToUnknown(msg, table->class_data, tag >> 3, enum_value);
 1521|  17.8k|}
_ZN6google8protobuf8internal8TcParser9FastEr1S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1610|   136k|PROTOBUF_NOINLINE const char* TcParser::FastEr1S1(PROTOBUF_TC_PARAM_DECL) {
 1611|   136k|  PROTOBUF_MUSTTAIL return SingularEnumSmallRange<uint8_t, 1>(
  ------------------
  |  |  233|   136k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1612|   136k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|   136k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1613|   136k|}
_ZN6google8protobuf8internal8TcParser7FastBS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1849|   238k|PROTOBUF_NOINLINE const char* TcParser::FastBS1(PROTOBUF_TC_PARAM_DECL) {
 1850|   238k|  PROTOBUF_MUSTTAIL return SingularString<uint8_t, ArenaStringPtr, kNoUtf8>(
  ------------------
  |  |  233|   238k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1851|   238k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|   238k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1852|   238k|}
_ZN6google8protobuf8internal8TcParser7FastBS2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1853|  3.46k|PROTOBUF_NOINLINE const char* TcParser::FastBS2(PROTOBUF_TC_PARAM_DECL) {
 1854|  3.46k|  PROTOBUF_MUSTTAIL return SingularString<uint16_t, ArenaStringPtr, kNoUtf8>(
  ------------------
  |  |  233|  3.46k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1855|  3.46k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  3.46k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1856|  3.46k|}
_ZN6google8protobuf8internal8TcParser7FastBR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1968|  8.46k|PROTOBUF_NOINLINE const char* TcParser::FastBR1(PROTOBUF_TC_PARAM_DECL) {
 1969|  8.46k|  PROTOBUF_MUSTTAIL return RepeatedString<
  ------------------
  |  |  233|  8.46k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1970|  8.46k|      uint8_t, RepeatedPtrField<std::string>, kNoUtf8>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  8.46k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1971|  8.46k|}
_ZN6google8protobuf8internal8TcParser7FastBR2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1972|  2.28k|PROTOBUF_NOINLINE const char* TcParser::FastBR2(PROTOBUF_TC_PARAM_DECL) {
 1973|  2.28k|  PROTOBUF_MUSTTAIL return RepeatedString<
  ------------------
  |  |  233|  2.28k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1974|  2.28k|      uint16_t, RepeatedPtrField<std::string>, kNoUtf8>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  2.28k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1975|  2.28k|}
_ZN6google8protobuf8internal8TcParser17MaybeGetSplitBaseEPNS0_11MessageLiteEbPKNS1_16TcParseTableBaseE:
 2141|  11.3k|                                  const TcParseTableBase* table) {
 2142|  11.3k|  void* out = msg;
 2143|  11.3k|  if (is_split) {
  ------------------
  |  Branch (2143:7): [True: 0, False: 11.3k]
  ------------------
 2144|      0|    const uint32_t split_offset = GetSplitOffset(table);
 2145|      0|    void* default_split =
 2146|      0|        TcParser::RefAt<void*>(table->default_instance(), split_offset);
 2147|      0|    void*& split = TcParser::RefAt<void*>(msg, split_offset);
 2148|      0|    if (split == default_split) {
  ------------------
  |  Branch (2148:9): [True: 0, False: 0]
  ------------------
 2149|       |      // Allocate split instance when needed.
 2150|      0|      uint32_t size = GetSizeofSplit(table);
 2151|      0|      Arena* arena = msg->GetArena();
 2152|      0|      split =
 2153|      0|          (arena == nullptr) ? Allocate(size) : arena->AllocateAligned(size);
  ------------------
  |  Branch (2153:11): [True: 0, False: 0]
  ------------------
 2154|      0|      memcpy(split, default_split, size);
 2155|      0|    }
 2156|      0|    out = split;
 2157|      0|  }
 2158|  11.3k|  return out;
 2159|  11.3k|}
_ZN6google8protobuf8internal8TcParser12MpVerifyUtf8ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPKNS1_16TcParseTableBaseERKNS8_10FieldEntryEt:
 2579|  7.10k|                            const FieldEntry& entry, uint16_t xform_val) {
 2580|  7.10k|  if (xform_val == field_layout::kTvUtf8) {
  ------------------
  |  Branch (2580:7): [True: 0, False: 7.10k]
  ------------------
 2581|      0|    if (!utf8_range::IsStructurallyValid(wire_bytes)) {
  ------------------
  |  Branch (2581:9): [True: 0, False: 0]
  ------------------
 2582|      0|      PrintUTF8ErrorLog(MessageName(table), FieldName(table, &entry), "parsing",
 2583|      0|                        false);
 2584|      0|      return false;
 2585|      0|    }
 2586|      0|    return true;
 2587|      0|  }
 2588|  7.10k|  return true;
 2589|  7.10k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_115SetCachedHasBitERmh:
   89|   559k|                                            uint8_t hasbit_idx) {
   90|   559k|  cached_hasbits |= uint64_t{1} << hasbit_idx;
   91|   559k|}
_ZN6google8protobuf8internal8TcParser10NewMessageEPKNS1_9ClassDataEPNS0_5ArenaE:
  629|  8.12k|    const ClassData* class_data, Arena* arena) {
  630|  8.12k|  return class_data->New(arena);
  631|  8.12k|}
_ZN6google8protobuf8internal8TcParser8MpVarintILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2300|  30.6k|PROTOBUF_NOINLINE const char* TcParser::MpVarint(PROTOBUF_TC_PARAM_DECL) {
 2301|  30.6k|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2302|  30.6k|  const uint16_t type_card = entry.type_card;
 2303|  30.6k|  const uint16_t card = type_card & field_layout::kFcMask;
 2304|       |
 2305|       |  // Check for repeated parsing:
 2306|  30.6k|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2306:7): [True: 0, False: 30.6k]
  ------------------
 2307|      0|    PROTOBUF_MUSTTAIL return MpRepeatedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2308|      0|  }
 2309|       |  // Check for wire type mismatch:
 2310|  30.6k|  if ((data.tag() & 7) != WireFormatLite::WIRETYPE_VARINT) {
  ------------------
  |  Branch (2310:7): [True: 7.73k, False: 22.8k]
  ------------------
 2311|  7.73k|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  7.73k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  7.73k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2312|  7.73k|  }
 2313|  22.8k|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 2314|  22.8k|  const bool is_zigzag = xform_val == field_layout::kTvZigZag;
 2315|  22.8k|  const bool is_validated_enum = xform_val & field_layout::kTvEnum;
 2316|       |
 2317|       |  // Parse the value:
 2318|  22.8k|  const char* ptr2 = ptr;  // save for unknown enum case
 2319|  22.8k|  uint64_t tmp;
 2320|  22.8k|  ptr = ParseVarint(ptr, &tmp);
 2321|  22.8k|  if (ptr == nullptr) {
  ------------------
  |  Branch (2321:7): [True: 10, False: 22.8k]
  ------------------
 2322|     10|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     10|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     10|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2323|     10|  }
 2324|       |
 2325|       |  // Transform and/or validate the value
 2326|  22.8k|  uint16_t rep = type_card & field_layout::kRepMask;
 2327|  22.8k|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (2327:7): [True: 352, False: 22.5k]
  ------------------
 2328|    352|    if (is_zigzag) {
  ------------------
  |  Branch (2328:9): [True: 0, False: 352]
  ------------------
 2329|      0|      tmp = WireFormatLite::ZigZagDecode64(tmp);
 2330|      0|    }
 2331|  22.5k|  } else if (rep == field_layout::kRep32Bits) {
  ------------------
  |  Branch (2331:14): [True: 18.5k, False: 3.95k]
  ------------------
 2332|  18.5k|    if (is_validated_enum) {
  ------------------
  |  Branch (2332:9): [True: 17.9k, False: 589]
  ------------------
 2333|  17.9k|      if (!EnumIsValidAux(tmp, xform_val, *table->field_aux(&entry))) {
  ------------------
  |  Branch (2333:11): [True: 17.8k, False: 78]
  ------------------
 2334|  17.8k|        ptr = ptr2;
 2335|  17.8k|        PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  17.8k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  17.8k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2336|  17.8k|      }
 2337|  17.9k|    } else if (is_zigzag) {
  ------------------
  |  Branch (2337:16): [True: 0, False: 589]
  ------------------
 2338|      0|      tmp = WireFormatLite::ZigZagDecode32(static_cast<uint32_t>(tmp));
 2339|      0|    }
 2340|  18.5k|  }
 2341|       |
 2342|       |  // Mark the field as present:
 2343|  4.97k|  const bool is_oneof = card == field_layout::kFcOneof;
 2344|  4.97k|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2344:7): [True: 4.97k, False: 0]
  ------------------
 2345|  4.97k|    SetHas(entry, msg);
 2346|  4.97k|  } else if (is_oneof) {
  ------------------
  |  Branch (2346:14): [True: 0, False: 0]
  ------------------
 2347|      0|    ChangeOneof(table, /*class_data=*/nullptr, entry, data.tag() >> 3, ctx,
 2348|      0|                msg);
 2349|      0|  }
 2350|       |
 2351|  4.97k|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2352|  4.97k|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (2352:7): [True: 352, False: 4.62k]
  ------------------
 2353|    352|    RefAt<uint64_t>(base, entry.offset) = tmp;
 2354|  4.62k|  } else if (rep == field_layout::kRep32Bits) {
  ------------------
  |  Branch (2354:14): [True: 667, False: 3.95k]
  ------------------
 2355|    667|    RefAt<uint32_t>(base, entry.offset) = static_cast<uint32_t>(tmp);
 2356|  3.95k|  } else {
 2357|  3.95k|    ABSL_DCHECK_EQ(rep, static_cast<uint16_t>(field_layout::kRep8Bits));
  ------------------
  |  |   74|  3.95k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  3.95k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  3.95k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 3.95k]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  3.95k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2358|  3.95k|    RefAt<bool>(base, entry.offset) = static_cast<bool>(tmp);
 2359|  3.95k|  }
 2360|       |
 2361|  4.97k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  4.97k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  4.97k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2362|  22.8k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_117SetHasForRepeatedERKNS1_16TcParseTableBase10FieldEntryEPNS0_11MessageLiteE:
 2011|  3.09k|inline void SetHasForRepeated(const FieldEntry& entry, MessageLite* msg) {
 2012|       |  // Not all repeated fields are assigned a has bit.
 2013|  3.09k|  if (entry.has_idx == kNoHasbit) return;
  ------------------
  |  Branch (2013:7): [True: 0, False: 3.09k]
  ------------------
 2014|  3.09k|  SetHas(entry, msg);
 2015|  3.09k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114EnumIsValidAuxEitNS1_16TcParseTableBase8FieldAuxE:
 1064|  17.9k|                                           TcParseTableBase::FieldAux aux) {
 1065|  17.9k|  if (xform_val == field_layout::kTvRange) {
  ------------------
  |  Branch (1065:7): [True: 17.9k, False: 0]
  ------------------
 1066|  17.9k|    return aux.enum_range.first <= val && val <= aux.enum_range.last;
  ------------------
  |  Branch (1066:12): [True: 8.36k, False: 9.60k]
  |  Branch (1066:43): [True: 78, False: 8.29k]
  ------------------
 1067|  17.9k|  }
 1068|      0|  if (PROTOBUF_BUILTIN_CONSTANT_P(xform_val)) {
  ------------------
  |  |  560|      0|#define PROTOBUF_BUILTIN_CONSTANT_P(x) __builtin_constant_p(x)
  |  |  ------------------
  |  |  |  Branch (560:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1069|      0|    return internal::ValidateEnumInlined(val, aux.enum_data);
 1070|      0|  } else {
 1071|      0|    return internal::ValidateEnum(val, aux.enum_data);
 1072|      0|  }
 1073|      0|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_16SetHasERKNS1_16TcParseTableBase10FieldEntryEPNS0_11MessageLiteE:
 2005|  11.3k|inline void SetHas(const FieldEntry& entry, MessageLite* msg) {
 2006|  11.3k|  auto has_idx = static_cast<uint32_t>(entry.has_idx);
 2007|  11.3k|  auto& hasblock = TcParser::RefAt<uint32_t>(msg, has_idx / 32 * 4);
 2008|  11.3k|  hasblock |= uint32_t{1} << (has_idx % 32);
 2009|  11.3k|}
_ZN6google8protobuf8internal8TcParser7MpFixedILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2162|  2.99k|PROTOBUF_NOINLINE const char* TcParser::MpFixed(PROTOBUF_TC_PARAM_DECL) {
 2163|  2.99k|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2164|  2.99k|  const uint16_t type_card = entry.type_card;
 2165|  2.99k|  const uint16_t card = type_card & field_layout::kFcMask;
 2166|       |
 2167|       |  // Check for repeated parsing (wiretype fallback is handled there):
 2168|  2.99k|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2168:7): [True: 0, False: 2.99k]
  ------------------
 2169|      0|    PROTOBUF_MUSTTAIL return MpRepeatedFixed<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedFixed<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2170|      0|  }
 2171|       |  // Check for mismatched wiretype:
 2172|  2.99k|  const uint16_t rep = type_card & field_layout::kRepMask;
 2173|  2.99k|  const uint32_t decoded_wiretype = data.tag() & 7;
 2174|  2.99k|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (2174:7): [True: 0, False: 2.99k]
  ------------------
 2175|      0|    if (decoded_wiretype != WireFormatLite::WIRETYPE_FIXED64) {
  ------------------
  |  Branch (2175:9): [True: 0, False: 0]
  ------------------
 2176|      0|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2177|      0|    }
 2178|  2.99k|  } else {
 2179|  2.99k|    ABSL_DCHECK_EQ(rep, static_cast<uint16_t>(field_layout::kRep32Bits));
  ------------------
  |  |   74|  2.99k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.99k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.99k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.99k]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.99k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2180|  2.99k|    if (decoded_wiretype != WireFormatLite::WIRETYPE_FIXED32) {
  ------------------
  |  Branch (2180:9): [True: 2.84k, False: 154]
  ------------------
 2181|  2.84k|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  2.84k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  2.84k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2182|  2.84k|    }
 2183|  2.99k|  }
 2184|       |  // Set the field present:
 2185|    154|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2185:7): [True: 154, False: 0]
  ------------------
 2186|    154|    SetHas(entry, msg);
 2187|    154|  } else if (card == field_layout::kFcOneof) {
  ------------------
  |  Branch (2187:14): [True: 0, False: 0]
  ------------------
 2188|      0|    ChangeOneof(table, /*class_data=*/nullptr, entry, data.tag() >> 3, ctx,
 2189|      0|                msg);
 2190|      0|  }
 2191|    154|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2192|       |  // Copy the value:
 2193|    154|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (2193:7): [True: 0, False: 154]
  ------------------
 2194|      0|    RefAt<uint64_t>(base, entry.offset) = UnalignedLoad<uint64_t>(ptr);
 2195|      0|    ptr += sizeof(uint64_t);
 2196|    154|  } else {
 2197|    154|    RefAt<uint32_t>(base, entry.offset) = UnalignedLoad<uint32_t>(ptr);
 2198|    154|    ptr += sizeof(uint32_t);
 2199|    154|  }
 2200|    154|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    154|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    154|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2201|  2.99k|}
_ZN6google8protobuf8internal8TcParser8MpStringILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2601|  9.54k|PROTOBUF_NOINLINE const char* TcParser::MpString(PROTOBUF_TC_PARAM_DECL) {
 2602|  9.54k|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2603|  9.54k|  const uint16_t type_card = entry.type_card;
 2604|  9.54k|  const uint16_t card = type_card & field_layout::kFcMask;
 2605|  9.54k|  const uint32_t decoded_wiretype = data.tag() & 7;
 2606|       |
 2607|  9.54k|  if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2607:7): [True: 5.68k, False: 3.86k]
  ------------------
 2608|  5.68k|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  5.68k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  5.68k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2609|  5.68k|  }
 2610|  3.86k|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2610:7): [True: 1.74k, False: 2.11k]
  ------------------
 2611|  1.74k|    PROTOBUF_MUSTTAIL return MpRepeatedString<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  1.74k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedString<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  1.74k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2612|  1.74k|  }
 2613|  2.11k|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 2614|  2.11k|  const uint16_t rep = type_card & field_layout::kRepMask;
 2615|       |
 2616|       |  // Mark the field as present:
 2617|  2.11k|  const bool is_oneof = card == field_layout::kFcOneof;
 2618|  2.11k|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2618:7): [True: 2.11k, False: 0]
  ------------------
 2619|  2.11k|    SetHas(entry, msg);
 2620|  2.11k|  } else if (is_oneof) {
  ------------------
  |  Branch (2620:14): [True: 0, False: 0]
  ------------------
 2621|      0|    ChangeOneof(table, /*class_data=*/nullptr, entry, data.tag() >> 3, ctx,
 2622|      0|                msg);
 2623|      0|  }
 2624|       |
 2625|  2.11k|  bool is_valid = false;
 2626|  2.11k|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2627|  2.11k|  switch (rep) {
 2628|  2.11k|    case field_layout::kRepAString: {
  ------------------
  |  Branch (2628:5): [True: 2.11k, False: 0]
  ------------------
 2629|  2.11k|      auto& field = RefAt<ArenaStringPtr>(base, entry.offset);
 2630|  2.11k|      Arena* arena = msg->GetArena();
 2631|  2.11k|      if (arena) {
  ------------------
  |  Branch (2631:11): [True: 0, False: 2.11k]
  ------------------
 2632|      0|        ptr = ctx->ReadArenaString(ptr, &field, arena);
 2633|  2.11k|      } else {
 2634|  2.11k|        std::string* str = field.MutableNoCopy(nullptr);
 2635|  2.11k|        ptr = InlineGreedyStringParser(str, ptr, ctx);
 2636|  2.11k|      }
 2637|  2.11k|      if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  2.11k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 17, False: 2.10k]
  |  |  |  Branch (190:49): [Folded, False: 2.11k]
  |  |  |  Branch (190:58): [True: 17, False: 2.10k]
  |  |  ------------------
  ------------------
 2638|     17|        EnsureArenaStringIsNotDefault(msg, &field);
 2639|     17|        break;
 2640|     17|      }
 2641|  2.10k|      is_valid = MpVerifyUtf8(field.Get(), table, entry, xform_val);
 2642|  2.10k|      break;
 2643|  2.11k|    }
 2644|       |
 2645|      0|    case field_layout::kRepMString: {
  ------------------
  |  Branch (2645:5): [True: 0, False: 2.11k]
  ------------------
 2646|      0|      auto& field = RefAt<MicroString>(base, entry.offset);
 2647|      0|      ptr = ctx->ReadMicroString(ptr, field, entry.aux_idx, msg->GetArena());
 2648|      0|      is_valid = MpVerifyUtf8(field.Get(), table, entry, xform_val);
 2649|      0|      break;
 2650|  2.11k|    }
 2651|       |
 2652|       |
 2653|      0|    case field_layout::kRepCord: {
  ------------------
  |  Branch (2653:5): [True: 0, False: 2.11k]
  ------------------
 2654|      0|      absl::Cord* field;
 2655|      0|      if (is_oneof) {
  ------------------
  |  Branch (2655:11): [True: 0, False: 0]
  ------------------
 2656|      0|        field = RefAt<absl::Cord*>(msg, entry.offset);
 2657|      0|      } else {
 2658|      0|        field = &RefAt<absl::Cord>(base, entry.offset);
 2659|      0|      }
 2660|      0|      ptr = InlineCordParser(field, ptr, ctx);
 2661|      0|      if (!ptr) break;
  ------------------
  |  Branch (2661:11): [True: 0, False: 0]
  ------------------
 2662|      0|      is_valid = MpVerifyUtf8(*field, table, entry, xform_val);
 2663|      0|      break;
 2664|      0|    }
 2665|       |
 2666|      0|    default:
  ------------------
  |  Branch (2666:5): [True: 0, False: 2.11k]
  ------------------
 2667|      0|      Unreachable();
 2668|  2.11k|  }
 2669|       |
 2670|  2.11k|  if (ABSL_PREDICT_FALSE(ptr == nullptr || !is_valid)) {
  ------------------
  |  |  190|  4.21k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 17, False: 2.10k]
  |  |  |  Branch (190:49): [Folded, False: 2.11k]
  |  |  |  Branch (190:59): [True: 17, False: 2.10k]
  |  |  |  Branch (190:59): [True: 0, False: 2.10k]
  |  |  ------------------
  ------------------
 2671|     17|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     17|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     17|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2672|     17|  }
 2673|  2.10k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  2.10k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  2.10k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2674|  2.11k|}
_ZN6google8protobuf8internal8TcParser16MpRepeatedStringILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2691|  1.74k|    PROTOBUF_TC_PARAM_DECL) {
 2692|  1.74k|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2693|  1.74k|  const uint16_t type_card = entry.type_card;
 2694|  1.74k|  const uint32_t decoded_tag = data.tag();
 2695|  1.74k|  const uint32_t decoded_wiretype = decoded_tag & 7;
 2696|       |
 2697|  1.74k|  if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2697:7): [True: 0, False: 1.74k]
  ------------------
 2698|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2699|      0|  }
 2700|       |
 2701|  1.74k|  SetHasForRepeated(entry, msg);
 2702|       |
 2703|  1.74k|  const uint16_t rep = type_card & field_layout::kRepMask;
 2704|  1.74k|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 2705|  1.74k|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2706|  1.74k|  auto* arena = msg->GetArena();
 2707|  1.74k|  switch (rep) {
  ------------------
  |  Branch (2707:11): [True: 1.74k, False: 0]
  ------------------
 2708|  1.74k|    case field_layout::kRepSString: {
  ------------------
  |  Branch (2708:5): [True: 1.74k, False: 0]
  ------------------
 2709|  1.74k|      auto& field = MaybeCreateRepeatedPtrFieldRefAt<std::string, is_split>(
 2710|  1.74k|          base, entry.offset, msg);
 2711|  1.74k|      const char* ptr2 = ptr;
 2712|  1.74k|      uint32_t next_tag;
 2713|       |
 2714|  1.74k|      SerialArena* serial_arena;
 2715|  1.74k|      if (ABSL_PREDICT_TRUE(arena != nullptr &&
  ------------------
  |  |  191|  3.48k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 1.74k]
  |  |  |  Branch (191:48): [Folded, False: 1.74k]
  |  |  |  Branch (191:58): [True: 0, False: 1.74k]
  |  |  |  Branch (191:58): [True: 0, False: 0]
  |  |  |  Branch (191:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2716|  1.74k|                            arena->impl_.GetSerialArenaFast(&serial_arena) &&
 2717|  1.74k|                            field.PrepareForParse())) {
 2718|      0|        do {
 2719|      0|          ptr = ptr2;
 2720|      0|          ptr = ParseRepeatedStringOnce(ptr, arena, serial_arena, ctx, field);
 2721|      0|          if (ABSL_PREDICT_FALSE(ptr == nullptr ||
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2722|      0|                                 !MpVerifyUtf8(field[field.size() - 1], table,
 2723|      0|                                               entry, xform_val))) {
 2724|      0|            PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                          PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2725|      0|          }
 2726|      0|          if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2727|      0|          ptr2 = ReadTag(ptr, &next_tag);
 2728|      0|        } while (next_tag == decoded_tag);
  ------------------
  |  Branch (2728:18): [True: 0, False: 0]
  ------------------
 2729|  1.74k|      } else {
 2730|  5.01k|        do {
 2731|  5.01k|          ptr = ptr2;
 2732|  5.01k|          std::string* str = field.AddWithArena(arena);
 2733|  5.01k|          ptr = InlineGreedyStringParser(str, ptr, ctx);
 2734|  5.01k|          if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  190|  10.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 14, False: 5.00k]
  |  |  |  Branch (190:49): [Folded, False: 5.01k]
  |  |  |  Branch (190:59): [True: 14, False: 5.00k]
  |  |  |  Branch (190:59): [True: 0, False: 5.00k]
  |  |  ------------------
  ------------------
 2735|  5.01k|                  ptr == nullptr ||
 2736|  5.01k|                  !MpVerifyUtf8(*str, table, entry, xform_val))) {
 2737|     14|            PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     14|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                          PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     14|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2738|     14|          }
 2739|  5.00k|          if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|  5.00k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 131, False: 4.87k]
  |  |  |  Branch (190:49): [Folded, False: 5.00k]
  |  |  |  Branch (190:58): [True: 131, False: 4.87k]
  |  |  ------------------
  ------------------
 2740|  4.87k|          ptr2 = ReadTag(ptr, &next_tag);
 2741|  4.87k|        } while (next_tag == decoded_tag);
  ------------------
  |  Branch (2741:18): [True: 3.27k, False: 1.59k]
  ------------------
 2742|  1.74k|      }
 2743|       |
 2744|  1.59k|      break;
 2745|  1.74k|    }
 2746|       |
 2747|       |#ifndef NDEBUG
 2748|       |    default:
 2749|       |      ABSL_LOG(FATAL) << "Unsupported repeated string rep: " << rep;
 2750|       |      break;
 2751|       |#endif
 2752|  1.74k|  }
 2753|       |
 2754|  1.59k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  1.59k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  1.59k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2755|    131|parse_loop:
 2756|    131|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    131|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    131|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2757|  1.74k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_129EnsureArenaStringIsNotDefaultEPKNS0_11MessageLiteEPNS1_14ArenaStringPtrE:
 1801|    136|                                   ArenaStringPtr* field) {
 1802|       |  // If we failed here we might have left the string in its IsDefault state, but
 1803|       |  // already set the has bit which breaks the message invariants. We must make
 1804|       |  // it consistent again. We do that by guaranteeing the string always exists.
 1805|    136|  if (field->IsDefault()) {
  ------------------
  |  Branch (1805:7): [True: 3, False: 133]
  ------------------
 1806|      3|    field->Set("", msg->GetArena());
 1807|      3|  }
 1808|    136|}
_ZN6google8protobuf8internal8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2761|  32.6k|PROTOBUF_NOINLINE const char* TcParser::MpMessage(PROTOBUF_TC_PARAM_DECL) {
 2762|  32.6k|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2763|  32.6k|  const uint16_t type_card = entry.type_card;
 2764|  32.6k|  const uint16_t card = type_card & field_layout::kFcMask;
 2765|       |
 2766|       |  // Check for repeated parsing:
 2767|  32.6k|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2767:7): [True: 2.83k, False: 29.8k]
  ------------------
 2768|  2.83k|    const uint16_t rep = type_card & field_layout::kRepMask;
 2769|  2.83k|    switch (rep) {
 2770|  2.83k|      case field_layout::kRepMessage:
  ------------------
  |  Branch (2770:7): [True: 2.83k, False: 0]
  ------------------
 2771|  2.83k|        PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, false>(
  ------------------
  |  |  233|  2.83k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2772|  2.83k|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  2.83k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2773|      0|      case field_layout::kRepGroup:
  ------------------
  |  Branch (2773:7): [True: 0, False: 2.83k]
  ------------------
 2774|      0|        PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, true>(
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2775|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2776|      0|      default:
  ------------------
  |  Branch (2776:7): [True: 0, False: 2.83k]
  ------------------
 2777|      0|        PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2778|  2.83k|    }
 2779|  2.83k|  }
 2780|       |
 2781|  29.8k|  const uint32_t decoded_tag = data.tag();
 2782|  29.8k|  const uint32_t decoded_wiretype = decoded_tag & 7;
 2783|  29.8k|  const uint16_t rep = type_card & field_layout::kRepMask;
 2784|  29.8k|  const bool is_group = rep == field_layout::kRepGroup;
 2785|       |
 2786|       |  // Validate wiretype:
 2787|  29.8k|  switch (rep) {
 2788|  29.8k|    case field_layout::kRepMessage:
  ------------------
  |  Branch (2788:5): [True: 29.8k, False: 0]
  ------------------
 2789|  29.8k|      if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2789:11): [True: 28.8k, False: 1.03k]
  ------------------
 2790|  28.8k|        goto fallback;
 2791|  28.8k|      }
 2792|  1.03k|      break;
 2793|  1.03k|    case field_layout::kRepGroup:
  ------------------
  |  Branch (2793:5): [True: 0, False: 29.8k]
  ------------------
 2794|      0|      if (decoded_wiretype != WireFormatLite::WIRETYPE_START_GROUP) {
  ------------------
  |  Branch (2794:11): [True: 0, False: 0]
  ------------------
 2795|      0|        goto fallback;
 2796|      0|      }
 2797|      0|      break;
 2798|      0|    default: {
  ------------------
  |  Branch (2798:5): [True: 0, False: 29.8k]
  ------------------
 2799|  28.8k|    fallback:
 2800|  28.8k|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  28.8k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  28.8k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2801|      0|    }
 2802|  29.8k|  }
 2803|       |
 2804|  1.03k|  const auto aux = *table->field_aux(&entry);
 2805|       |  // Captured structured bindings are a C++20 feature.
 2806|  1.03k|  auto [inner_table_alias, class_data] =
 2807|  1.03k|      GetTableAndClassDataFromAux(type_card, aux);
 2808|  1.03k|  const TcParseTableBase* inner_table = inner_table_alias;
 2809|       |
 2810|  1.03k|  const bool is_oneof = card == field_layout::kFcOneof;
 2811|  1.03k|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2811:7): [True: 1.03k, False: 0]
  ------------------
 2812|  1.03k|    SetHas(entry, msg);
 2813|  1.03k|  } else if (is_oneof) {
  ------------------
  |  Branch (2813:14): [True: 0, False: 0]
  ------------------
 2814|      0|    ChangeOneof(table, class_data, entry, data.tag() >> 3, ctx, msg);
 2815|      0|  }
 2816|       |
 2817|  1.03k|  SyncHasbits(msg, hasbits, table);
 2818|       |
 2819|  1.03k|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2820|  1.03k|  MessageLite*& field = RefAt<MessageLite*>(base, entry.offset);
 2821|  1.03k|  if (field == nullptr) {
  ------------------
  |  Branch (2821:7): [True: 239, False: 795]
  ------------------
 2822|    239|    field = NewMessage(class_data, msg->GetArena());
 2823|    239|  }
 2824|  1.03k|  const auto inner_loop = [&](const char* ptr) {
 2825|  1.03k|    return ParseLoopPreserveNone(field, ptr, ctx, inner_table);
 2826|  1.03k|  };
 2827|  1.03k|  return is_group ? ctx->ParseGroupInlined(ptr, decoded_tag, inner_loop)
  ------------------
  |  Branch (2827:10): [True: 0, False: 1.03k]
  ------------------
 2828|  1.03k|                  : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
 2829|  29.8k|}
_ZN6google8protobuf8internal8TcParser24MpRepeatedMessageOrGroupILb0ELb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2832|  2.83k|const char* TcParser::MpRepeatedMessageOrGroup(PROTOBUF_TC_PARAM_DECL) {
 2833|  2.83k|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2834|  2.83k|  const uint16_t type_card = entry.type_card;
 2835|  2.83k|  ABSL_DCHECK_EQ(type_card & field_layout::kFcMask,
  ------------------
  |  |   74|  2.83k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.83k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.83k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.83k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.83k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2836|  2.83k|                 static_cast<uint16_t>(field_layout::kFcRepeated));
 2837|  2.83k|  const uint32_t decoded_tag = data.tag();
 2838|  2.83k|  const uint32_t decoded_wiretype = decoded_tag & 7;
 2839|       |
 2840|       |  // Validate wiretype:
 2841|  2.83k|  if (!is_group) {
  ------------------
  |  Branch (2841:7): [True: 2.83k, Folded]
  ------------------
 2842|  2.83k|    ABSL_DCHECK_EQ(type_card & field_layout::kRepMask,
  ------------------
  |  |   74|  2.83k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.83k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.83k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.83k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.83k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2843|  2.83k|                   static_cast<uint16_t>(field_layout::kRepMessage));
 2844|  2.83k|    if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2844:9): [True: 1.47k, False: 1.35k]
  ------------------
 2845|  1.47k|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  1.47k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  1.47k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2846|  1.47k|    }
 2847|  2.83k|  } else {
 2848|      0|    ABSL_DCHECK_EQ(type_card & field_layout::kRepMask,
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2849|      0|                   static_cast<uint16_t>(field_layout::kRepGroup));
 2850|      0|    if (decoded_wiretype != WireFormatLite::WIRETYPE_START_GROUP) {
  ------------------
  |  Branch (2850:9): [True: 0, False: 0]
  ------------------
 2851|      0|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2852|      0|    }
 2853|      0|  }
 2854|       |
 2855|  1.35k|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2856|  1.35k|  RepeatedPtrFieldBase& field =
 2857|  1.35k|      MaybeCreateRepeatedRefAt<RepeatedPtrFieldBase, is_split>(
 2858|  1.35k|          base, entry.offset, msg);
 2859|  1.35k|  ABSL_DCHECK_EQ(field.GetArena(), msg->GetArena());
  ------------------
  |  |   74|  1.35k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  1.35k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  1.35k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 1.35k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  1.35k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2860|  1.35k|  const auto aux = *table->field_aux(&entry);
 2861|       |  // Captured structured bindings are a C++20 feature.
 2862|  1.35k|  auto [inner_table_alias, class_data] =
 2863|  1.35k|      GetTableAndClassDataFromAux(type_card, aux);
 2864|  1.35k|  const TcParseTableBase* inner_table = inner_table_alias;
 2865|  1.35k|  SetHasForRepeated(entry, msg);
 2866|       |
 2867|  1.35k|  const char* ptr2 = ptr;
 2868|  1.35k|  uint32_t next_tag;
 2869|  1.35k|  Arena* arena = msg->GetArena();
 2870|  2.25k|  do {
 2871|  2.25k|    MessageLite* value = AddMessage(class_data, field, arena);
 2872|  2.25k|    const auto inner_loop = [&](const char* ptr) {
 2873|  2.25k|      return ParseLoopPreserveNone(value, ptr, ctx, inner_table);
 2874|  2.25k|    };
 2875|  2.25k|    ptr = is_group ? ctx->ParseGroupInlined(ptr2, decoded_tag, inner_loop)
  ------------------
  |  Branch (2875:11): [Folded, False: 2.25k]
  ------------------
 2876|  2.25k|                   : ctx->ParseLengthDelimitedInlined(ptr2, inner_loop);
 2877|  2.25k|    if (ABSL_PREDICT_FALSE(ptr == nullptr)) goto error;
  ------------------
  |  |  190|  2.25k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 155, False: 2.10k]
  |  |  |  Branch (190:49): [Folded, False: 2.25k]
  |  |  |  Branch (190:58): [True: 155, False: 2.10k]
  |  |  ------------------
  ------------------
 2878|  2.10k|    if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|  2.10k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 33, False: 2.07k]
  |  |  |  Branch (190:49): [Folded, False: 2.10k]
  |  |  |  Branch (190:58): [True: 33, False: 2.07k]
  |  |  ------------------
  ------------------
 2879|  2.07k|    ptr2 = ReadTag(ptr, &next_tag);
 2880|  2.07k|    if (ABSL_PREDICT_FALSE(ptr2 == nullptr)) goto error;
  ------------------
  |  |  190|  2.07k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 7, False: 2.06k]
  |  |  |  Branch (190:49): [Folded, False: 2.07k]
  |  |  |  Branch (190:58): [True: 7, False: 2.06k]
  |  |  ------------------
  ------------------
 2881|  2.07k|  } while (next_tag == decoded_tag);
  ------------------
  |  Branch (2881:12): [True: 908, False: 1.15k]
  ------------------
 2882|  1.15k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  1.15k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  1.15k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2883|     33|parse_loop:
 2884|     33|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     33|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     33|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2885|    162|error:
 2886|    162|  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    162|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    162|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2887|  1.35k|}
_ZZN6google8protobuf8internal8TcParser24MpRepeatedMessageOrGroupILb0ELb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
 2872|  2.25k|    const auto inner_loop = [&](const char* ptr) {
 2873|  2.25k|      return ParseLoopPreserveNone(value, ptr, ctx, inner_table);
 2874|  2.25k|    };
_ZN6google8protobuf8internal8TcParser27GetTableAndClassDataFromAuxEtNS1_16TcParseTableBase8FieldAuxE:
  659|  2.38k|    uint16_t type_card, TcParseTableBase::FieldAux aux) {
  660|  2.38k|  uint16_t tv = type_card & field_layout::kTvMask;
  661|  2.38k|  if (ABSL_PREDICT_TRUE(tv == field_layout::kTvTable)) {
  ------------------
  |  |  191|  2.38k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 2.38k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 2.38k]
  |  |  |  Branch (191:57): [True: 2.38k, False: 0]
  |  |  ------------------
  ------------------
  662|  2.38k|    return GetTableAndClassDataFromAux</*kIsTable=*/true>(aux);
  663|  2.38k|  } else {
  664|      0|    ABSL_DCHECK(tv == field_layout::kTvDefault ||
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  665|      0|                tv == field_layout::kTvWeakPtr);
  666|      0|    const MessageLite* prototype = tv == field_layout::kTvDefault
  ------------------
  |  Branch (666:36): [True: 0, False: 0]
  ------------------
  667|      0|                                       ? aux.message_default()
  668|      0|                                       : aux.message_default_weak();
  669|      0|    const TcParseTableBase* inner_table = prototype->GetTcParseTable();
  670|      0|    return {inner_table, inner_table->class_data};
  671|      0|  }
  672|  2.38k|}
_ZN6google8protobuf8internal8TcParser27GetTableAndClassDataFromAuxILb1EEENS2_17TableAndClassDataENS1_16TcParseTableBase8FieldAuxE:
  641|  26.0k|    TcParseTableBase::FieldAux aux) {
  642|  26.0k|  if constexpr (kIsTable) {
  643|  26.0k|#ifndef PROTOBUF_MESSAGE_GLOBALS
  644|  26.0k|    const TcParseTableBase* inner_table = aux.table_ptr();
  645|  26.0k|    return {inner_table, inner_table->class_data};
  646|       |#else
  647|       |    const auto* globals = aux.message_globals();
  648|       |    return {MessageGlobalsBase::ToParseTableBase(globals),
  649|       |            MessageGlobalsBase::GetClassData(globals)};
  650|       |#endif
  651|       |  } else {
  652|       |    const MessageLite* prototype = aux.message_default();
  653|       |    const TcParseTableBase* inner_table = prototype->GetTcParseTable();
  654|       |    return {inner_table, inner_table->class_data};
  655|       |  }
  656|  26.0k|}
_ZZN6google8protobuf8internal8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
 2824|  1.03k|  const auto inner_loop = [&](const char* ptr) {
 2825|  1.03k|    return ParseLoopPreserveNone(field, ptr, ctx, inner_table);
 2826|  1.03k|  };
_ZN6google8protobuf8internal8TcParser9MiniParseILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  520|  3.17M|PROTOBUF_ALWAYS_INLINE const char* TcParser::MiniParse(PROTOBUF_TC_PARAM_DECL) {
  521|  3.17M|  TestMiniParseResult* test_out;
  522|  3.17M|  if (export_called_function) {
  ------------------
  |  Branch (522:7): [Folded, False: 3.17M]
  ------------------
  523|      0|    test_out = reinterpret_cast<TestMiniParseResult*>(
  524|      0|        static_cast<uintptr_t>(data.data));
  525|      0|  }
  526|       |
  527|  3.17M|  uint32_t tag;
  528|  3.17M|  ptr = ReadTagInlined(ptr, &tag);
  529|  3.17M|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  3.17M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 24, False: 3.17M]
  |  |  |  Branch (190:49): [Folded, False: 3.17M]
  |  |  |  Branch (190:58): [True: 24, False: 3.17M]
  |  |  ------------------
  ------------------
  530|     24|    if (export_called_function) *test_out = {Error};
  ------------------
  |  Branch (530:9): [Folded, False: 24]
  ------------------
  531|     24|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     24|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     24|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  532|     24|  }
  533|       |
  534|  3.17M|  auto* entry = FindFieldEntry(table, tag >> 3);
  535|  3.17M|  if (entry == nullptr) {
  ------------------
  |  Branch (535:7): [True: 3.10M, False: 75.8k]
  ------------------
  536|  3.10M|    if (export_called_function) *test_out = {table->fallback, tag};
  ------------------
  |  Branch (536:9): [Folded, False: 3.10M]
  ------------------
  537|  3.10M|    data.data = tag;
  538|  3.10M|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  3.10M|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  3.10M|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  539|  3.10M|  }
  540|       |
  541|       |  // The handler may need the tag and the entry to resolve fallback logic. Both
  542|       |  // of these are 32 bits, so pack them into (the 64-bit) `data`. Since we can't
  543|       |  // pack the entry pointer itself, just pack its offset from `table`.
  544|  75.8k|  uint64_t entry_offset = reinterpret_cast<const char*>(entry) -
  545|  75.8k|                          reinterpret_cast<const char*>(table);
  546|  75.8k|  data.data = entry_offset << 32 | tag;
  547|       |
  548|  75.8k|  using field_layout::FieldKind;
  549|       |
  550|  75.8k|  static_assert(
  551|  75.8k|      absl::has_single_bit(size_t{kMiniParseTableTypeCardMask} + 1) &&
  552|  75.8k|          kMiniParseTableTypeCardMask + 1 == kMiniParseTableSize,
  553|  75.8k|      "kMiniParseTableTypeCardMask must be of the form 2^n - 1, as it is used "
  554|  75.8k|      "to index the mini parse table");
  555|       |
  556|  75.8k|  auto field_type = entry->type_card & kMiniParseTableTypeCardMask;
  557|       |  // Just to be sure we got the order right, above.
  558|  75.8k|  static_assert(0 == FieldKind::kFkNone, "Invalid table order");
  559|  75.8k|  static_assert(1 == FieldKind::kFkVarint, "Invalid table order");
  560|  75.8k|  static_assert(2 == FieldKind::kFkPackedVarint, "Invalid table order");
  561|  75.8k|  static_assert(3 == FieldKind::kFkFixed, "Invalid table order");
  562|  75.8k|  static_assert(4 == FieldKind::kFkPackedFixed, "Invalid table order");
  563|  75.8k|  static_assert(5 == FieldKind::kFkString, "Invalid table order");
  564|  75.8k|  static_assert(6 == FieldKind::kFkMessage, "Invalid table order");
  565|  75.8k|  static_assert(7 == FieldKind::kFkMap, "Invalid table order");
  566|       |
  567|  75.8k|  static_assert(8 == (+field_layout::kSplitMask | FieldKind::kFkNone),
  568|  75.8k|                "Invalid table order");
  569|  75.8k|  static_assert(9 == (+field_layout::kSplitMask | FieldKind::kFkVarint),
  570|  75.8k|                "Invalid table order");
  571|  75.8k|  static_assert(10 == (+field_layout::kSplitMask | FieldKind::kFkPackedVarint),
  572|  75.8k|                "Invalid table order");
  573|  75.8k|  static_assert(11 == (+field_layout::kSplitMask | FieldKind::kFkFixed),
  574|  75.8k|                "Invalid table order");
  575|  75.8k|  static_assert(12 == (+field_layout::kSplitMask | FieldKind::kFkPackedFixed),
  576|  75.8k|                "Invalid table order");
  577|  75.8k|  static_assert(13 == (+field_layout::kSplitMask | FieldKind::kFkString),
  578|  75.8k|                "Invalid table order");
  579|  75.8k|  static_assert(14 == (+field_layout::kSplitMask | FieldKind::kFkMessage),
  580|  75.8k|                "Invalid table order");
  581|  75.8k|  static_assert(15 == (+field_layout::kSplitMask | FieldKind::kFkMap),
  582|  75.8k|                "Invalid table order");
  583|       |
  584|  75.8k|  ABSL_DCHECK_LT(field_type, kMiniParseTableSize);
  ------------------
  |  |   80|  75.8k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  75.8k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  75.8k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 75.8k]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  75.8k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  585|  75.8k|  TailCallParseFunc parse_fn = kMiniParseTable[field_type];
  586|  75.8k|  if (export_called_function) *test_out = {parse_fn, tag, entry};
  ------------------
  |  Branch (586:7): [Folded, False: 75.8k]
  ------------------
  587|       |
  588|  75.8k|  PROTOBUF_MUSTTAIL return parse_fn(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  233|  75.8k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return parse_fn(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  75.8k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  589|  3.17M|}
_ZN6google8protobuf8internal8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  676|  49.9k|    PROTOBUF_TC_PARAM_DECL) {
  677|  49.9k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 192);
  ------------------
  |  |  594|  49.9k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  678|  49.9k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  594|  49.9k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  679|  49.9k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  49.9k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 34.7k, False: 15.2k]
  |  |  |  Branch (190:49): [Folded, False: 49.9k]
  |  |  |  Branch (190:58): [True: 34.7k, False: 15.2k]
  |  |  ------------------
  ------------------
  680|  34.7k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  34.7k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  34.7k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  681|  34.7k|  }
  682|  15.2k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
  683|  15.2k|  ptr += sizeof(TagType);
  684|  15.2k|  SetCachedHasBit(hasbits, data.hasbit_idx());
  685|  15.2k|  SyncHasbits(msg, hasbits, table);
  686|  15.2k|  auto& field = RefAt<MessageLite*>(msg, data.offset());
  687|  15.2k|  const auto aux = *table->field_aux(data.aux_idx());
  688|  15.2k|#ifndef PROTOBUF_MESSAGE_GLOBALS
  689|  15.2k|  const auto* inner_table =
  690|  15.2k|      aux_is_table ? aux.table_ptr() : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (690:7): [True: 15.2k, Folded]
  ------------------
  691|  15.2k|  if (field == nullptr) {
  ------------------
  |  Branch (691:7): [True: 7.88k, False: 7.32k]
  ------------------
  692|  7.88k|    field = NewMessage(inner_table->class_data, msg->GetArena());
  693|  7.88k|  }
  694|       |#else
  695|       |  const TcParseTableBase* inner_table;
  696|       |  if constexpr (aux_is_table) {
  697|       |    inner_table = MessageGlobalsBase::ToParseTableBase(aux.message_globals());
  698|       |    if (field == nullptr) {
  699|       |      field =
  700|       |          NewMessage(MessageGlobalsBase::GetClassData(aux.message_globals()),
  701|       |                     msg->GetArena());
  702|       |    }
  703|       |  } else {
  704|       |    inner_table = aux.message_default()->GetTcParseTable();
  705|       |    if (field == nullptr) {
  706|       |      field = NewMessage(inner_table->class_data, msg->GetArena());
  707|       |    }
  708|       |  }
  709|       |#endif  // PROTOBUF_MESSAGE_GLOBALS
  710|  15.2k|  const auto inner_loop = [&](const char* ptr) {
  711|  15.2k|    return ParseLoop(field, ptr, ctx, inner_table);
  712|  15.2k|  };
  713|  15.2k|  return group_coding
  ------------------
  |  Branch (713:10): [Folded, False: 15.2k]
  ------------------
  714|  15.2k|             ? ctx->ParseGroupInlined(ptr, FastDecodeTag(saved_tag), inner_loop)
  715|  15.2k|             : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  716|  49.9k|}
_ZZN6google8protobuf8internal8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  710|  15.2k|  const auto inner_loop = [&](const char* ptr) {
  711|  15.2k|    return ParseLoop(field, ptr, ctx, inner_table);
  712|  15.2k|  };
_ZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  774|  1.46M|    PROTOBUF_TC_PARAM_DECL) {
  775|  1.46M|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  1.46M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.44M, False: 23.6k]
  |  |  |  Branch (190:49): [Folded, False: 1.46M]
  |  |  |  Branch (190:58): [True: 1.44M, False: 23.6k]
  |  |  ------------------
  ------------------
  776|  1.44M|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  1.44M|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  1.44M|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  777|  1.44M|  }
  778|  23.6k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  594|  23.6k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  779|  23.6k|  SetCachedHasBit(hasbits, data.hasbit_idx());
  780|  23.6k|  Arena* arena = msg->GetArena();
  781|  23.6k|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
  782|  23.6k|  const auto aux = *table->field_aux(data.aux_idx());
  783|  23.6k|  auto& field = RefAt<RepeatedPtrFieldBase>(msg, data.offset());
  784|  23.6k|  ABSL_DCHECK_EQ(field.GetArena(), arena);
  ------------------
  |  |   74|  23.6k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  23.6k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  23.6k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 23.6k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  23.6k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|       |  // Captured structured bindings are a C++20 feature.
  786|  23.6k|  auto [inner_table_alias, class_data] =
  787|  23.6k|      GetTableAndClassDataFromAux<aux_is_table>(aux);
  788|  23.6k|  const TcParseTableBase* inner_table = inner_table_alias;
  789|  2.32M|  do {
  790|  2.32M|    ptr += sizeof(TagType);
  791|  2.32M|    MessageLite* submsg = AddMessage(class_data, field, arena);
  792|  2.32M|    const auto inner_loop = [&](const char* ptr) {
  793|  2.32M|      return ParseLoop(submsg, ptr, ctx, inner_table);
  794|  2.32M|    };
  795|  2.32M|    ptr = group_coding ? ctx->ParseGroupInlined(
  ------------------
  |  Branch (795:11): [Folded, False: 2.32M]
  ------------------
  796|      0|                             ptr, FastDecodeTag(expected_tag), inner_loop)
  797|  2.32M|                       : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  798|  2.32M|    if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  2.32M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 667, False: 2.32M]
  |  |  |  Branch (190:49): [Folded, False: 2.32M]
  |  |  |  Branch (190:58): [True: 667, False: 2.32M]
  |  |  ------------------
  ------------------
  799|    667|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    667|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    667|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  800|    667|    }
  801|  2.32M|    if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) {
  ------------------
  |  |  190|  2.32M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 5.91k, False: 2.32M]
  |  |  |  Branch (190:49): [Folded, False: 2.32M]
  |  |  |  Branch (190:58): [True: 5.91k, False: 2.32M]
  |  |  ------------------
  ------------------
  802|  5.91k|      PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  5.91k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  5.91k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  803|  5.91k|    }
  804|  2.32M|  } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (804:12): [True: 2.30M, False: 17.0k]
  ------------------
  805|       |
  806|  17.0k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  17.0k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  17.0k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  807|  23.6k|}
_ZZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  792|  2.32M|    const auto inner_loop = [&](const char* ptr) {
  793|  2.32M|      return ParseLoop(submsg, ptr, ctx, inner_table);
  794|  2.32M|    };
_ZN6google8protobuf8internal8TcParser13SingularFixedIjhEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  855|   146k|    PROTOBUF_TC_PARAM_DECL) {
  856|   146k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|   146k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 8.65k, False: 137k]
  |  |  |  Branch (190:49): [Folded, False: 146k]
  |  |  |  Branch (190:58): [True: 8.65k, False: 137k]
  |  |  ------------------
  ------------------
  857|  8.65k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  8.65k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  8.65k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  858|  8.65k|  }
  859|   137k|  ptr += sizeof(TagType);  // Consume tag
  860|   137k|  SetCachedHasBit(hasbits, data.hasbit_idx());
  861|   137k|  RefAt<LayoutType>(msg, data.offset()) = UnalignedLoad<LayoutType>(ptr);
  862|   137k|  ptr += sizeof(LayoutType);
  863|   137k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|   137k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|   137k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  864|   146k|}
_ZN6google8protobuf8internal8TcParser14SingularVarintIbtLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1079|  16.8k|    PROTOBUF_TC_PARAM_DECL) {
 1080|  16.8k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  16.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 4.31k, False: 12.5k]
  |  |  |  Branch (190:49): [Folded, False: 16.8k]
  |  |  |  Branch (190:58): [True: 4.31k, False: 12.5k]
  |  |  ------------------
  ------------------
 1081|  4.31k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  4.31k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  4.31k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1082|  4.31k|  }
 1083|  12.5k|  ptr += sizeof(TagType);  // Consume tag
 1084|  12.5k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1085|       |
 1086|       |  // clang isn't smart enough to be able to only conditionally save
 1087|       |  // registers to the stack, so we turn the integer-greater-than-128
 1088|       |  // case into a separate routine.
 1089|  12.5k|  if (ABSL_PREDICT_FALSE(static_cast<int8_t>(*ptr) < 0)) {
  ------------------
  |  |  190|  12.5k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 3.19k, False: 9.30k]
  |  |  |  Branch (190:49): [Folded, False: 12.5k]
  |  |  |  Branch (190:58): [True: 3.19k, False: 9.30k]
  |  |  ------------------
  ------------------
 1090|  3.19k|    PROTOBUF_MUSTTAIL return SingularVarBigint<FieldType, TagType, zigzag>(
  ------------------
  |  |  233|  3.19k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1091|  3.19k|        PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  3.19k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1092|  3.19k|  }
 1093|       |
 1094|  9.30k|  RefAt<FieldType>(msg, data.offset()) =
 1095|  9.30k|      ZigZagDecodeHelper<FieldType, zigzag>(static_cast<uint8_t>(*ptr++));
 1096|  9.30k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  9.30k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  9.30k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1097|  12.5k|}
_ZN6google8protobuf8internal8TcParser17SingularVarBigintIbtLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1101|  3.19k|    PROTOBUF_TC_PARAM_DECL) {
 1102|  3.19k|  uint64_t tmp;
 1103|  3.19k|  PROTOBUF_ASSUME(static_cast<int8_t>(*ptr) < 0);
  ------------------
  |  |  733|  3.19k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 1104|  3.19k|  ptr = ParseVarint(ptr, &tmp);
 1105|       |
 1106|  3.19k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  3.19k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 9, False: 3.18k]
  |  |  |  Branch (190:49): [Folded, False: 3.19k]
  |  |  |  Branch (190:58): [True: 9, False: 3.18k]
  |  |  ------------------
  ------------------
 1107|      9|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      9|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      9|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1108|      9|  }
 1109|  3.18k|  RefAt<FieldType>(msg, data.offset()) =
 1110|  3.18k|      ZigZagDecodeHelper<FieldType, zigzag>(tmp);
 1111|  3.18k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  3.18k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  3.18k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1112|  3.19k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_118ZigZagDecodeHelperIbLb0EEET_S4_:
 1035|  12.4k|inline FieldType ZigZagDecodeHelper(FieldType value) {
 1036|  12.4k|  return static_cast<FieldType>(value);
 1037|  12.4k|}
_ZN6google8protobuf8internal8TcParser12FastVarintS1IjEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1116|  14.0k|    PROTOBUF_TC_PARAM_DECL) {
 1117|  14.0k|  using TagType = uint8_t;
 1118|  14.0k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  14.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 5.16k, False: 8.89k]
  |  |  |  Branch (190:49): [Folded, False: 14.0k]
  |  |  |  Branch (190:58): [True: 5.16k, False: 8.89k]
  |  |  ------------------
  ------------------
 1119|  5.16k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  5.16k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  5.16k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1120|  5.16k|  }
 1121|  8.89k|  int64_t res;
 1122|  8.89k|  ptr = ShiftMixParseVarint<FieldType>(ptr + sizeof(TagType), res);
 1123|  8.89k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  8.89k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 9, False: 8.88k]
  |  |  |  Branch (190:49): [Folded, False: 8.89k]
  |  |  |  Branch (190:58): [True: 9, False: 8.88k]
  |  |  ------------------
  ------------------
 1124|      9|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      9|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      9|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1125|      9|  }
 1126|  8.88k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1127|  8.88k|  RefAt<FieldType>(msg, data.offset()) = res;
 1128|  8.88k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  8.88k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  8.88k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1129|  8.89k|}
_ZN6google8protobuf8internal8TcParser14SingularVarintIjtLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1079|  8.19k|    PROTOBUF_TC_PARAM_DECL) {
 1080|  8.19k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  8.19k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 3.59k, False: 4.59k]
  |  |  |  Branch (190:49): [Folded, False: 8.19k]
  |  |  |  Branch (190:58): [True: 3.59k, False: 4.59k]
  |  |  ------------------
  ------------------
 1081|  3.59k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  3.59k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  3.59k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1082|  3.59k|  }
 1083|  4.59k|  ptr += sizeof(TagType);  // Consume tag
 1084|  4.59k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1085|       |
 1086|       |  // clang isn't smart enough to be able to only conditionally save
 1087|       |  // registers to the stack, so we turn the integer-greater-than-128
 1088|       |  // case into a separate routine.
 1089|  4.59k|  if (ABSL_PREDICT_FALSE(static_cast<int8_t>(*ptr) < 0)) {
  ------------------
  |  |  190|  4.59k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 4.01k, False: 585]
  |  |  |  Branch (190:49): [Folded, False: 4.59k]
  |  |  |  Branch (190:58): [True: 4.01k, False: 585]
  |  |  ------------------
  ------------------
 1090|  4.01k|    PROTOBUF_MUSTTAIL return SingularVarBigint<FieldType, TagType, zigzag>(
  ------------------
  |  |  233|  4.01k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1091|  4.01k|        PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  536|  4.01k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1092|  4.01k|  }
 1093|       |
 1094|    585|  RefAt<FieldType>(msg, data.offset()) =
 1095|    585|      ZigZagDecodeHelper<FieldType, zigzag>(static_cast<uint8_t>(*ptr++));
 1096|    585|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    585|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    585|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1097|  4.59k|}
_ZN6google8protobuf8internal8TcParser17SingularVarBigintIjtLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1101|  4.01k|    PROTOBUF_TC_PARAM_DECL) {
 1102|  4.01k|  uint64_t tmp;
 1103|  4.01k|  PROTOBUF_ASSUME(static_cast<int8_t>(*ptr) < 0);
  ------------------
  |  |  733|  4.01k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 1104|  4.01k|  ptr = ParseVarint(ptr, &tmp);
 1105|       |
 1106|  4.01k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  4.01k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 8, False: 4.00k]
  |  |  |  Branch (190:49): [Folded, False: 4.01k]
  |  |  |  Branch (190:58): [True: 8, False: 4.00k]
  |  |  ------------------
  ------------------
 1107|      8|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      8|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      8|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1108|      8|  }
 1109|  4.00k|  RefAt<FieldType>(msg, data.offset()) =
 1110|  4.00k|      ZigZagDecodeHelper<FieldType, zigzag>(tmp);
 1111|  4.00k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  4.00k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  4.00k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1112|  4.01k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_118ZigZagDecodeHelperIjLb0EEET_S4_:
 1035|  4.59k|inline FieldType ZigZagDecodeHelper(FieldType value) {
 1036|  4.59k|  return static_cast<FieldType>(value);
 1037|  4.59k|}
_ZN6google8protobuf8internal8TcParser12FastVarintS1ImEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1116|  19.1k|    PROTOBUF_TC_PARAM_DECL) {
 1117|  19.1k|  using TagType = uint8_t;
 1118|  19.1k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  19.1k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.29k, False: 17.8k]
  |  |  |  Branch (190:49): [Folded, False: 19.1k]
  |  |  |  Branch (190:58): [True: 1.29k, False: 17.8k]
  |  |  ------------------
  ------------------
 1119|  1.29k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  1.29k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  1.29k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1120|  1.29k|  }
 1121|  17.8k|  int64_t res;
 1122|  17.8k|  ptr = ShiftMixParseVarint<FieldType>(ptr + sizeof(TagType), res);
 1123|  17.8k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  17.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 9, False: 17.8k]
  |  |  |  Branch (190:49): [Folded, False: 17.8k]
  |  |  |  Branch (190:58): [True: 9, False: 17.8k]
  |  |  ------------------
  ------------------
 1124|      9|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      9|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      9|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1125|      9|  }
 1126|  17.8k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1127|  17.8k|  RefAt<FieldType>(msg, data.offset()) = res;
 1128|  17.8k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  17.8k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  17.8k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1129|  17.8k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_111ParseVarintImEEPKcS5_PT_:
  962|  47.9k|PROTOBUF_ALWAYS_INLINE const char* ParseVarint(const char* p, Type* value) {
  963|  47.9k|  static_assert(sizeof(Type) == 4 || sizeof(Type) == 8,
  964|  47.9k|                "Only [u]int32_t and [u]int64_t please");
  965|       |#ifdef __aarch64__
  966|       |  // The VarintParse parser has a faster implementation on ARM.
  967|       |  std::conditional_t<sizeof(Type) == 4, uint32_t, uint64_t> tmp;
  968|       |  p = VarintParse(p, &tmp);
  969|       |  if (p != nullptr) {
  970|       |    *value = tmp;
  971|       |  }
  972|       |  return p;
  973|       |#endif
  974|  47.9k|  int64_t res;
  975|  47.9k|  p = ShiftMixParseVarint<Type>(p, res);
  976|  47.9k|  *value = res;
  977|  47.9k|  return p;
  978|  47.9k|}
_ZN6google8protobuf8internal8TcParser22SingularEnumSmallRangeIhLh1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1584|   136k|    PROTOBUF_TC_PARAM_DECL) {
 1585|   136k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|   136k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 17.6k, False: 118k]
  |  |  |  Branch (190:49): [Folded, False: 136k]
  |  |  |  Branch (190:58): [True: 17.6k, False: 118k]
  |  |  ------------------
  ------------------
 1586|  17.6k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  17.6k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  17.6k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1587|  17.6k|  }
 1588|       |
 1589|   118k|  uint8_t v = ptr[sizeof(TagType)];
 1590|   118k|  if (ABSL_PREDICT_FALSE(min > v || v > data.aux_idx())) {
  ------------------
  |  |  190|   232k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 17.9k, False: 100k]
  |  |  |  Branch (190:49): [Folded, False: 118k]
  |  |  |  Branch (190:59): [True: 4.43k, False: 114k]
  |  |  |  Branch (190:59): [True: 13.5k, False: 100k]
  |  |  ------------------
  ------------------
 1591|  17.9k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  17.9k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  17.9k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1592|  17.9k|  }
 1593|       |
 1594|   100k|  RefAt<int32_t>(msg, data.offset()) = v;
 1595|   100k|  ptr += sizeof(TagType) + 1;
 1596|   100k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1597|   100k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|   100k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|   100k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1598|   118k|}
_ZN6google8protobuf8internal8TcParser14SingularStringIhNS1_14ArenaStringPtrELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1817|   238k|    PROTOBUF_TC_PARAM_DECL) {
 1818|   238k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|   238k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 11.2k, False: 227k]
  |  |  |  Branch (190:49): [Folded, False: 238k]
  |  |  |  Branch (190:58): [True: 11.2k, False: 227k]
  |  |  ------------------
  ------------------
 1819|  11.2k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  11.2k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  11.2k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1820|  11.2k|  }
 1821|   227k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1822|   227k|  ptr += sizeof(TagType);
 1823|   227k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1824|   227k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1825|   227k|  auto arena = msg->GetArena();
 1826|   227k|  if (arena) {
  ------------------
  |  Branch (1826:7): [True: 0, False: 227k]
  ------------------
 1827|      0|    ptr = ReadStringIntoArena(ptr, ctx, data, field, arena);
 1828|   227k|  } else {
 1829|   227k|    ptr = ReadStringNoArena(ptr, ctx, data, field);
 1830|   227k|  }
 1831|   227k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|   227k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 103, False: 226k]
  |  |  |  Branch (190:49): [Folded, False: 227k]
  |  |  |  Branch (190:58): [True: 103, False: 226k]
  |  |  ------------------
  ------------------
 1832|    103|    EnsureArenaStringIsNotDefault(msg, &field);
 1833|    103|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    103|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    103|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1834|    103|  }
 1835|   226k|  switch (utf8) {
  ------------------
  |  Branch (1835:11): [Folded, False: 0]
  ------------------
 1836|   226k|    case kNoUtf8:
  ------------------
  |  Branch (1836:5): [True: 226k, False: 0]
  ------------------
 1837|   226k|      break;
 1838|      0|    case kUtf8:
  ------------------
  |  Branch (1838:5): [True: 0, False: 226k]
  ------------------
 1839|      0|      if (ABSL_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  191|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 0]
  |  |  |  Branch (191:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1840|      0|        break;
 1841|      0|      }
 1842|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1843|      0|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1844|   226k|  }
 1845|       |
 1846|   226k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|   226k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|   226k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1847|   226k|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_117ReadStringNoArenaEPKcPNS1_12ParseContextENS1_11TcFieldDataERNS1_14ArenaStringPtrE:
 1770|   229k|                              ArenaStringPtr& field) {
 1771|   229k|  int size = ReadSize(&ptr);
 1772|   229k|  if (!ptr) return nullptr;
  ------------------
  |  Branch (1772:7): [True: 3, False: 229k]
  ------------------
 1773|   229k|  return ctx->ReadString(ptr, size, field.MutableNoCopy(nullptr));
 1774|   229k|}
_ZN6google8protobuf8internal8TcParser14SingularStringItNS1_14ArenaStringPtrELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1817|  3.46k|    PROTOBUF_TC_PARAM_DECL) {
 1818|  3.46k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  3.46k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 683, False: 2.78k]
  |  |  |  Branch (190:49): [Folded, False: 3.46k]
  |  |  |  Branch (190:58): [True: 683, False: 2.78k]
  |  |  ------------------
  ------------------
 1819|    683|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    683|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    683|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1820|    683|  }
 1821|  2.78k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1822|  2.78k|  ptr += sizeof(TagType);
 1823|  2.78k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1824|  2.78k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1825|  2.78k|  auto arena = msg->GetArena();
 1826|  2.78k|  if (arena) {
  ------------------
  |  Branch (1826:7): [True: 0, False: 2.78k]
  ------------------
 1827|      0|    ptr = ReadStringIntoArena(ptr, ctx, data, field, arena);
 1828|  2.78k|  } else {
 1829|  2.78k|    ptr = ReadStringNoArena(ptr, ctx, data, field);
 1830|  2.78k|  }
 1831|  2.78k|  if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  190|  2.78k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 16, False: 2.76k]
  |  |  |  Branch (190:49): [Folded, False: 2.78k]
  |  |  |  Branch (190:58): [True: 16, False: 2.76k]
  |  |  ------------------
  ------------------
 1832|     16|    EnsureArenaStringIsNotDefault(msg, &field);
 1833|     16|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     16|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     16|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1834|     16|  }
 1835|  2.76k|  switch (utf8) {
  ------------------
  |  Branch (1835:11): [Folded, False: 0]
  ------------------
 1836|  2.76k|    case kNoUtf8:
  ------------------
  |  Branch (1836:5): [True: 2.76k, False: 0]
  ------------------
 1837|  2.76k|      break;
 1838|      0|    case kUtf8:
  ------------------
  |  Branch (1838:5): [True: 0, False: 2.76k]
  ------------------
 1839|      0|      if (ABSL_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  191|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 0]
  |  |  |  Branch (191:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1840|      0|        break;
 1841|      0|      }
 1842|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1843|      0|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1844|  2.76k|  }
 1845|       |
 1846|  2.76k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  2.76k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  2.76k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1847|  2.76k|}
_ZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1915|  8.46k|    PROTOBUF_TC_PARAM_DECL) {
 1916|  8.46k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  8.46k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.05k, False: 7.40k]
  |  |  |  Branch (190:49): [Folded, False: 8.46k]
  |  |  |  Branch (190:58): [True: 1.05k, False: 7.40k]
  |  |  ------------------
  ------------------
 1917|  1.05k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  1.05k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  1.05k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1918|  1.05k|  }
 1919|  7.40k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1920|  7.40k|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
 1921|  7.40k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1922|  7.40k|  ABSL_DCHECK_EQ(field.GetArena(), msg->GetArena());
  ------------------
  |  |   74|  7.40k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  7.40k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  7.40k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 7.40k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  7.40k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1923|       |
 1924|  7.40k|  const auto validate_last_string = [expected_tag, table, &field] {
 1925|  7.40k|    switch (utf8) {
 1926|  7.40k|      case kNoUtf8:
 1927|  7.40k|        return true;
 1928|  7.40k|      case kUtf8:
 1929|  7.40k|        if (ABSL_PREDICT_TRUE(
 1930|  7.40k|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1931|  7.40k|          return true;
 1932|  7.40k|        }
 1933|  7.40k|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1934|  7.40k|        return false;
 1935|  7.40k|    }
 1936|  7.40k|  };
 1937|       |
 1938|  7.40k|  auto* arena = field.GetArena();
 1939|  7.40k|  SerialArena* serial_arena;
 1940|  7.40k|  if (ABSL_PREDICT_TRUE(arena != nullptr &&
  ------------------
  |  |  191|  14.8k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 7.40k]
  |  |  |  Branch (191:48): [Folded, False: 7.40k]
  |  |  |  Branch (191:58): [True: 0, False: 7.40k]
  |  |  |  Branch (191:58): [True: 0, False: 0]
  |  |  |  Branch (191:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1941|  7.40k|                        arena->impl_.GetSerialArenaFast(&serial_arena) &&
 1942|  7.40k|                        field.PrepareForParse())) {
 1943|      0|    do {
 1944|      0|      ptr += sizeof(TagType);
 1945|      0|      ptr = ParseRepeatedStringOnce(ptr, arena, serial_arena, ctx, field);
 1946|       |
 1947|      0|      if (ABSL_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  |  Branch (190:59): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1948|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1949|      0|      }
 1950|      0|      if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1951|      0|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1951:14): [True: 0, False: 0]
  ------------------
 1952|  7.40k|  } else {
 1953|   790k|    do {
 1954|   790k|      ptr += sizeof(TagType);
 1955|   790k|      std::string* str = field.AddWithArena(arena);
 1956|   790k|      ptr = InlineGreedyStringParser(str, ptr, ctx);
 1957|   790k|      if (ABSL_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  190|  1.58M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 145, False: 790k]
  |  |  |  Branch (190:49): [Folded, False: 790k]
  |  |  |  Branch (190:59): [True: 145, False: 790k]
  |  |  |  Branch (190:59): [Folded, False: 790k]
  |  |  ------------------
  ------------------
 1958|    145|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    145|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    145|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1959|    145|      }
 1960|   790k|      if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|   790k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 618, False: 789k]
  |  |  |  Branch (190:49): [Folded, False: 790k]
  |  |  |  Branch (190:58): [True: 618, False: 789k]
  |  |  ------------------
  ------------------
 1961|   790k|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1961:14): [True: 783k, False: 6.64k]
  ------------------
 1962|  7.40k|  }
 1963|  6.64k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  6.64k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  6.64k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1964|    618|parse_loop:
 1965|    618|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    618|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    618|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1966|  7.40k|}
_ZZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlvE_clEv:
 1924|   790k|  const auto validate_last_string = [expected_tag, table, &field] {
 1925|   790k|    switch (utf8) {
  ------------------
  |  Branch (1925:13): [Folded, False: 0]
  ------------------
 1926|   790k|      case kNoUtf8:
  ------------------
  |  Branch (1926:7): [True: 790k, False: 0]
  ------------------
 1927|   790k|        return true;
 1928|      0|      case kUtf8:
  ------------------
  |  Branch (1928:7): [True: 0, False: 790k]
  ------------------
 1929|      0|        if (ABSL_PREDICT_TRUE(
  ------------------
  |  |  191|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 0]
  |  |  |  Branch (191:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1930|      0|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1931|      0|          return true;
 1932|      0|        }
 1933|      0|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1934|      0|        return false;
 1935|   790k|    }
 1936|   790k|  };
_ZN6google8protobuf8internal8TcParser14RepeatedStringItNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1915|  2.28k|    PROTOBUF_TC_PARAM_DECL) {
 1916|  2.28k|  if (ABSL_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  190|  2.28k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.23k, False: 1.05k]
  |  |  |  Branch (190:49): [Folded, False: 2.28k]
  |  |  |  Branch (190:58): [True: 1.23k, False: 1.05k]
  |  |  ------------------
  ------------------
 1917|  1.23k|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|  1.23k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|  1.23k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1918|  1.23k|  }
 1919|  1.05k|  SetCachedHasBit(hasbits, data.hasbit_idx());
 1920|  1.05k|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
 1921|  1.05k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1922|  1.05k|  ABSL_DCHECK_EQ(field.GetArena(), msg->GetArena());
  ------------------
  |  |   74|  1.05k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  1.05k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  1.05k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 1.05k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  1.05k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1923|       |
 1924|  1.05k|  const auto validate_last_string = [expected_tag, table, &field] {
 1925|  1.05k|    switch (utf8) {
 1926|  1.05k|      case kNoUtf8:
 1927|  1.05k|        return true;
 1928|  1.05k|      case kUtf8:
 1929|  1.05k|        if (ABSL_PREDICT_TRUE(
 1930|  1.05k|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1931|  1.05k|          return true;
 1932|  1.05k|        }
 1933|  1.05k|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1934|  1.05k|        return false;
 1935|  1.05k|    }
 1936|  1.05k|  };
 1937|       |
 1938|  1.05k|  auto* arena = field.GetArena();
 1939|  1.05k|  SerialArena* serial_arena;
 1940|  1.05k|  if (ABSL_PREDICT_TRUE(arena != nullptr &&
  ------------------
  |  |  191|  2.10k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 1.05k]
  |  |  |  Branch (191:48): [Folded, False: 1.05k]
  |  |  |  Branch (191:58): [True: 0, False: 1.05k]
  |  |  |  Branch (191:58): [True: 0, False: 0]
  |  |  |  Branch (191:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1941|  1.05k|                        arena->impl_.GetSerialArenaFast(&serial_arena) &&
 1942|  1.05k|                        field.PrepareForParse())) {
 1943|      0|    do {
 1944|      0|      ptr += sizeof(TagType);
 1945|      0|      ptr = ParseRepeatedStringOnce(ptr, arena, serial_arena, ctx, field);
 1946|       |
 1947|      0|      if (ABSL_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:59): [True: 0, False: 0]
  |  |  |  Branch (190:59): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1948|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1949|      0|      }
 1950|      0|      if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1951|      0|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1951:14): [True: 0, False: 0]
  ------------------
 1952|  1.05k|  } else {
 1953|  1.32k|    do {
 1954|  1.32k|      ptr += sizeof(TagType);
 1955|  1.32k|      std::string* str = field.AddWithArena(arena);
 1956|  1.32k|      ptr = InlineGreedyStringParser(str, ptr, ctx);
 1957|  1.32k|      if (ABSL_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  190|  2.65k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 5, False: 1.32k]
  |  |  |  Branch (190:49): [Folded, False: 1.32k]
  |  |  |  Branch (190:59): [True: 5, False: 1.32k]
  |  |  |  Branch (190:59): [Folded, False: 1.32k]
  |  |  ------------------
  ------------------
 1958|      5|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|      5|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|      5|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1959|      5|      }
 1960|  1.32k|      if (ABSL_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  190|  1.32k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 94, False: 1.23k]
  |  |  |  Branch (190:49): [Folded, False: 1.32k]
  |  |  |  Branch (190:58): [True: 94, False: 1.23k]
  |  |  ------------------
  ------------------
 1961|  1.32k|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1961:14): [True: 279, False: 951]
  ------------------
 1962|  1.05k|  }
 1963|    951|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|    951|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|    951|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1964|     94|parse_loop:
 1965|     94|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  233|     94|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  549|     94|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1966|  1.05k|}
_ZZN6google8protobuf8internal8TcParser14RepeatedStringItNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE0EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlvE_clEv:
 1924|  1.32k|  const auto validate_last_string = [expected_tag, table, &field] {
 1925|  1.32k|    switch (utf8) {
  ------------------
  |  Branch (1925:13): [Folded, False: 0]
  ------------------
 1926|  1.32k|      case kNoUtf8:
  ------------------
  |  Branch (1926:7): [True: 1.32k, False: 0]
  ------------------
 1927|  1.32k|        return true;
 1928|      0|      case kUtf8:
  ------------------
  |  Branch (1928:7): [True: 0, False: 1.32k]
  ------------------
 1929|      0|        if (ABSL_PREDICT_TRUE(
  ------------------
  |  |  191|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 0, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 0]
  |  |  |  Branch (191:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1930|      0|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1931|      0|          return true;
 1932|      0|        }
 1933|      0|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1934|      0|        return false;
 1935|  1.32k|    }
 1936|  1.32k|  };

_ZN6google8protobuf8internal24InitProtobufDefaultsSlowEv:
  104|      2|void InitProtobufDefaultsSlow() {
  105|      2|  static bool is_inited = InitProtobufDefaultsImpl();
  106|      2|  (void)is_inited;
  107|      2|}
generated_message_util.cc:_ZN6google8protobuf8internalL24InitProtobufDefaultsImplEv:
   93|      2|static bool InitProtobufDefaultsImpl() {
   94|      2|  if (auto* to_destroy = fixed_address_empty_string.Init()) {
  ------------------
  |  Branch (94:13): [True: 0, False: 2]
  ------------------
   95|      0|    OnShutdownDestroyString(to_destroy);
   96|      0|  }
   97|      2|  InitWeakDefaults();
   98|       |
   99|       |
  100|      2|  init_protobuf_defaults_state.store(true, std::memory_order_release);
  101|      2|  return true;
  102|      2|}
generated_message_util.cc:_ZN6google8protobuf8internalL16InitWeakDefaultsEv:
   72|      2|static void InitWeakDefaults() {
   73|       |  // force link the dummy entry.
   74|      2|  StrongPointer<DummyWeakDefault*, &dummy_weak_default>();
   75|       |  // We don't know the size of each object, but we know the layout of the tail.
   76|       |  // It contains a WeakDescriptorDefaultTail object.
   77|       |  // As such, we iterate the section backwards.
   78|      2|  const char* start = &__start_pb_defaults;
   79|      2|  const char* end = &__stop_pb_defaults;
   80|      4|  while (start != end) {
  ------------------
  |  Branch (80:10): [True: 2, False: 2]
  ------------------
   81|      2|    auto* tail = reinterpret_cast<const WeakDescriptorDefaultTail*>(end) - 1;
   82|      2|    end -= tail->size;
   83|      2|    const MessageGlobalsBase* instance =
   84|      2|        reinterpret_cast<const MessageGlobalsBase*>(end);
   85|      2|    *tail->target = instance;
   86|      2|  }
   87|      2|}

_ZN6google8protobuf8internal17AllAreInitializedIN13sentencepiece24ModelProto_SentencePieceEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  111|  7.73k|    const RepeatedPtrField<Msg>& t) {
  112|  2.08M|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (112:26): [True: 2.07M, False: 7.73k]
  ------------------
  113|  2.07M|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (113:9): [True: 0, False: 2.07M]
  ------------------
  114|  2.07M|  }
  115|  7.73k|  return true;
  116|  7.73k|}

_ZN6google8protobuf8internal7HasBitsILi1EEixEi:
   45|   785M|  PROTOBUF_NDEBUG_INLINE uint32_t& operator[](int index) {
   46|   785M|    return has_bits_[index];
   47|   785M|  }
_ZNK6google8protobuf8internal7HasBitsILi1EEixEi:
   50|   270k|  operator[](int index) const {
   51|   270k|    return has_bits_[index];
   52|   270k|  }
_ZNK6google8protobuf8internal7HasBitsILi2EEixEi:
   50|  42.0k|  operator[](int index) const {
   51|  42.0k|    return has_bits_[index];
   52|  42.0k|  }
_ZN6google8protobuf8internal7HasBitsILi1EEC2Ev:
   35|  92.8M|  PROTOBUF_NDEBUG_INLINE constexpr HasBits() : has_bits_{} {}
_ZN6google8protobuf8internal7HasBitsILi1EE5ClearEv:
   41|  32.8k|  PROTOBUF_NDEBUG_INLINE void Clear() {
   42|  32.8k|    memset(has_bits_, 0, sizeof(has_bits_));
   43|  32.8k|  }

_ZN6google8protobuf8internal12ResolveArenaITnDaXadL_ZNS1_20RepeatedPtrFieldBase9resolver_EEES3_EEPNS0_5ArenaEPKT0_:
  275|  8.45k|inline Arena* ResolveArena(const T* object) {
  276|  8.45k|  return InternalMetadataResolver::FindArena<T, Resolver>(object);
  277|  8.45k|}
_ZN6google8protobuf8internal30TaggedInternalMetadataResolverILj0EE9FindArenaINS1_20RepeatedPtrFieldBaseETnMT_S3_XadL_ZNS5_9resolver_EEEEEPNS0_5ArenaEPKS6_:
  205|  8.45k|  static inline Arena* FindArena(const T* object) {
  206|  8.45k|    auto& resolver = object->*Resolver;
  207|  8.45k|    if (resolver.Offset() == 0) {
  ------------------
  |  Branch (207:9): [True: 0, False: 8.45k]
  ------------------
  208|      0|      return nullptr;
  209|      0|    }
  210|  8.45k|    return resolver.FindInternalMetadata(object).arena();
  211|  8.45k|  }
_ZNK6google8protobuf8internal30TaggedInternalMetadataResolverILj0EE6OffsetEv:
  177|  16.9k|  constexpr int32_t Offset() const {
  178|  16.9k|    return static_cast<int32_t>(offset_ & ~kTagMask);
  179|  16.9k|  }
_ZNK6google8protobuf8internal30TaggedInternalMetadataResolverILj0EE20FindInternalMetadataEPKv:
  216|  8.45k|      const void* object) const {
  217|  8.45k|    ABSL_DCHECK_NE(Offset(), 0);
  ------------------
  |  |   76|  8.45k|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   89|  8.45k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  8.45k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 8.45k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  8.45k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|  8.45k|    return *reinterpret_cast<const InternalMetadata*>(
  219|  8.45k|        reinterpret_cast<const char*>(object) + Offset());
  220|  8.45k|  }
_ZNK6google8protobuf8internal22InternalMetadataOffset6OffsetEv:
  150|  37.3k|  constexpr int32_t Offset() const { return offset_; }
_ZN6google8protobuf8internal22InternalMetadataOffsetC2Ei:
  155|  37.3k|  explicit constexpr InternalMetadataOffset(int32_t offset) : offset_(offset) {}
_ZN6google8protobuf8internal22InternalMetadataOffset5BuildIN13sentencepiece17SentencePieceTextELm40EEES2_v:
   38|  18.1k|  static constexpr PROTOBUF_ALWAYS_INLINE InternalMetadataOffset Build() {
   39|  18.1k|    static_assert(
   40|  18.1k|        std::is_same_v<std::remove_const_t<decltype(T::_internal_metadata_)>,
   41|  18.1k|                       InternalMetadata>,
   42|  18.1k|        "Field `_internal_metadata_ is not of type `InternalMetadata`");
   43|       |
   44|  18.1k|    constexpr int64_t kInternalMetadataOffset =
   45|  18.1k|        static_cast<int64_t>(PROTOBUF_FIELD_OFFSET(T, _internal_metadata_));
  ------------------
  |  |  311|  18.1k|  _Pragma("clang diagnostic push")                           \
  |  |  312|  18.1k|  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
  |  |  313|  18.1k|  __builtin_offsetof(TYPE, FIELD)                            \
  |  |  314|  18.1k|  _Pragma("clang diagnostic pop")
  ------------------
   46|       |
   47|  18.1k|    static_assert(
   48|  18.1k|        kInternalMetadataOffset - static_cast<int64_t>(kFieldOffset) >=
   49|  18.1k|            int64_t{INT32_MIN},
   50|  18.1k|        "Offset from `_internal_metadata_` is underflowing an int32_t, "
   51|  18.1k|        "likely meaning your message body is too large.");
   52|  18.1k|    static_assert(
   53|  18.1k|        kInternalMetadataOffset - static_cast<int64_t>(kFieldOffset) <=
   54|  18.1k|            int64_t{INT32_MAX},
   55|  18.1k|        "Offset from `_internal_metadata_` is overflowing an int32_t, "
   56|  18.1k|        "likely meaning your message body is too large.");
   57|       |
   58|  18.1k|    return InternalMetadataOffset(
   59|  18.1k|        static_cast<int32_t>(kInternalMetadataOffset - kFieldOffset));
   60|  18.1k|  }
_ZN6google8protobuf8internal30TaggedInternalMetadataResolverILj0EEC2ENS1_22InternalMetadataOffsetE:
  173|  37.3k|      : offset_(static_cast<uint32_t>(offset.Offset())) {
  174|  37.3k|    ABSL_DCHECK_EQ(offset_ & kTagMask, uint32_t{0});
  ------------------
  |  |   74|  37.3k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  37.3k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  37.3k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 37.3k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  37.3k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  37.3k|  }
_ZN6google8protobuf8internal22InternalMetadataOffset5BuildIN13sentencepiece22NBestSentencePieceTextELm24EEES2_v:
   38|  6.81k|  static constexpr PROTOBUF_ALWAYS_INLINE InternalMetadataOffset Build() {
   39|  6.81k|    static_assert(
   40|  6.81k|        std::is_same_v<std::remove_const_t<decltype(T::_internal_metadata_)>,
   41|  6.81k|                       InternalMetadata>,
   42|  6.81k|        "Field `_internal_metadata_ is not of type `InternalMetadata`");
   43|       |
   44|  6.81k|    constexpr int64_t kInternalMetadataOffset =
   45|  6.81k|        static_cast<int64_t>(PROTOBUF_FIELD_OFFSET(T, _internal_metadata_));
  ------------------
  |  |  311|  6.81k|  _Pragma("clang diagnostic push")                           \
  |  |  312|  6.81k|  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
  |  |  313|  6.81k|  __builtin_offsetof(TYPE, FIELD)                            \
  |  |  314|  6.81k|  _Pragma("clang diagnostic pop")
  ------------------
   46|       |
   47|  6.81k|    static_assert(
   48|  6.81k|        kInternalMetadataOffset - static_cast<int64_t>(kFieldOffset) >=
   49|  6.81k|            int64_t{INT32_MIN},
   50|  6.81k|        "Offset from `_internal_metadata_` is underflowing an int32_t, "
   51|  6.81k|        "likely meaning your message body is too large.");
   52|  6.81k|    static_assert(
   53|  6.81k|        kInternalMetadataOffset - static_cast<int64_t>(kFieldOffset) <=
   54|  6.81k|            int64_t{INT32_MAX},
   55|  6.81k|        "Offset from `_internal_metadata_` is overflowing an int32_t, "
   56|  6.81k|        "likely meaning your message body is too large.");
   57|       |
   58|  6.81k|    return InternalMetadataOffset(
   59|  6.81k|        static_cast<int32_t>(kInternalMetadataOffset - kFieldOffset));
   60|  6.81k|  }
_ZN6google8protobuf8internal22InternalMetadataOffset5BuildIN13sentencepiece10ModelProtoELm40EEES2_v:
   38|  12.3k|  static constexpr PROTOBUF_ALWAYS_INLINE InternalMetadataOffset Build() {
   39|  12.3k|    static_assert(
   40|  12.3k|        std::is_same_v<std::remove_const_t<decltype(T::_internal_metadata_)>,
   41|  12.3k|                       InternalMetadata>,
   42|  12.3k|        "Field `_internal_metadata_ is not of type `InternalMetadata`");
   43|       |
   44|  12.3k|    constexpr int64_t kInternalMetadataOffset =
   45|  12.3k|        static_cast<int64_t>(PROTOBUF_FIELD_OFFSET(T, _internal_metadata_));
  ------------------
  |  |  311|  12.3k|  _Pragma("clang diagnostic push")                           \
  |  |  312|  12.3k|  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
  |  |  313|  12.3k|  __builtin_offsetof(TYPE, FIELD)                            \
  |  |  314|  12.3k|  _Pragma("clang diagnostic pop")
  ------------------
   46|       |
   47|  12.3k|    static_assert(
   48|  12.3k|        kInternalMetadataOffset - static_cast<int64_t>(kFieldOffset) >=
   49|  12.3k|            int64_t{INT32_MIN},
   50|  12.3k|        "Offset from `_internal_metadata_` is underflowing an int32_t, "
   51|  12.3k|        "likely meaning your message body is too large.");
   52|  12.3k|    static_assert(
   53|  12.3k|        kInternalMetadataOffset - static_cast<int64_t>(kFieldOffset) <=
   54|  12.3k|            int64_t{INT32_MAX},
   55|  12.3k|        "Offset from `_internal_metadata_` is overflowing an int32_t, "
   56|  12.3k|        "likely meaning your message body is too large.");
   57|       |
   58|  12.3k|    return InternalMetadataOffset(
   59|  12.3k|        static_cast<int32_t>(kInternalMetadataOffset - kFieldOffset));
   60|  12.3k|  }

_ZN6google8protobuf8internal18InternalVisibilityC2Ev:
   49|   185M|inline constexpr InternalVisibility::InternalVisibility() = default;

_ZN6google8protobuf2io19EpsCopyOutputStream30WriteStringMaybeAliasedOutlineEjNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPh:
 1003|  1.03k|    uint32_t num, absl::string_view s, uint8_t* ptr) {
 1004|  1.03k|  ptr = EnsureSpace(ptr);
 1005|  1.03k|  uint32_t size = s.size();
 1006|  1.03k|  ptr = WriteLengthDelim(num, size, ptr);
 1007|  1.03k|  return WriteRawMaybeAliased(s.data(), size, ptr);
 1008|  1.03k|}
_ZN6google8protobuf2io19EpsCopyOutputStream18WriteStringOutlineEjNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPh:
 1012|    655|                                                 uint8_t* ptr) {
 1013|    655|  ptr = EnsureSpace(ptr);
 1014|    655|  uint32_t size = s.size();
 1015|    655|  ptr = WriteLengthDelim(num, size, ptr);
 1016|    655|  return WriteRaw(s.data(), size, ptr);
 1017|    655|}

_ZN6google8protobuf2io16CodedInputStream24GetDefaultRecursionLimitEv:
  399|  12.3k|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD static int GetDefaultRecursionLimit() {
  400|  12.3k|    return default_recursion_limit_;
  401|  12.3k|  }
_ZN6google8protobuf2io19EpsCopyOutputStreamC2EPvib:
  660|  6.81k|      : end_(static_cast<uint8_t*>(data) + size),
  661|  6.81k|        buffer_end_(nullptr),
  662|  6.81k|        stream_(nullptr),
  663|  6.81k|        is_serialization_deterministic_(deterministic) {}
_ZN6google8protobuf2io19EpsCopyOutputStream11EnsureSpaceEPh:
  679|   311k|  [[nodiscard]] uint8_t* EnsureSpace(uint8_t* ptr) {
  680|   311k|    if (ABSL_PREDICT_FALSE(ptr >= end_)) {
  ------------------
  |  |  190|   311k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 311k]
  |  |  |  Branch (190:49): [Folded, False: 311k]
  |  |  |  Branch (190:58): [True: 0, False: 311k]
  |  |  ------------------
  ------------------
  681|      0|      return EnsureSpaceFallback(ptr);
  682|      0|    }
  683|   311k|    return ptr;
  684|   311k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream8WriteRawEPKviPh:
  693|  14.6k|                                                        uint8_t* ptr) {
  694|  14.6k|    if (ABSL_PREDICT_FALSE(end_ - ptr < size)) {
  ------------------
  |  |  190|  14.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 14.6k]
  |  |  |  Branch (190:49): [Folded, False: 14.6k]
  |  |  |  Branch (190:58): [True: 0, False: 14.6k]
  |  |  ------------------
  ------------------
  695|      0|      return WriteRawFallback(data, size, ptr);
  696|      0|    }
  697|  14.6k|    std::memcpy(ptr, data, static_cast<unsigned int>(size));
  698|  14.6k|    return ptr + size;
  699|  14.6k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream20WriteRawMaybeAliasedEPKviPh:
  708|  1.03k|  uint8_t* WriteRawMaybeAliased(const void* data, int size, uint8_t* ptr) {
  709|  1.03k|    if (aliasing_enabled_) {
  ------------------
  |  Branch (709:9): [True: 0, False: 1.03k]
  ------------------
  710|      0|      return WriteAliasedRaw(data, size, ptr);
  711|  1.03k|    } else {
  712|  1.03k|      return WriteRaw(data, size, ptr);
  713|  1.03k|    }
  714|  1.03k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream23WriteStringMaybeAliasedEjNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPh:
  724|   113k|                                   uint8_t* ptr) {
  725|   113k|    std::ptrdiff_t size = s.size();
  726|   113k|    if (ABSL_PREDICT_FALSE(size >= 128 ||
  ------------------
  |  |  190|   225k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.03k, False: 112k]
  |  |  |  Branch (190:49): [Folded, False: 113k]
  |  |  |  Branch (190:59): [True: 1.03k, False: 112k]
  |  |  |  Branch (190:59): [True: 0, False: 112k]
  |  |  ------------------
  ------------------
  727|   113k|                           end_ - ptr + 16 - TagSize(num << 3) - 1 < size)) {
  728|  1.03k|      return WriteStringMaybeAliasedOutline(num, s, ptr);
  729|  1.03k|    }
  730|   112k|    ptr = UnsafeVarint((num << 3) | 2, ptr);
  731|   112k|    *ptr++ = static_cast<uint8_t>(size);
  732|   112k|    std::memcpy(ptr, s.data(), size);
  733|   112k|    return ptr + size;
  734|   113k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream22WriteBytesMaybeAliasedEjNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPh:
  736|     13|      uint32_t num, absl::string_view s, uint8_t* ptr) {
  737|     13|    return WriteStringMaybeAliased(num, s, ptr);
  738|     13|  }
_ZN6google8protobuf2io19EpsCopyOutputStream7TagSizeEj:
  883|   117k|  static constexpr int TagSize(uint32_t tag) {
  884|   117k|    return (tag < (1 << 7))    ? 1
  ------------------
  |  Branch (884:12): [True: 116k, False: 873]
  ------------------
  885|   117k|           : (tag < (1 << 14)) ? 2
  ------------------
  |  Branch (885:14): [True: 873, False: 0]
  ------------------
  886|    873|           : (tag < (1 << 21)) ? 3
  ------------------
  |  Branch (886:14): [True: 0, False: 0]
  ------------------
  887|      0|           : (tag < (1 << 28)) ? 4
  ------------------
  |  Branch (887:14): [True: 0, False: 0]
  ------------------
  888|      0|                               : 5;
  889|   117k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream8WriteTagEjjPh:
  892|  1.68k|                                           uint8_t* ptr) {
  893|  1.68k|    ABSL_DCHECK(ptr < end_);  // NOLINT
  ------------------
  |  |   47|  1.68k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  1.68k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  3.37k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  1.68k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  3.37k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  3.37k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.68k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.68k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.68k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.68k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.68k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  3.37k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  3.37k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  894|  1.68k|    return UnsafeVarint((num << 3) | wt, ptr);
  895|  1.68k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream16WriteLengthDelimEijPh:
  898|  1.68k|                                                   uint8_t* ptr) {
  899|  1.68k|    ptr = WriteTag(num, 2, ptr);
  900|  1.68k|    return UnsafeWriteSize(size, ptr);
  901|  1.68k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream15UnsafeWriteSizeEjPh:
  950|  1.68k|                                                         uint8_t* ptr) {
  951|  3.37k|    while (ABSL_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  190|  3.37k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.68k, False: 1.68k]
  |  |  |  Branch (190:49): [Folded, False: 3.37k]
  |  |  |  Branch (190:58): [True: 1.68k, False: 1.68k]
  |  |  ------------------
  ------------------
  952|  1.68k|      *ptr = static_cast<uint8_t>(value | 0x80);
  953|  1.68k|      value >>= 7;
  954|  1.68k|      ++ptr;
  955|  1.68k|    }
  956|  1.68k|    *ptr++ = static_cast<uint8_t>(value);
  957|  1.68k|    return ptr;
  958|  1.68k|  }
_ZN6google8protobuf2io17CodedOutputStream35IsDefaultSerializationDeterministicEv:
 1321|  6.81k|  IsDefaultSerializationDeterministic() {
 1322|  6.81k|    return default_serialization_deterministic_.load(
 1323|  6.81k|               std::memory_order_relaxed) != 0;
 1324|  6.81k|  }
_ZN6google8protobuf2io17CodedOutputStream20WriteVarint32ToArrayEjPh:
 1705|   427k|                                                        uint8_t* target) {
 1706|   427k|  return EpsCopyOutputStream::UnsafeVarint(value, target);
 1707|   427k|}
_ZN6google8protobuf2io17CodedOutputStream20WriteVarint64ToArrayEmPh:
 1710|  85.6k|                                                        uint8_t* target) {
 1711|  85.6k|  return EpsCopyOutputStream::UnsafeVarint(value, target);
 1712|  85.6k|}
_ZN6google8protobuf2io17CodedOutputStream32WriteVarint32SignExtendedToArrayEiPh:
 1719|  85.4k|    int32_t value, uint8_t* target) {
 1720|  85.4k|  return WriteVarint64ToArray(static_cast<uint64_t>(value), target);
 1721|  85.4k|}
_ZN6google8protobuf2io17CodedOutputStream26WriteLittleEndian32ToArrayEjPh:
 1731|   134k|                                                              uint8_t* target) {
 1732|   134k|#if defined(ABSL_IS_LITTLE_ENDIAN) && \
 1733|   134k|    !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST)
 1734|   134k|  memcpy(target, &value, sizeof(value));
 1735|       |#else
 1736|       |  target[0] = static_cast<uint8_t>(value);
 1737|       |  target[1] = static_cast<uint8_t>(value >> 8);
 1738|       |  target[2] = static_cast<uint8_t>(value >> 16);
 1739|       |  target[3] = static_cast<uint8_t>(value >> 24);
 1740|       |#endif
 1741|   134k|  return target + sizeof(value);
 1742|   134k|}
_ZN6google8protobuf2io17CodedOutputStream26WriteLittleEndian64ToArrayEmPh:
 1745|   192k|                                                              uint8_t* target) {
 1746|   192k|#if defined(ABSL_IS_LITTLE_ENDIAN) && \
 1747|   192k|    !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST)
 1748|   192k|  memcpy(target, &value, sizeof(value));
 1749|       |#else
 1750|       |  uint32_t part0 = static_cast<uint32_t>(value);
 1751|       |  uint32_t part1 = static_cast<uint32_t>(value >> 32);
 1752|       |
 1753|       |  target[0] = static_cast<uint8_t>(part0);
 1754|       |  target[1] = static_cast<uint8_t>(part0 >> 8);
 1755|       |  target[2] = static_cast<uint8_t>(part0 >> 16);
 1756|       |  target[3] = static_cast<uint8_t>(part0 >> 24);
 1757|       |  target[4] = static_cast<uint8_t>(part1);
 1758|       |  target[5] = static_cast<uint8_t>(part1 >> 8);
 1759|       |  target[6] = static_cast<uint8_t>(part1 >> 16);
 1760|       |  target[7] = static_cast<uint8_t>(part1 >> 24);
 1761|       |#endif
 1762|   192k|  return target + sizeof(value);
 1763|   192k|}
_ZN6google8protobuf2io17CodedOutputStream15WriteTagToArrayEjPh:
 1780|   309k|                                                   uint8_t* target) {
 1781|   309k|  return WriteVarint32ToArray(value, target);
 1782|   309k|}
_ZN6google8protobuf2io17CodedOutputStream12VarintSize32Ej:
 1794|   236k|inline size_t CodedOutputStream::VarintSize32(uint32_t value) {
 1795|   236k|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1796|       |  // Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
 1797|       |  // requires a branch to check for on platforms without a clz instruction.
 1798|   236k|  uint32_t log2value = (std::numeric_limits<uint32_t>::digits - 1) -
 1799|   236k|                       absl::countl_zero(value | 0x1);
 1800|   236k|  return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
 1801|       |#else
 1802|       |  uint32_t clz = absl::countl_zero(value);
 1803|       |  return static_cast<size_t>(
 1804|       |      ((std::numeric_limits<uint32_t>::digits * 9 + 64) - (clz * 9)) / 64);
 1805|       |#endif
 1806|   236k|}
_ZN6google8protobuf2io17CodedOutputStream12VarintSize64Em:
 1821|  84.3k|inline size_t CodedOutputStream::VarintSize64(uint64_t value) {
 1822|  84.3k|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1823|       |  // Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
 1824|       |  // requires a branch to check for on platforms without a clz instruction.
 1825|  84.3k|  uint32_t log2value = (std::numeric_limits<uint64_t>::digits - 1) -
 1826|  84.3k|                       absl::countl_zero(value | 0x1);
 1827|  84.3k|  return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
 1828|       |#else
 1829|       |  uint32_t clz = absl::countl_zero(value);
 1830|       |  return static_cast<size_t>(
 1831|       |      ((std::numeric_limits<uint64_t>::digits * 9 + 64) - (clz * 9)) / 64);
 1832|       |#endif
 1833|  84.3k|}
_ZN6google8protobuf2io17CodedOutputStream19VarintSize64PlusOneEm:
 1835|  1.32k|inline size_t CodedOutputStream::VarintSize64PlusOne(uint64_t value) {
 1836|       |  // Same as above, but one more.
 1837|  1.32k|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1838|  1.32k|  uint32_t log2value = (std::numeric_limits<uint64_t>::digits - 1) -
 1839|  1.32k|                       absl::countl_zero(value | 0x1);
 1840|  1.32k|  return static_cast<size_t>((log2value * 9 + (64 + 9) + 64) / 64);
 1841|       |#else
 1842|       |  uint32_t clz = absl::countl_zero(value);
 1843|       |  return static_cast<size_t>(
 1844|       |      ((std::numeric_limits<uint64_t>::digits * 9 + 64 + 64) - (clz * 9)) / 64);
 1845|       |#endif
 1846|  1.32k|}
_ZN6google8protobuf2io17CodedOutputStream24VarintSize32SignExtendedEi:
 1848|  84.2k|inline size_t CodedOutputStream::VarintSize32SignExtended(int32_t value) {
 1849|  84.2k|  return VarintSize64(static_cast<uint64_t>(int64_t{value}));
 1850|  84.2k|}
_ZN6google8protobuf2io17CodedOutputStream31VarintSize32SignExtendedPlusOneEi:
 1853|  1.17k|    int32_t value) {
 1854|  1.17k|  return VarintSize64PlusOne(static_cast<uint64_t>(int64_t{value}));
 1855|  1.17k|}
_ZN6google8protobuf2io19EpsCopyOutputStream12UnsafeVarintIjEEPhT_S4_:
  937|   546k|  PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) {
  938|   546k|    static_assert(std::is_unsigned_v<T>,
  939|   546k|                  "Varint serialization must be unsigned");
  940|   549k|    while (ABSL_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  190|   549k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.85k, False: 546k]
  |  |  |  Branch (190:49): [Folded, False: 549k]
  |  |  |  Branch (190:58): [True: 2.85k, False: 546k]
  |  |  ------------------
  ------------------
  941|  2.85k|      *ptr = static_cast<uint8_t>(value | 0x80);
  942|  2.85k|      value >>= 7;
  943|  2.85k|      ++ptr;
  944|  2.85k|    }
  945|   546k|    *ptr++ = static_cast<uint8_t>(value);
  946|   546k|    return ptr;
  947|   546k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream12UnsafeVarintImEEPhT_S4_:
  937|  85.6k|  PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) {
  938|  85.6k|    static_assert(std::is_unsigned_v<T>,
  939|  85.6k|                  "Varint serialization must be unsigned");
  940|  90.9k|    while (ABSL_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  190|  90.9k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 5.29k, False: 85.6k]
  |  |  |  Branch (190:49): [Folded, False: 90.9k]
  |  |  |  Branch (190:58): [True: 5.29k, False: 85.6k]
  |  |  ------------------
  ------------------
  941|  5.29k|      *ptr = static_cast<uint8_t>(value | 0x80);
  942|  5.29k|      value >>= 7;
  943|  5.29k|      ++ptr;
  944|  5.29k|    }
  945|  85.6k|    *ptr++ = static_cast<uint8_t>(value);
  946|  85.6k|    return ptr;
  947|  85.6k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream11WriteStringINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEPhjRKT_SB_:
  742|  6.11k|  WriteString(uint32_t num, const T& s, uint8_t* ptr) {
  743|  6.11k|    std::ptrdiff_t size = s.size();
  744|  6.11k|    if (ABSL_PREDICT_FALSE(size >= 128 ||
  ------------------
  |  |  190|  11.5k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 655, False: 5.45k]
  |  |  |  Branch (190:49): [Folded, False: 6.11k]
  |  |  |  Branch (190:59): [True: 655, False: 5.45k]
  |  |  |  Branch (190:59): [True: 0, False: 5.45k]
  |  |  ------------------
  ------------------
  745|  6.11k|                           end_ - ptr + 16 - TagSize(num << 3) - 1 < size)) {
  746|    655|      return WriteStringOutline(num, s, ptr);
  747|    655|    }
  748|  5.45k|    ptr = UnsafeVarint((num << 3) | 2, ptr);
  749|  5.45k|    *ptr++ = static_cast<uint8_t>(size);
  750|  5.45k|    std::memcpy(ptr, s.data(), size);
  751|  5.45k|    return ptr + size;
  752|  6.11k|  }

_ZN6google8protobuf2io19mutable_string_dataEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  513|  6.81k|inline char* mutable_string_data(std::string* s) {
  514|  6.81k|  return &(*s)[0];
  515|  6.81k|}

_ZN6google8protobuf8internal13MergeFromImplILb0EEEbNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPNS0_11MessageLiteEPKNS1_16TcParseTableBaseENS8_10ParseFlagsE:
  228|  12.3k|                   MessageLite::ParseFlags parse_flags) {
  229|  12.3k|  const char* ptr;
  230|  12.3k|  internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
  231|  12.3k|                             aliasing, &ptr, input);
  232|  12.3k|  ptr = internal::TcParser::ParseLoop(msg, ptr, &ctx, tc_table);
  233|       |  // ctx has an explicit limit set (length of string_view).
  234|  12.3k|  if (ABSL_PREDICT_TRUE(ptr && ctx.EndedAtLimit())) {
  ------------------
  |  |  191|  20.2k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 7.73k, False: 4.65k]
  |  |  |  Branch (191:48): [Folded, False: 12.3k]
  |  |  |  Branch (191:58): [True: 7.86k, False: 4.52k]
  |  |  |  Branch (191:58): [True: 7.73k, False: 124]
  |  |  ------------------
  ------------------
  235|  7.73k|    return CheckFieldPresenceImpl(ctx, *msg, parse_flags);
  236|  7.73k|  }
  237|  4.65k|  return false;
  238|  12.3k|}
_ZNK6google8protobuf11MessageLite3NewEPNS0_5ArenaE:
   92|  2.32M|MessageLite* MessageLite::New(Arena* arena) const {
   93|  2.32M|  auto* data = GetClassData();
   94|  2.32M|  void* mem = data->message_creator.AllocateMessage(arena);
   95|       |  // The `instance->New()` expression requires using the actual instance
   96|       |  // instead of the prototype for the inner function call.
   97|       |  // Certain custom instances have special per-instance state that needs to be
   98|       |  // copied.
   99|  2.32M|  return data->message_creator.PlacementNew(this, data->default_instance(), mem,
  100|  2.32M|                                            arena);
  101|  2.32M|}
_ZNK6google8protobuf11MessageLite13IsInitializedEv:
  103|  7.73k|bool MessageLite::IsInitialized() const {
  104|  7.73k|  auto* data = GetClassData();
  105|  7.73k|  return data->is_initialized != nullptr ? data->is_initialized(*this) : true;
  ------------------
  |  Branch (105:10): [True: 7.73k, False: 0]
  ------------------
  106|  7.73k|}
_ZN6google8protobuf11MessageLite14ParseFromArrayEPKvi:
  425|  12.3k|bool MessageLite::ParseFromArray(const void* data, int size) {
  426|  12.3k|  return ParseFrom<kParse>(as_string_view(data, size));
  427|  12.3k|}
_ZNK6google8protobuf11MessageLite14AppendToStringEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  596|  6.81k|bool MessageLite::AppendToString(std::string* output) const {
  597|  13.6k|  ABSL_DCHECK(IsInitialized())
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  6.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  6.81k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  13.6k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  13.6k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.81k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.81k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.81k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  6.81k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|  6.81k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|  13.6k|      << InitializationErrorMessage("serialize", *this);
  599|  6.81k|  return AppendPartialToString(output);
  600|  6.81k|}
_ZNK6google8protobuf11MessageLite21AppendPartialToStringEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  602|  6.81k|bool MessageLite::AppendPartialToString(std::string* output) const {
  603|  6.81k|  size_t old_size = output->size();
  604|  6.81k|  size_t byte_size = ByteSizeLong();
  605|  6.81k|  if (byte_size > INT_MAX) {
  ------------------
  |  Branch (605:7): [True: 0, False: 6.81k]
  ------------------
  606|      0|    ABSL_LOG(ERROR) << GetTypeName()
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|      0|                    << " exceeded maximum protobuf size of 2GB: " << byte_size;
  608|      0|    return false;
  609|      0|  }
  610|       |
  611|  6.81k|  absl::strings_internal::STLStringResizeUninitializedAmortized(
  612|  6.81k|      output, old_size + byte_size);
  613|  6.81k|  uint8_t* start =
  614|  6.81k|      reinterpret_cast<uint8_t*>(io::mutable_string_data(output) + old_size);
  615|  6.81k|  SerializeToArrayImpl(*this, start, byte_size);
  616|  6.81k|  return true;
  617|  6.81k|}
_ZNK6google8protobuf11MessageLite17SerializeAsStringEv:
  648|  6.81k|std::string MessageLite::SerializeAsString() const {
  649|       |  // If the compiler implements the (Named) Return Value Optimization,
  650|       |  // the local variable 'output' will not actually reside on the stack
  651|       |  // of this function, but will be overlaid with the object that the
  652|       |  // caller supplied for the return value to be constructed in.
  653|  6.81k|  std::string output;
  654|  6.81k|  if (!AppendToString(&output)) output.clear();
  ------------------
  |  Branch (654:7): [True: 0, False: 6.81k]
  ------------------
  655|  6.81k|  return output;
  656|  6.81k|}
message_lite.cc:_ZN6google8protobuf12_GLOBAL__N_122CheckFieldPresenceImplERKNS0_8internal12ParseContextERKNS0_11MessageLiteENS6_10ParseFlagsE:
  182|  7.73k|                                   MessageLite::ParseFlags parse_flags) {
  183|  7.73k|  (void)ctx;  // Parameter is used by Google-internal code.
  184|  7.73k|  if (ABSL_PREDICT_FALSE((parse_flags & MessageLite::kMergePartial) != 0)) {
  ------------------
  |  |  190|  7.73k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 7.73k]
  |  |  |  Branch (190:49): [Folded, False: 7.73k]
  |  |  |  Branch (190:58): [True: 0, False: 7.73k]
  |  |  ------------------
  ------------------
  185|      0|    return true;
  186|      0|  }
  187|  7.73k|  return msg.IsInitializedWithErrors();
  188|  7.73k|}
message_lite.cc:_ZN6google8protobuf12_GLOBAL__N_114as_string_viewEPKvi:
  175|  12.3k|inline absl::string_view as_string_view(const void* data, int size) {
  176|  12.3k|  return absl::string_view(static_cast<const char*>(data), size);
  177|  12.3k|}
_ZN6google8protobuf20SerializeToArrayImplERKNS0_11MessageLiteEPhi:
  484|  6.81k|                                     int size) {
  485|  6.81k|  constexpr bool debug = false;
  486|  6.81k|  if (debug) {
  ------------------
  |  Branch (486:7): [Folded, False: 6.81k]
  ------------------
  487|       |    // Force serialization to a stream with a block size of 1, which forces
  488|       |    // all writes to the stream to cross buffers triggering all fallback paths
  489|       |    // in the unittests when serializing to string / array.
  490|      0|    io::ArrayOutputStream stream(target, size, 1);
  491|      0|    uint8_t* ptr;
  492|      0|    io::EpsCopyOutputStream out(
  493|      0|        &stream, io::CodedOutputStream::IsDefaultSerializationDeterministic(),
  494|      0|        &ptr);
  495|      0|    ptr = msg._InternalSerialize(ptr, &out);
  496|       |    // TODO: Remove this suppression.
  497|      0|    (void)out.Trim(ptr);
  498|      0|    ABSL_DCHECK(!out.HadError() && stream.ByteCount() == size);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|      0|    return target + size;
  500|  6.81k|  } else {
  501|  6.81k|    io::EpsCopyOutputStream out(
  502|  6.81k|        target, size,
  503|  6.81k|        io::CodedOutputStream::IsDefaultSerializationDeterministic());
  504|  6.81k|    uint8_t* res = msg._InternalSerialize(target, &out);
  505|  6.81k|    ABSL_DCHECK(target + size == res);
  ------------------
  |  |   47|  6.81k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  6.81k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  13.6k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  6.81k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  13.6k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  13.6k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.81k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.81k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.81k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  13.6k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  13.6k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|  6.81k|    return res;
  507|  6.81k|  }
  508|  6.81k|}

_ZN6google8protobuf8internal18MessageGlobalsBase17ToDefaultInstanceIN13sentencepiece11TrainerSpecEEEPKT_PKv:
  261|  41.6M|  static const T* ToDefaultInstance(const void* globals) {
  262|  41.6M|    return reinterpret_cast<const T*>(globals);
  263|  41.6M|  }
_ZN6google8protobuf11MessageLite9SetHasBitERjj:
  891|   785M|      uint32_t& cached_has_bits, uint32_t has_bit_mask) {
  892|   785M|    cached_has_bits |= has_bit_mask;
  893|   785M|  }
_ZN6google8protobuf8internal18MessageGlobalsBase17ToDefaultInstanceIN13sentencepiece14NormalizerSpecEEEPKT_PKv:
  261|  32.3k|  static const T* ToDefaultInstance(const void* globals) {
  262|  32.3k|    return reinterpret_cast<const T*>(globals);
  263|  32.3k|  }
_ZN6google8protobuf11MessageLite11CheckHasBitEjj:
  901|   897k|      uint32_t cached_has_bits, uint32_t has_bit_mask) {
  902|   897k|    return (cached_has_bits & has_bit_mask) != 0;
  903|   897k|  }
_ZN6google8protobuf11MessageLite19internal_visibilityEv:
  788|   185M|  static constexpr internal::InternalVisibility internal_visibility() {
  789|   185M|    return internal::InternalVisibility{};
  790|   185M|  }
_ZNK6google8protobuf11MessageLite8GetArenaEv:
  419|   425M|  [[nodiscard]] Arena* GetArena() const { return _internal_metadata_.arena(); }
_ZN6google8protobuf8internal10CachedSizeC2Ev:
  126|  92.8M|  constexpr CachedSize() noexcept : atom_(Scalar{}) {}
_ZNK6google8protobuf8internal10CachedSize3SetEi:
  128|   123k|  void Set(Scalar desired) const noexcept {
  129|       |    // Avoid writing the value when it is zero. This prevents writing to global
  130|       |    // default instances, which might be in readonly memory.
  131|   123k|    if (ABSL_PREDICT_FALSE(desired == 0)) {
  ------------------
  |  |  190|   123k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 40, False: 123k]
  |  |  |  Branch (190:49): [Folded, False: 123k]
  |  |  |  Branch (190:58): [True: 40, False: 123k]
  |  |  ------------------
  ------------------
  132|     40|      if (Get() == 0) return;
  ------------------
  |  Branch (132:11): [True: 40, False: 0]
  ------------------
  133|     40|    }
  134|   123k|    SetImpl(desired);
  135|   123k|  }
_ZNK6google8protobuf8internal10CachedSize3GetEv:
  146|   117k|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD Scalar Get() const noexcept {
  147|   117k|    return __atomic_load_n(&atom_, __ATOMIC_RELAXED);
  148|   117k|  }
_ZNK6google8protobuf8internal10CachedSize7SetImplEi:
  151|   123k|  void SetImpl(Scalar desired) const noexcept {
  152|   123k|    __atomic_store_n(&atom_, desired, __ATOMIC_RELAXED);
  153|   123k|  }
_ZNK6google8protobuf11MessageLite15GetTcParseTableEv:
  838|  12.3k|  const internal::TcParseTableBase* GetTcParseTable() const {
  839|  12.3k|    auto* data = GetClassData();
  840|  12.3k|    ABSL_DCHECK(data != nullptr);
  ------------------
  |  |   47|  12.3k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  12.3k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  24.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  12.3k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  24.7k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  24.7k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 12.3k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  12.3k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 12.3k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  12.3k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 12.3k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  24.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  24.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  841|  12.3k|    return data->GetTcParseTable();
  842|  12.3k|  }
_ZN6google8protobuf11MessageLiteC2EPNS0_5ArenaE:
  851|  92.8M|  explicit MessageLite(Arena* arena) : _internal_metadata_(arena) {}
_ZN6google8protobuf11MessageLite16BatchCheckHasBitEjj:
  906|   169k|      uint32_t cached_has_bits, uint32_t batch_has_bits_mask) {
  907|   169k|    return (cached_has_bits & batch_has_bits_mask) != 0;
  908|   169k|  }
_ZNK6google8protobuf11MessageLite23IsInitializedWithErrorsEv:
  954|  7.73k|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool IsInitializedWithErrors() const {
  955|  7.73k|    if (IsInitialized()) return true;
  ------------------
  |  Branch (955:9): [True: 7.73k, False: 0]
  ------------------
  956|      0|    LogInitializationErrorMessage();
  957|      0|    return false;
  958|  7.73k|  }
_ZN6google8protobuf8internal12ToCachedSizeEm:
  231|   123k|inline int ToCachedSize(size_t size) { return static_cast<int>(size); }
_ZN6google8protobuf8internal11FromIntSizeEi:
  239|  2.48k|inline size_t FromIntSize(int size) {
  240|       |  // Convert to unsigned before widening so sign extension is not necessary.
  241|  2.48k|  return static_cast<unsigned int>(size);
  242|  2.48k|}
_ZNK6google8protobuf8internal9ClassData15GetTcParseTableEv:
  351|  12.3k|inline const TcParseTableBase* ClassData::GetTcParseTable() const {
  352|       |#ifdef PROTOBUF_MESSAGE_GLOBALS
  353|       |  if (ABSL_PREDICT_FALSE(is_dynamic)) {
  354|       |#else
  355|  12.3k|  if (ABSL_PREDICT_FALSE(tc_table == nullptr)) {
  ------------------
  |  |  190|  12.3k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 12.3k]
  |  |  |  Branch (190:49): [Folded, False: 12.3k]
  |  |  |  Branch (190:58): [True: 0, False: 12.3k]
  |  |  ------------------
  ------------------
  356|      0|#endif
  357|      0|    ABSL_DCHECK(!is_lite);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|      0|    return full().descriptor_methods()->get_tc_table(this);
  359|      0|  }
  360|       |#ifdef PROTOBUF_MESSAGE_GLOBALS
  361|       |  return MessageGlobalsBase::ToParseTableBase(this);
  362|       |#else
  363|  12.3k|  return tc_table;
  364|  12.3k|#endif
  365|  12.3k|}
_ZNK6google8protobuf8internal9ClassData3NewEPNS0_5ArenaE:
 1129|  8.12k|PROTOBUF_ALWAYS_INLINE MessageLite* ClassData::New(Arena* arena) const {
 1130|       |  // Allocate the memory first, to reduce the number of spills.
 1131|       |  // This way we only spill `this` and `arena`.
 1132|  8.12k|  void* mem = message_creator.AllocateMessage(arena);
 1133|  8.12k|  const MessageLite* def = default_instance();
 1134|  8.12k|  return message_creator.PlacementNew(def, def, mem, arena);
 1135|  8.12k|}
_ZNK6google8protobuf8internal14MessageCreator12PlacementNewINS0_11MessageLiteEEEPT_PKS5_S8_PvPNS0_5ArenaE:
 1146|  2.33M|    const MessageLite* prototype_for_copy, void* mem, Arena* arena) const {
 1147|  2.33M|  ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(mem) % alignment_, 0u);
  ------------------
  |  |   74|  2.33M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.33M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.33M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.33M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.33M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1148|  2.33M|  const Tag as_tag = tag();
 1149|  2.33M|  static_assert(kFunc < 0 && !(kZeroInit < 0) && !(kMemcpy < 0),
 1150|  2.33M|                "Only kFunc must be the only negative value");
 1151|  2.33M|  if (ABSL_PREDICT_FALSE(static_cast<int8_t>(as_tag) < 0)) {
  ------------------
  |  |  190|  2.33M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 2.33M]
  |  |  |  Branch (190:49): [Folded, False: 2.33M]
  |  |  |  Branch (190:58): [True: 0, False: 2.33M]
  |  |  ------------------
  ------------------
 1152|      0|    PROTOBUF_DEBUG_COUNTER("MessageCreator.Func").Inc();
  ------------------
  |  |  856|      0|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1153|      0|    return static_cast<MessageLite*>(func_(prototype_for_func, mem, arena));
 1154|      0|  }
 1155|       |
 1156|  2.33M|  char* dst = static_cast<char*>(mem);
 1157|  2.33M|  const size_t size = allocation_size_;
 1158|  2.33M|  const char* src = reinterpret_cast<const char*>(prototype_for_copy);
 1159|       |
 1160|       |  // These are a bit more efficient than calling normal memset/memcpy because:
 1161|       |  //  - We know the minimum size is 16. We have a fallback for when it is not.
 1162|       |  //  - We can "underflow" the buffer because those are the MessageLite bytes
 1163|       |  //    we will set later.
 1164|  2.33M|  if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1164:7): [True: 0, False: 2.33M]
  ------------------
 1165|      0|    PROTOBUF_DEBUG_COUNTER("MessageCreator.ZeroInit").IncLog(size);
  ------------------
  |  |  856|      0|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1166|       |    // Make sure the input is really all zeros.
 1167|      0|    ABSL_DCHECK(std::all_of(src + sizeof(MessageLite), src + size,
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1168|      0|                            [](auto c) { return c == 0; }));
 1169|       |
 1170|      0|    if (sizeof(MessageLite) != 16) {
  ------------------
  |  Branch (1170:9): [Folded, False: 0]
  ------------------
 1171|      0|      memset(dst, 0, size);
 1172|      0|    } else if (size <= 32) {
  ------------------
  |  Branch (1172:16): [True: 0, False: 0]
  ------------------
 1173|      0|      memset(dst + size - 16, 0, 16);
 1174|      0|    } else if (size <= 64) {
  ------------------
  |  Branch (1174:16): [True: 0, False: 0]
  ------------------
 1175|      0|      memset(dst + 16, 0, 16);
 1176|      0|      memset(dst + size - 32, 0, 32);
 1177|      0|    } else {
 1178|      0|      for (size_t offset = 16; offset + 64 < size; offset += 64) {
  ------------------
  |  Branch (1178:32): [True: 0, False: 0]
  ------------------
 1179|      0|        absl::PrefetchToLocalCacheForWrite(dst + offset + 64);
 1180|      0|        memset(dst + offset, 0, 64);
 1181|      0|      }
 1182|      0|      memset(dst + size - 64, 0, 64);
 1183|      0|    }
 1184|  2.33M|  } else {
 1185|  2.33M|    PROTOBUF_DEBUG_COUNTER("MessageCreator.Memcpy").IncLog(size);
  ------------------
  |  |  856|  2.33M|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1186|  2.33M|    ABSL_DCHECK_EQ(+as_tag, +kMemcpy);
  ------------------
  |  |   74|  2.33M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.33M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.33M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.33M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.33M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1187|       |
 1188|  2.33M|    if (sizeof(MessageLite) != 16) {
  ------------------
  |  Branch (1188:9): [Folded, False: 2.33M]
  ------------------
 1189|      0|      memcpy(dst, src, size);
 1190|  2.33M|    } else if (size <= 32) {
  ------------------
  |  Branch (1190:16): [True: 0, False: 2.33M]
  ------------------
 1191|      0|      memcpy(dst + size - 16, src + size - 16, 16);
 1192|  2.33M|    } else if (size <= 64) {
  ------------------
  |  Branch (1192:16): [True: 2.32M, False: 8.12k]
  ------------------
 1193|  2.32M|      memcpy(dst + 16, src + 16, 16);
 1194|  2.32M|      memcpy(dst + size - 32, src + size - 32, 32);
 1195|  2.32M|    } else {
 1196|  36.0k|      for (size_t offset = 16; offset + 64 < size; offset += 64) {
  ------------------
  |  Branch (1196:32): [True: 27.9k, False: 8.12k]
  ------------------
 1197|  27.9k|        absl::PrefetchToLocalCache(src + offset + 64);
 1198|  27.9k|        absl::PrefetchToLocalCacheForWrite(dst + offset + 64);
 1199|  27.9k|        memcpy(dst + offset, src + offset, 64);
 1200|  27.9k|      }
 1201|  8.12k|      memcpy(dst + size - 64, src + size - 64, 64);
 1202|  8.12k|    }
 1203|  2.33M|  }
 1204|       |
 1205|       |  // The second memcpy overwrites part of the first, but the compiler should
 1206|       |  // avoid the double-write. It's easier than trying to avoid the overlap.
 1207|  2.33M|  memcpy(dst, static_cast<const void*>(prototype_for_copy),
 1208|  2.33M|         sizeof(MessageLite));
 1209|  2.33M|  memcpy(dst + PROTOBUF_FIELD_OFFSET(MessageLite, _internal_metadata_), &arena,
  ------------------
  |  |  311|  2.33M|  _Pragma("clang diagnostic push")                           \
  |  |  312|  2.33M|  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
  |  |  313|  2.33M|  __builtin_offsetof(TYPE, FIELD)                            \
  |  |  314|  2.33M|  _Pragma("clang diagnostic pop")
  ------------------
 1210|  2.33M|         sizeof(arena));
 1211|  2.33M|  return Launder(reinterpret_cast<MessageLite*>(mem));
 1212|  2.33M|}
_ZN6google8protobuf8internal18MessageGlobalsBase17ToDefaultInstanceIN13sentencepiece24ModelProto_SentencePieceEEEPKT_PKv:
  261|  2.18M|  static const T* ToDefaultInstance(const void* globals) {
  262|  2.18M|    return reinterpret_cast<const T*>(globals);
  263|  2.18M|  }
_ZN6google8protobuf8internal18MessageGlobalsBase17ToDefaultInstanceIN13sentencepiece10ModelProtoEEEPKT_PKv:
  261|  14.5k|  static const T* ToDefaultInstance(const void* globals) {
  262|  14.5k|    return reinterpret_cast<const T*>(globals);
  263|  14.5k|  }
_ZN6google8protobuf11MessageLiteD2Ev:
  399|  2.34M|  PROTOBUF_VIRTUAL ~MessageLite() = default;
_ZN6google8protobuf11MessageLite9ParseFromILNS1_10ParseFlagsE1ENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEbRKT0_:
 1088|  12.3k|    const T& input) {
 1089|  12.3k|  if (flags & kParse) Clear();
  ------------------
  |  Branch (1089:7): [True: 12.3k, Folded]
  ------------------
 1090|  12.3k|  constexpr bool alias = (flags & kMergeWithAliasing) != 0;
 1091|  12.3k|  const internal::TcParseTableBase* tc_table;
 1092|  12.3k|  PROTOBUF_ALWAYS_INLINE_CALL tc_table = GetTcParseTable();
  ------------------
  |  |  174|  12.3k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1093|  12.3k|  return internal::MergeFromImpl<alias>(input, this, tc_table, flags);
 1094|  12.3k|}

_ZNK6google8protobuf8internal16InternalMetadata5arenaEv:
   67|   425M|  PROTOBUF_NDEBUG_INLINE Arena* arena() const {
   68|   425M|    if (ABSL_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  190|   425M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 120k, False: 425M]
  |  |  |  Branch (190:49): [Folded, False: 425M]
  |  |  |  Branch (190:58): [True: 120k, False: 425M]
  |  |  ------------------
  ------------------
   69|   120k|      return PtrValue<ContainerBase>()->arena;
   70|   425M|    } else {
   71|   425M|      return PtrValue<Arena>();
   72|   425M|    }
   73|   425M|  }
_ZNK6google8protobuf8internal16InternalMetadata19have_unknown_fieldsEv:
   75|   431M|  PROTOBUF_NDEBUG_INLINE bool have_unknown_fields() const {
   76|   431M|    return HasUnknownFieldsTag();
   77|   431M|  }
_ZNK6google8protobuf8internal16InternalMetadata19HasUnknownFieldsTagEv:
  143|   431M|  PROTOBUF_ALWAYS_INLINE bool HasUnknownFieldsTag() const {
  144|   431M|    return ptr_ & kUnknownFieldsTagMask;
  145|   431M|  }
_ZNK6google8protobuf8internal16InternalMetadata8PtrValueINS2_13ContainerBaseEEEPT_v:
  148|   120k|  U* PtrValue() const {
  149|       |    if constexpr (std::is_same_v<U, Arena>) {
  150|       |      // No mask to remove.
  151|       |      ABSL_DCHECK_EQ(ptr_ & kPtrTagMask, 0);
  152|       |      return reinterpret_cast<U*>(ptr_);
  153|   120k|    } else {
  154|   120k|      static_assert(kPtrTagMask == 1);
  155|   120k|      ABSL_DCHECK_EQ(ptr_ & kPtrTagMask, kPtrTagMask);
  ------------------
  |  |   74|   120k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|   120k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   120k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 120k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   120k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  156|       |      // We can remove the mask via -1, which is smaller asm and can be merged
  157|       |      // with other arithmetic operations.
  158|       |      // Eg PtrValue<Container>()->unknown_fields can merge the offset into the
  159|       |      // mask removal.
  160|   120k|      return reinterpret_cast<U*>(ptr_ - kPtrTagMask);
  161|   120k|    }
  162|   120k|  }
_ZNK6google8protobuf8internal16InternalMetadata8PtrValueINS0_5ArenaEEEPT_v:
  148|   425M|  U* PtrValue() const {
  149|   425M|    if constexpr (std::is_same_v<U, Arena>) {
  150|       |      // No mask to remove.
  151|   425M|      ABSL_DCHECK_EQ(ptr_ & kPtrTagMask, 0);
  ------------------
  |  |   74|   425M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|   425M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   425M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 425M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   425M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|   425M|      return reinterpret_cast<U*>(ptr_);
  153|       |    } else {
  154|       |      static_assert(kPtrTagMask == 1);
  155|       |      ABSL_DCHECK_EQ(ptr_ & kPtrTagMask, kPtrTagMask);
  156|       |      // We can remove the mask via -1, which is smaller asm and can be merged
  157|       |      // with other arithmetic operations.
  158|       |      // Eg PtrValue<Container>()->unknown_fields can merge the offset into the
  159|       |      // mask removal.
  160|       |      return reinterpret_cast<U*>(ptr_ - kPtrTagMask);
  161|       |    }
  162|   425M|  }
_ZN6google8protobuf8internal16InternalMetadataC2EPNS0_5ArenaE:
   48|  92.8M|  explicit InternalMetadata(Arena* arena) {
   49|  92.8M|    ptr_ = reinterpret_cast<intptr_t>(arena);
   50|  92.8M|  }
_ZN6google8protobuf8internal16InternalMetadata22mutable_unknown_fieldsINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEPT_v:
   94|  3.16M|  PROTOBUF_NDEBUG_INLINE T* mutable_unknown_fields() {
   95|  3.16M|    if (ABSL_PREDICT_TRUE(have_unknown_fields())) {
  ------------------
  |  |  191|  3.16M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 3.14M, False: 23.2k]
  |  |  |  Branch (191:48): [Folded, False: 3.16M]
  |  |  |  Branch (191:57): [True: 3.14M, False: 23.2k]
  |  |  ------------------
  ------------------
   96|  3.14M|      return &PtrValue<Container<T>>()->unknown_fields;
   97|  3.14M|    } else {
   98|  23.2k|      return mutable_unknown_fields_slow<T>();
   99|  23.2k|    }
  100|  3.16M|  }
_ZNK6google8protobuf8internal16InternalMetadata8PtrValueINS2_9ContainerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPT_v:
  148|  3.20M|  U* PtrValue() const {
  149|       |    if constexpr (std::is_same_v<U, Arena>) {
  150|       |      // No mask to remove.
  151|       |      ABSL_DCHECK_EQ(ptr_ & kPtrTagMask, 0);
  152|       |      return reinterpret_cast<U*>(ptr_);
  153|  3.20M|    } else {
  154|  3.20M|      static_assert(kPtrTagMask == 1);
  155|  3.20M|      ABSL_DCHECK_EQ(ptr_ & kPtrTagMask, kPtrTagMask);
  ------------------
  |  |   74|  3.20M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  3.20M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  3.20M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 3.20M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  3.20M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  156|       |      // We can remove the mask via -1, which is smaller asm and can be merged
  157|       |      // with other arithmetic operations.
  158|       |      // Eg PtrValue<Container>()->unknown_fields can merge the offset into the
  159|       |      // mask removal.
  160|  3.20M|      return reinterpret_cast<U*>(ptr_ - kPtrTagMask);
  161|  3.20M|    }
  162|  3.20M|  }
_ZN6google8protobuf8internal16InternalMetadata27mutable_unknown_fields_slowINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEPT_v:
  183|  23.2k|  PROTOBUF_NOINLINE T* mutable_unknown_fields_slow() {
  184|  23.2k|    Arena* my_arena = arena();
  185|  23.2k|    Container<T>* container = Arena::Create<Container<T>>(my_arena);
  186|       |    // Two-step assignment works around a bug in clang's static analyzer:
  187|       |    // https://bugs.llvm.org/show_bug.cgi?id=34198.
  188|  23.2k|    ptr_ = reinterpret_cast<intptr_t>(container);
  189|  23.2k|    ptr_ |= kUnknownFieldsTagMask;
  190|  23.2k|    container->arena = my_arena;
  191|  23.2k|    return &(container->unknown_fields);
  192|  23.2k|  }
_ZNK6google8protobuf8internal16InternalMetadata14unknown_fieldsINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEERKT_PFSD_vE:
   85|  38.9k|      const T& (*default_instance)()) const {
   86|  38.9k|    if (ABSL_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  190|  38.9k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 38.9k, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 38.9k]
  |  |  |  Branch (190:58): [True: 38.9k, False: 0]
  |  |  ------------------
  ------------------
   87|  38.9k|      return PtrValue<Container<T>>()->unknown_fields;
   88|  38.9k|    } else {
   89|      0|      return default_instance();
   90|      0|    }
   91|  38.9k|  }
_ZN6google8protobuf8internal16InternalMetadata6DeleteINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEvv:
   60|  2.34M|  void Delete() {
   61|       |    // Note that Delete<> should be called not more than once.
   62|  2.34M|    if (have_unknown_fields()) {
  ------------------
  |  Branch (62:9): [True: 23.2k, False: 2.32M]
  ------------------
   63|  23.2k|      DeleteOutOfLineHelper<T>();
   64|  23.2k|    }
   65|  2.34M|  }
_ZN6google8protobuf8internal16InternalMetadata21DeleteOutOfLineHelperINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEvv:
  175|  23.2k|  PROTOBUF_NOINLINE void DeleteOutOfLineHelper() {
  176|  23.2k|    delete PtrValue<Container<T>>();
  177|       |    // TODO:  This store is load-bearing.  Since we are destructing
  178|       |    // the message at this point, see if we can eliminate it.
  179|  23.2k|    ptr_ = 0;
  180|  23.2k|  }
_ZN6google8protobuf8internal16InternalMetadata5ClearINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEvv:
  128|  32.8k|  PROTOBUF_NDEBUG_INLINE void Clear() {
  129|  32.8k|    if (ABSL_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  190|  32.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 32.8k]
  |  |  |  Branch (190:49): [Folded, False: 32.8k]
  |  |  |  Branch (190:58): [True: 0, False: 32.8k]
  |  |  ------------------
  ------------------
  130|      0|      DoClear<T>();
  131|      0|    }
  132|  32.8k|  }

_ZN6google8protobuf8internal18EpsCopyInputStream28IsRequestedLessThanOrEqualToEii:
   90|  1.04M|                                                      int available) {
   91|  1.04M|  return static_cast<int64_t>(static_cast<uint32_t>(requested)) <=
   92|  1.04M|         static_cast<int64_t>(available);
   93|  1.04M|}
_ZN6google8protobuf8internal18EpsCopyInputStream14CanReadFromPtrEiPKc:
   95|  1.04M|bool EpsCopyInputStream::CanReadFromPtr(int requested, const char* ptr) {
   96|  1.04M|  return IsRequestedLessThanOrEqualTo(requested, BytesAvailable(ptr));
   97|  1.04M|}
_ZN6google8protobuf8internal18EpsCopyInputStream18HasEnoughTillLimitEiPKc:
   99|    301|bool EpsCopyInputStream::HasEnoughTillLimit(int requested, const char* ptr) {
  100|    301|  return IsRequestedLessThanOrEqualTo(requested, BytesUntilLimit(ptr));
  101|    301|}
_ZN6google8protobuf8internal18EpsCopyInputStream10NextBufferEii:
  114|  10.9k|const char* EpsCopyInputStream::NextBuffer(int overrun, int depth) {
  115|  10.9k|  if (next_chunk_ == nullptr) return nullptr;  // We've reached end of stream.
  ------------------
  |  Branch (115:7): [True: 2.43k, False: 8.56k]
  ------------------
  116|  8.56k|  if (next_chunk_ != patch_buffer_) {
  ------------------
  |  Branch (116:7): [True: 0, False: 8.56k]
  ------------------
  117|      0|    ABSL_DCHECK(size_ > kSlopBytes);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|       |    // The chunk is large enough to be used directly
  119|      0|    buffer_end_ = next_chunk_ + size_ - kSlopBytes;
  120|      0|    auto res = next_chunk_;
  121|      0|    next_chunk_ = patch_buffer_;
  122|      0|    if (aliasing_ == kOnPatch) aliasing_ = kNoDelta;
  ------------------
  |  Branch (122:9): [True: 0, False: 0]
  ------------------
  123|      0|    return res;
  124|      0|  }
  125|       |  // Move the slop bytes of previous buffer to start of the patch buffer.
  126|       |  // Note we must use memmove because the previous buffer could be part of
  127|       |  // patch_buffer_.
  128|  8.56k|  std::memmove(patch_buffer_, buffer_end_, kSlopBytes);
  129|  8.56k|  if (overall_limit_ > 0 &&
  ------------------
  |  Branch (129:7): [True: 0, False: 8.56k]
  ------------------
  130|      0|      (depth < 0 || !ParseEndsInSlopRegion(patch_buffer_, overrun, depth))) {
  ------------------
  |  Branch (130:8): [True: 0, False: 0]
  |  Branch (130:21): [True: 0, False: 0]
  ------------------
  131|      0|    const void* data;
  132|       |    // ZeroCopyInputStream indicates Next may return 0 size buffers. Hence
  133|       |    // we loop.
  134|      0|    while (StreamNext(&data)) {
  ------------------
  |  Branch (134:12): [True: 0, False: 0]
  ------------------
  135|      0|      if (size_ > kSlopBytes) {
  ------------------
  |  Branch (135:11): [True: 0, False: 0]
  ------------------
  136|       |        // We got a large chunk
  137|      0|        std::memcpy(patch_buffer_ + kSlopBytes, data, kSlopBytes);
  138|      0|        next_chunk_ = static_cast<const char*>(data);
  139|      0|        buffer_end_ = patch_buffer_ + kSlopBytes;
  140|      0|        if (aliasing_ >= kNoDelta) aliasing_ = kOnPatch;
  ------------------
  |  Branch (140:13): [True: 0, False: 0]
  ------------------
  141|      0|        return patch_buffer_;
  142|      0|      } else if (size_ > 0) {
  ------------------
  |  Branch (142:18): [True: 0, False: 0]
  ------------------
  143|      0|        std::memcpy(patch_buffer_ + kSlopBytes, data, size_);
  144|      0|        next_chunk_ = patch_buffer_;
  145|      0|        buffer_end_ = patch_buffer_ + size_;
  146|      0|        if (aliasing_ >= kNoDelta) aliasing_ = kOnPatch;
  ------------------
  |  Branch (146:13): [True: 0, False: 0]
  ------------------
  147|      0|        return patch_buffer_;
  148|      0|      }
  149|      0|      ABSL_DCHECK(size_ == 0) << size_;
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|      0|    }
  151|      0|    overall_limit_ = 0;  // Next failed, no more needs for next
  152|      0|  }
  153|       |  // End of stream or array
  154|  8.56k|  if (aliasing_ == kNoDelta) {
  ------------------
  |  Branch (154:7): [True: 0, False: 8.56k]
  ------------------
  155|       |    // If there is no more block and aliasing is true, the previous block
  156|       |    // is still valid and we can alias. We have users relying on string_view's
  157|       |    // obtained from protos to outlive the proto, when the parse was from an
  158|       |    // array. This guarantees string_view's are always aliased if parsed from
  159|       |    // an array.
  160|      0|    aliasing_ = reinterpret_cast<std::uintptr_t>(buffer_end_) -
  161|      0|                reinterpret_cast<std::uintptr_t>(patch_buffer_);
  162|      0|  }
  163|  8.56k|  next_chunk_ = nullptr;
  164|  8.56k|  buffer_end_ = patch_buffer_ + kSlopBytes;
  165|  8.56k|  size_ = 0;
  166|  8.56k|  return patch_buffer_;
  167|  8.56k|}
_ZN6google8protobuf8internal18EpsCopyInputStream4NextEv:
  169|     87|const char* EpsCopyInputStream::Next() {
  170|     87|  ABSL_DCHECK(limit_ > kSlopBytes);
  ------------------
  |  |   47|     87|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|     87|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    174|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|     87|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    174|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    174|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 87, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     87|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 87]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     87|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 87, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|    174|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|    174|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|     87|  auto p = NextBuffer(0 /* immaterial */, -1);
  172|     87|  if (p == nullptr) {
  ------------------
  |  Branch (172:7): [True: 0, False: 87]
  ------------------
  173|      0|    limit_end_ = buffer_end_;
  174|       |    // Distinguish ending on a pushed limit or ending on end-of-stream.
  175|      0|    SetEndOfStream();
  176|      0|    return nullptr;
  177|      0|  }
  178|     87|  limit_ -= buffer_end_ - p;  // Adjust limit_ relative to new anchor
  179|     87|  limit_end_ = buffer_end_ + std::min(0, limit_);
  180|     87|  return p;
  181|     87|}
_ZN6google8protobuf8internal18EpsCopyInputStream12DoneFallbackEii:
  184|  11.3k|                                                              int depth) {
  185|       |  // Did we exceeded the limit (parse error).
  186|  11.3k|  if (ABSL_PREDICT_FALSE(overrun > limit_)) return {nullptr, true};
  ------------------
  |  |  190|  11.3k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 495, False: 10.9k]
  |  |  |  Branch (190:49): [Folded, False: 11.3k]
  |  |  |  Branch (190:58): [True: 495, False: 10.9k]
  |  |  ------------------
  ------------------
  187|  10.9k|  ABSL_DCHECK(overrun != limit_);  // Guaranteed by caller.
  ------------------
  |  |   47|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  11.3k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  32.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  10.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  21.8k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  21.8k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 10.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  10.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 10.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  10.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 10.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  32.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  32.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|  10.9k|  ABSL_DCHECK(overrun < limit_);   // Follows from above
  ------------------
  |  |   47|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  10.9k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  32.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  10.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  21.8k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  21.8k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 10.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  10.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 10.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  10.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 10.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  32.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  32.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |  // TODO Instead of this dcheck we could just assign, and remove
  190|       |  // updating the limit_end from PopLimit, ie.
  191|       |  // limit_end_ = buffer_end_ + (std::min)(0, limit_);
  192|       |  // if (ptr < limit_end_) return {ptr, false};
  193|  10.9k|  ABSL_DCHECK(limit_end_ == buffer_end_ + (std::min)(0, limit_));
  ------------------
  |  |   47|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  10.9k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  32.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  10.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  21.8k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  21.8k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 10.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  10.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 10.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  10.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 10.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  32.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  32.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|       |  // At this point we know the following assertion holds.
  195|  10.9k|  ABSL_DCHECK_GT(limit_, 0);
  ------------------
  |  |   84|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   97|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  10.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 10.9k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  10.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  196|  10.9k|  ABSL_DCHECK(limit_end_ == buffer_end_);  // because limit_ > 0
  ------------------
  |  |   47|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  10.9k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  21.8k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  10.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  21.8k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  21.8k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 10.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  10.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 10.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  10.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 10.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  21.8k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  21.8k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|  10.9k|  const char* p;
  198|  10.9k|  do {
  199|       |    // We are past the end of buffer_end_, in the slop region.
  200|  10.9k|    ABSL_DCHECK_GE(overrun, 0);
  ------------------
  |  |   82|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  10.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  10.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 10.9k]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  10.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|  10.9k|    p = NextBuffer(overrun, depth);
  202|  10.9k|    if (p == nullptr) {
  ------------------
  |  Branch (202:9): [True: 2.43k, False: 8.47k]
  ------------------
  203|       |      // We are at the end of the stream
  204|  2.43k|      if (ABSL_PREDICT_FALSE(overrun != 0)) return {nullptr, true};
  ------------------
  |  |  190|  2.43k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.83k, False: 597]
  |  |  |  Branch (190:49): [Folded, False: 2.43k]
  |  |  |  Branch (190:58): [True: 1.83k, False: 597]
  |  |  ------------------
  ------------------
  205|    597|      ABSL_DCHECK_GT(limit_, 0);
  ------------------
  |  |   84|    597|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   97|    597|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    597|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 597]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    597|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|    597|      limit_end_ = buffer_end_;
  207|       |      // Distinguish ending on a pushed limit or ending on end-of-stream.
  208|    597|      SetEndOfStream();
  209|    597|      return {buffer_end_, true};
  210|  2.43k|    }
  211|  8.47k|    limit_ -= buffer_end_ - p;  // Adjust limit_ relative to new anchor
  212|  8.47k|    p += overrun;
  213|  8.47k|    overrun = p - buffer_end_;
  214|  8.47k|  } while (overrun >= 0);
  ------------------
  |  Branch (214:12): [True: 10, False: 8.46k]
  ------------------
  215|  8.46k|  limit_end_ = buffer_end_ + std::min(0, limit_);
  216|  8.46k|  return {p, false};
  217|  10.9k|}
_ZN6google8protobuf8internal18EpsCopyInputStream18ReadStringFallbackEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  224|    301|                                                   std::string* str) {
  225|    301|  str->clear();
  226|    301|  if (ABSL_PREDICT_TRUE(HasEnoughTillLimit(size, ptr))) {
  ------------------
  |  |  191|    301|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 96, False: 205]
  |  |  |  Branch (191:48): [Folded, False: 301]
  |  |  |  Branch (191:57): [True: 96, False: 205]
  |  |  ------------------
  ------------------
  227|       |    // Reserve the string up to a static safe size. If strings are bigger than
  228|       |    // this we proceed by growing the string as needed. This protects against
  229|       |    // malicious payloads making protobuf hold on to a lot of memory.
  230|     96|    str->reserve(str->size() + std::min<int>(size, kSafeStringSize));
  231|     96|  }
  232|    301|  return AppendSize(ptr, size,
  233|    301|                    [str](const char* p, int s) { str->append(p, s); });
  234|    301|}
_ZN6google8protobuf8internal18EpsCopyInputStream20AppendStringFallbackEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  372|    244|                                                     std::string* str) {
  373|    244|  if (ABSL_PREDICT_TRUE(
  ------------------
  |  |  191|    244|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 91, False: 153]
  |  |  |  Branch (191:48): [Folded, False: 244]
  |  |  |  Branch (191:57): [True: 91, False: 153]
  |  |  ------------------
  ------------------
  374|    244|          IsRequestedLessThanOrEqualTo(size, BytesUntilLimit(ptr)))) {
  375|       |    // Reserve the string up to a static safe size. If strings are bigger than
  376|       |    // this we proceed by growing the string as needed. This protects against
  377|       |    // malicious payloads making protobuf hold on to a lot of memory.
  378|     91|    str->reserve(str->size() + std::min<int>(size, kSafeStringSize));
  379|     91|  }
  380|    244|  return AppendSize(ptr, size,
  381|    244|                    [str](const char* p, int s) { str->append(p, s); });
  382|    244|}
_ZN6google8protobuf8internal11WriteVarintEjmPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  494|  17.8k|void WriteVarint(uint32_t num, uint64_t val, std::string* s) {
  495|  17.8k|  WriteVarint(num << 3, s);
  496|  17.8k|  WriteVarint(val, s);
  497|  17.8k|}
_ZN6google8protobuf8internal17VarintParseSlow64EPKcj:
  525|  95.8k|                                                   uint32_t res32) {
  526|  95.8k|  uint64_t res = res32;
  527|   280k|  for (std::uint32_t i = 1; i < 10; i++) {
  ------------------
  |  Branch (527:29): [True: 280k, False: 1]
  ------------------
  528|   280k|    uint64_t byte = static_cast<uint8_t>(p[i]);
  529|   280k|    res += (byte - 1) << (7 * i);
  530|   280k|    if (ABSL_PREDICT_TRUE(byte < 128)) {
  ------------------
  |  |  191|   280k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 95.8k, False: 184k]
  |  |  |  Branch (191:48): [Folded, False: 280k]
  |  |  |  Branch (191:57): [True: 95.8k, False: 184k]
  |  |  ------------------
  ------------------
  531|  95.8k|      return {p + i + 1, res};
  532|  95.8k|    }
  533|   280k|  }
  534|      1|  return {nullptr, 0};
  535|  95.8k|}
_ZN6google8protobuf8internal15ReadTagFallbackEPKcj:
  537|  12.4k|std::pair<const char*, uint32_t> ReadTagFallback(const char* p, uint32_t res) {
  538|  29.6k|  for (std::uint32_t i = 2; i < 5; i++) {
  ------------------
  |  Branch (538:29): [True: 29.6k, False: 8]
  ------------------
  539|  29.6k|    uint32_t byte = static_cast<uint8_t>(p[i]);
  540|  29.6k|    res += (byte - 1) << (7 * i);
  541|  29.6k|    if (ABSL_PREDICT_TRUE(byte < 128)) {
  ------------------
  |  |  191|  29.6k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 12.4k, False: 17.1k]
  |  |  |  Branch (191:48): [Folded, False: 29.6k]
  |  |  |  Branch (191:57): [True: 12.4k, False: 17.1k]
  |  |  ------------------
  ------------------
  542|  12.4k|      return {p + i + 1, res};
  543|  12.4k|    }
  544|  29.6k|  }
  545|      8|  return {nullptr, 0};
  546|  12.4k|}
_ZN6google8protobuf8internal16ReadSizeFallbackEPKcj:
  548|  17.4k|std::pair<const char*, int32_t> ReadSizeFallback(const char* p, uint32_t res) {
  549|  28.5k|  for (std::uint32_t i = 1; i < 4; i++) {
  ------------------
  |  Branch (549:29): [True: 27.1k, False: 1.40k]
  ------------------
  550|  27.1k|    uint32_t byte = static_cast<uint8_t>(p[i]);
  551|  27.1k|    res += (byte - 1) << (7 * i);
  552|  27.1k|    if (ABSL_PREDICT_TRUE(byte < 128)) {
  ------------------
  |  |  191|  27.1k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 16.0k, False: 11.1k]
  |  |  |  Branch (191:48): [Folded, False: 27.1k]
  |  |  |  Branch (191:57): [True: 16.0k, False: 11.1k]
  |  |  ------------------
  ------------------
  553|  16.0k|      return {p + i + 1, res};
  554|  16.0k|    }
  555|  27.1k|  }
  556|  1.40k|  std::uint32_t byte = static_cast<uint8_t>(p[4]);
  557|  1.40k|  if (ABSL_PREDICT_FALSE(byte >= 8)) return {nullptr, 0};  // size >= 2gb
  ------------------
  |  |  190|  1.40k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 33, False: 1.37k]
  |  |  |  Branch (190:49): [Folded, False: 1.40k]
  |  |  |  Branch (190:58): [True: 33, False: 1.37k]
  |  |  ------------------
  ------------------
  558|  1.37k|  res += (byte - 1) << 28;
  559|       |  // Protect against sign integer overflow in PushLimit. Limits are relative
  560|       |  // to buffer ends and ptr could potential be kSlopBytes beyond a buffer end.
  561|       |  // To protect against overflow we reject limits absurdly close to INT_MAX.
  562|  1.37k|  if (ABSL_PREDICT_FALSE(res > INT_MAX - ParseContext::kSlopBytes)) {
  ------------------
  |  |  190|  1.37k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 4, False: 1.36k]
  |  |  |  Branch (190:49): [Folded, False: 1.37k]
  |  |  |  Branch (190:58): [True: 4, False: 1.36k]
  |  |  ------------------
  ------------------
  563|      4|    return {nullptr, 0};
  564|      4|  }
  565|  1.36k|  return {p + 5, res};
  566|  1.37k|}
_ZN6google8protobuf8internal24InlineGreedyStringParserEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKcPNS1_12ParseContextE:
  589|   799k|                                     ParseContext* ctx) {
  590|   799k|  int size = ReadSize(&ptr);
  591|   799k|  if (!ptr) return nullptr;
  ------------------
  |  Branch (591:7): [True: 8, False: 799k]
  ------------------
  592|   799k|  return ctx->ReadString(ptr, size, s);
  593|   799k|}
_ZN6google8protobuf8internal17UnknownFieldParseEjPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKcPNS1_12ParseContextE:
  788|  3.14M|                              const char* ptr, ParseContext* ctx) {
  789|  3.14M|  UnknownFieldLiteParserHelper field_parser(unknown);
  790|  3.14M|  return FieldParser(tag, field_parser, ptr, ctx);
  791|  3.14M|}
_ZN6google8protobuf8internal11WriteVarintEmPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  485|  7.51M|inline void WriteVarint(uint64_t val, std::string* s) {
  486|  8.11M|  while (val >= 128) {
  ------------------
  |  Branch (486:10): [True: 599k, False: 7.51M]
  ------------------
  487|   599k|    uint8_t c = val | 0x80;
  488|   599k|    s->push_back(c);
  489|   599k|    val >>= 7;
  490|   599k|  }
  491|  7.51M|  s->push_back(val);
  492|  7.51M|}
_ZN6google8protobuf8internal28UnknownFieldLiteParserHelperC2EPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  733|  3.14M|      : unknown_(unknown) {}
parse_context.cc:_ZZN6google8protobuf8internal18EpsCopyInputStream18ReadStringFallbackEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEENK3$_0clES4_i:
  233|     72|                    [str](const char* p, int s) { str->append(p, s); });
parse_context.cc:_ZZN6google8protobuf8internal18EpsCopyInputStream20AppendStringFallbackEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEENK3$_0clES4_i:
  381|     75|                    [str](const char* p, int s) { str->append(p, s); });
_ZN6google8protobuf8internal28UnknownFieldLiteParserHelper9AddVarintEjm:
  735|  3.61M|  void AddVarint(uint32_t num, uint64_t value) {
  736|  3.61M|    if (unknown_ == nullptr) return;
  ------------------
  |  Branch (736:9): [True: 0, False: 3.61M]
  ------------------
  737|  3.61M|    WriteVarint(num * 8, unknown_);
  738|  3.61M|    WriteVarint(value, unknown_);
  739|  3.61M|  }
_ZN6google8protobuf8internal28UnknownFieldLiteParserHelper10AddFixed64Ejm:
  740|   192k|  void AddFixed64(uint32_t num, uint64_t value) {
  741|   192k|    if (unknown_ == nullptr) return;
  ------------------
  |  Branch (741:9): [True: 0, False: 192k]
  ------------------
  742|   192k|    WriteVarint(num * 8 + 1, unknown_);
  743|   192k|    char buffer[8];
  744|       |    // TODO: Remove this suppression.
  745|   192k|    (void)io::CodedOutputStream::WriteLittleEndian64ToArray(
  746|   192k|        value, reinterpret_cast<uint8_t*>(buffer));
  747|   192k|    unknown_->append(buffer, 8);
  748|   192k|  }
_ZN6google8protobuf8internal28UnknownFieldLiteParserHelper20ParseLengthDelimitedEjPKcPNS1_12ParseContextE:
  750|  17.3k|                                   ParseContext* ctx) {
  751|  17.3k|    int size = ReadSize(&ptr);
  752|  17.3k|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1506|  17.3k|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|  17.3k|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 12, False: 17.3k]
  |  |  |  |  ------------------
  |  |  |  | 1500|     12|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|     12|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|     12|    return ret;                                        \
  |  |  |  | 1503|     12|  }
  |  |  ------------------
  ------------------
  753|  17.3k|    if (unknown_ == nullptr) return ctx->Skip(ptr, size);
  ------------------
  |  Branch (753:9): [True: 0, False: 17.3k]
  ------------------
  754|  17.3k|    WriteVarint(num * 8 + 2, unknown_);
  755|  17.3k|    WriteVarint(size, unknown_);
  756|  17.3k|    return ctx->AppendString(ptr, size, unknown_);
  757|  17.3k|  }
_ZN6google8protobuf8internal28UnknownFieldLiteParserHelper10ParseGroupEjPKcPNS1_12ParseContextE:
  758|  2.47k|  const char* ParseGroup(uint32_t num, const char* ptr, ParseContext* ctx) {
  759|  2.47k|    if (unknown_) WriteVarint(num * 8 + 3, unknown_);
  ------------------
  |  Branch (759:9): [True: 2.47k, False: 0]
  ------------------
  760|  2.47k|    ptr = ctx->ParseGroupInlined(ptr, num * 8 + 3, [&](const char* ptr) {
  761|  2.47k|      return WireFormatParser(*this, ptr, ctx);
  762|  2.47k|    });
  763|  2.47k|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1506|  2.47k|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|  2.47k|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 2.12k, False: 348]
  |  |  |  |  ------------------
  |  |  |  | 1500|  2.12k|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|  2.12k|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|  2.12k|    return ret;                                        \
  |  |  |  | 1503|  2.12k|  }
  |  |  ------------------
  ------------------
  764|    348|    if (unknown_) WriteVarint(num * 8 + 4, unknown_);
  ------------------
  |  Branch (764:9): [True: 348, False: 0]
  ------------------
  765|    348|    return ptr;
  766|  2.47k|  }
_ZZN6google8protobuf8internal28UnknownFieldLiteParserHelper10ParseGroupEjPKcPNS1_12ParseContextEENKUlS4_E_clES4_:
  760|  2.47k|    ptr = ctx->ParseGroupInlined(ptr, num * 8 + 3, [&](const char* ptr) {
  761|  2.47k|      return WireFormatParser(*this, ptr, ctx);
  762|  2.47k|    });
_ZN6google8protobuf8internal28UnknownFieldLiteParserHelper10AddFixed32Ejj:
  767|  28.0k|  void AddFixed32(uint32_t num, uint32_t value) {
  768|  28.0k|    if (unknown_ == nullptr) return;
  ------------------
  |  Branch (768:9): [True: 0, False: 28.0k]
  ------------------
  769|  28.0k|    WriteVarint(num * 8 + 5, unknown_);
  770|  28.0k|    char buffer[4];
  771|       |    // TODO: Remove this suppression.
  772|  28.0k|    (void)io::CodedOutputStream::WriteLittleEndian32ToArray(
  773|  28.0k|        value, reinterpret_cast<uint8_t*>(buffer));
  774|  28.0k|    unknown_->append(buffer, 4);
  775|  28.0k|  }

_ZN6google8protobuf8internal18EpsCopyInputStreamC2Eb:
  121|  12.3k|      : aliasing_(enable_aliasing ? kOnPatch : kNoAliasing) {}
  ------------------
  |  Branch (121:19): [True: 0, False: 12.3k]
  ------------------
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2Ev:
  140|  2.34M|    LimitToken() { internal::PoisonMemoryRegion(&token_, sizeof(token_)); }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2Ei:
  142|  2.34M|    explicit LimitToken(int token) : token_(token) {
  143|  2.34M|      internal::UnpoisonMemoryRegion(&token_, sizeof(token_));
  144|  2.34M|    }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2EOS3_:
  149|  2.34M|    LimitToken(LimitToken&& other) { *this = std::move(other); }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenaSEOS3_:
  151|  4.69M|    LimitToken& operator=(LimitToken&& other) {
  152|  4.69M|      internal::UnpoisonMemoryRegion(&token_, sizeof(token_));
  153|  4.69M|      token_ = other.token_;
  154|  4.69M|      internal::PoisonMemoryRegion(&other.token_, sizeof(token_));
  155|  4.69M|      return *this;
  156|  4.69M|    }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenD2Ev:
  158|  7.03M|    ~LimitToken() { internal::UnpoisonMemoryRegion(&token_, sizeof(token_)); }
_ZNO6google8protobuf8internal18EpsCopyInputStream10LimitToken5tokenEv:
  160|  2.34M|    int token() && {
  161|  2.34M|      int t = token_;
  162|  2.34M|      internal::PoisonMemoryRegion(&token_, sizeof(token_));
  163|  2.34M|      return t;
  164|  2.34M|    }
_ZN6google8protobuf8internal18EpsCopyInputStream9PushLimitEPKci:
  171|  2.34M|  [[nodiscard]] LimitToken PushLimit(const char* ptr, int limit) {
  172|  2.34M|    ABSL_DCHECK(limit >= 0 && limit <= INT_MAX - kSlopBytes);
  ------------------
  |  |   47|  2.34M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  2.34M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.69M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  2.34M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  4.69M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  4.69M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.34M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.34M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.34M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.34M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.34M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  4.69M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  4.69M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|       |    // This add is safe due to the invariant above, because
  174|       |    // ptr - buffer_end_ <= kSlopBytes.
  175|  2.34M|    limit += static_cast<int>(ptr - buffer_end_);
  176|  2.34M|    if (ABSL_PREDICT_TRUE(limit <= 0)) {
  ------------------
  |  |  191|  2.34M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 2.33M, False: 9.90k]
  |  |  |  Branch (191:48): [Folded, False: 2.34M]
  |  |  |  Branch (191:57): [True: 2.33M, False: 9.90k]
  |  |  ------------------
  ------------------
  177|  2.33M|      limit_end_ = buffer_end_ + limit;
  178|  2.33M|    } else {
  179|  9.90k|      limit_end_ = buffer_end_;
  180|  9.90k|    }
  181|  2.34M|    auto old_limit = limit_;
  182|  2.34M|    limit_ = limit;
  183|  2.34M|    return LimitToken(old_limit - limit);
  184|  2.34M|  }
_ZN6google8protobuf8internal18EpsCopyInputStream8PopLimitENS2_10LimitTokenE:
  186|  2.34M|  [[nodiscard]] bool PopLimit(LimitToken delta) {
  187|       |    // We must update the limit first before the early return. Otherwise, we can
  188|       |    // end up with an invalid limit and it can lead to integer overflows.
  189|  2.34M|    int old_limit = limit_ + std::move(delta).token();
  190|  2.34M|    limit_ = old_limit;
  191|  2.34M|    if (ABSL_PREDICT_FALSE(!EndedAtLimit())) return false;
  ------------------
  |  |  190|  2.34M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 910, False: 2.34M]
  |  |  |  Branch (190:49): [Folded, False: 2.34M]
  |  |  |  Branch (190:58): [True: 910, False: 2.34M]
  |  |  ------------------
  ------------------
  192|       |    // TODO We could remove this line and hoist the code to
  193|       |    // DoneFallback. Study the perf/bin-size effects.
  194|  2.34M|    if (ABSL_PREDICT_TRUE(old_limit <= 0)) {
  ------------------
  |  |  191|  2.34M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 16.5k, False: 2.32M]
  |  |  |  Branch (191:48): [Folded, False: 2.34M]
  |  |  |  Branch (191:57): [True: 16.5k, False: 2.32M]
  |  |  ------------------
  ------------------
  195|  16.5k|      limit_end_ = buffer_end_ + old_limit;
  196|  2.32M|    } else {
  197|  2.32M|      limit_end_ = buffer_end_;
  198|  2.32M|    }
  199|  2.34M|    return true;
  200|  2.34M|  }
_ZN6google8protobuf8internal18EpsCopyInputStream10ReadStringEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  209|  1.02M|                                       std::string* s) {
  210|  1.02M|    if (CanReadFromPtr(size, ptr)) {
  ------------------
  |  Branch (210:9): [True: 1.02M, False: 301]
  ------------------
  211|       |      // Fundamentally we just want to do assign to the string.
  212|       |      // However micro-benchmarks regress on string reading cases. So we copy
  213|       |      // the same logic from the old CodedInputStream ReadString. Note: as of
  214|       |      // Apr 2021, this is still a significant win over `assign()`.
  215|  1.02M|      absl::strings_internal::STLStringResizeUninitialized(s, size);
  216|  1.02M|      char* z = &(*s)[0];
  217|  1.02M|      memcpy(z, ptr, size);
  218|  1.02M|      return ptr + size;
  219|  1.02M|    }
  220|    301|    return ReadStringFallback(ptr, size, s);
  221|  1.02M|  }
_ZN6google8protobuf8internal18EpsCopyInputStream12AppendStringEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  223|  17.3k|                                         std::string* s) {
  224|  17.3k|    if (CanReadFromPtr(size, ptr)) {
  ------------------
  |  Branch (224:9): [True: 17.1k, False: 244]
  ------------------
  225|  17.1k|      s->append(ptr, size);
  226|  17.1k|      return ptr + size;
  227|  17.1k|    }
  228|    244|    return AppendStringFallback(ptr, size, s);
  229|  17.3k|  }
_ZNK6google8protobuf8internal18EpsCopyInputStream7LastTagEv:
  302|  3.32M|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD uint32_t LastTag() const {
  303|  3.32M|    return last_tag_minus_1_ + 1;
  304|  3.32M|  }
_ZN6google8protobuf8internal18EpsCopyInputStream15ConsumeEndGroupEj:
  305|  2.47k|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool ConsumeEndGroup(uint32_t start_tag) {
  306|  2.47k|    bool res = last_tag_minus_1_ == start_tag;
  307|  2.47k|    last_tag_minus_1_ = 0;
  308|  2.47k|    return res;
  309|  2.47k|  }
_ZNK6google8protobuf8internal18EpsCopyInputStream12EndedAtLimitEv:
  310|  2.35M|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool EndedAtLimit() const {
  311|  2.35M|    return last_tag_minus_1_ == 0;
  312|  2.35M|  }
_ZN6google8protobuf8internal18EpsCopyInputStream10SetLastTagEj:
  316|    868|  void SetLastTag(uint32_t tag) { last_tag_minus_1_ = tag - 1; }
_ZN6google8protobuf8internal18EpsCopyInputStream14SetEndOfStreamEv:
  317|    597|  void SetEndOfStream() { last_tag_minus_1_ = 1; }
_ZNK6google8protobuf8internal18EpsCopyInputStream15BytesUntilLimitEPKc:
  326|    545|      const char* ptr) const {
  327|    545|    return limit_ + static_cast<int>(buffer_end_ - ptr);
  328|    545|  }
_ZN6google8protobuf8internal18EpsCopyInputStream13DataAvailableEPKc:
  336|  3.68M|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool DataAvailable(const char* ptr) {
  337|  3.68M|    return ptr < limit_end_;
  338|  3.68M|  }
_ZNK6google8protobuf8internal18EpsCopyInputStream14BytesAvailableEPKc:
  341|  1.04M|      const char* ptr) const {
  342|  1.04M|    ABSL_DCHECK_NE(ptr, nullptr);
  ------------------
  |  |   76|  1.04M|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   89|  1.04M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  1.04M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 1.04M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  1.04M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|  1.04M|    ptrdiff_t available = buffer_end_ + kSlopBytes - ptr;
  344|  1.04M|    ABSL_DCHECK_GE(available, 0);
  ------------------
  |  |   82|  1.04M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  1.04M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  1.04M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 1.04M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  1.04M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|  1.04M|    ABSL_DCHECK_LE(available, INT_MAX);
  ------------------
  |  |   78|  1.04M|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  1.04M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  1.04M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 1.04M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  1.04M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|  1.04M|    return static_cast<int>(available);
  347|  1.04M|  }
_ZN6google8protobuf8internal18EpsCopyInputStream18WireFormatNoOpSink5FlushEPKc:
  455|  2.36M|    void Flush(const char* p) {}
_ZN6google8protobuf8internal18EpsCopyInputStream18WireFormatNoOpSink5ResetEPKc:
  457|  2.36M|    void Reset(const char* p) {}
_ZN6google8protobuf8internal18EpsCopyInputStream8InitFromENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  489|  12.3k|  const char* InitFrom(absl::string_view flat) {
  490|  12.3k|    overall_limit_ = 0;
  491|  12.3k|    if (flat.size() > kSlopBytes) {
  ------------------
  |  Branch (491:9): [True: 8.95k, False: 3.43k]
  ------------------
  492|  8.95k|      limit_ = kSlopBytes;
  493|  8.95k|      limit_end_ = buffer_end_ = flat.data() + flat.size() - kSlopBytes;
  494|  8.95k|      next_chunk_ = patch_buffer_;
  495|  8.95k|      if (aliasing_ == kOnPatch) aliasing_ = kNoDelta;
  ------------------
  |  Branch (495:11): [True: 0, False: 8.95k]
  ------------------
  496|  8.95k|      return flat.data();
  497|  8.95k|    } else {
  498|  3.43k|      if (!flat.empty()) {
  ------------------
  |  Branch (498:11): [True: 3.42k, False: 13]
  ------------------
  499|  3.42k|        std::memcpy(patch_buffer_, flat.data(), flat.size());
  500|  3.42k|      }
  501|  3.43k|      limit_ = 0;
  502|  3.43k|      limit_end_ = buffer_end_ = patch_buffer_ + flat.size();
  503|  3.43k|      next_chunk_ = nullptr;
  504|  3.43k|      if (aliasing_ == kOnPatch) {
  ------------------
  |  Branch (504:11): [True: 0, False: 3.43k]
  ------------------
  505|      0|        aliasing_ = reinterpret_cast<std::uintptr_t>(flat.data()) -
  506|      0|                    reinterpret_cast<std::uintptr_t>(patch_buffer_);
  507|      0|      }
  508|  3.43k|      return patch_buffer_;
  509|  3.43k|    }
  510|  12.3k|  }
_ZN6google8protobuf8internal12ParseContext4DoneEPPKc:
  729|  6.38M|  PROTOBUF_FUTURE_ADD_EARLY_NODISCARD bool Done(const char** ptr) {
  730|  6.38M|    WireFormatNoOpSink sink;
  731|  6.38M|    return DoneWithCheck(ptr, group_depth_, sink);
  732|  6.38M|  }
_ZN6google8protobuf8internal12EndianHelperILi1EE4LoadEPKv:
  871|  3.38M|  static uint8_t Load(const void* p) { return *static_cast<const uint8_t*>(p); }
_ZN6google8protobuf8internal12EndianHelperILi2EE4LoadEPKv:
  876|  3.74M|  static uint16_t Load(const void* p) {
  877|  3.74M|    uint16_t tmp;
  878|  3.74M|    std::memcpy(&tmp, p, 2);
  879|  3.74M|    return little_endian::ToHost(tmp);
  880|  3.74M|  }
_ZN6google8protobuf8internal12EndianHelperILi4EE4LoadEPKv:
  885|   165k|  static uint32_t Load(const void* p) {
  886|   165k|    uint32_t tmp;
  887|   165k|    std::memcpy(&tmp, p, 4);
  888|   165k|    return little_endian::ToHost(tmp);
  889|   165k|  }
_ZN6google8protobuf8internal12EndianHelperILi8EE4LoadEPKv:
  894|   192k|  static uint64_t Load(const void* p) {
  895|   192k|    uint64_t tmp;
  896|   192k|    std::memcpy(&tmp, p, 8);
  897|   192k|    return little_endian::ToHost(tmp);
  898|   192k|  }
_ZN6google8protobuf8internal10RotateLeftImEET_S3_i:
 1247|   151k|    RotateLeft(T x, int s) noexcept {
 1248|   151k|  return static_cast<T>(x << (s & (std::numeric_limits<T>::digits - 1))) |
 1249|   151k|         static_cast<T>(x >> ((-s) & (std::numeric_limits<T>::digits - 1)));
 1250|   151k|}
_ZN6google8protobuf8internal15VarintParseSlowEPKcjPm:
  937|  95.8k|inline const char* VarintParseSlow(const char* p, uint32_t res, uint64_t* out) {
  938|  95.8k|  auto tmp = VarintParseSlow64(p, res);
  939|  95.8k|  *out = tmp.second;
  940|  95.8k|  return tmp.first;
  941|  95.8k|}
_ZN6google8protobuf8internal7ReadTagEPKcPjj:
 1222|   711k|                           uint32_t /*max_tag*/ = 0) {
 1223|   711k|  uint32_t res = static_cast<uint8_t>(p[0]);
 1224|   711k|  if (res < 128) {
  ------------------
  |  Branch (1224:7): [True: 689k, False: 22.5k]
  ------------------
 1225|   689k|    *out = res;
 1226|   689k|    return p + 1;
 1227|   689k|  }
 1228|  22.5k|  uint32_t second = static_cast<uint8_t>(p[1]);
 1229|  22.5k|  res += (second - 1) << 7;
 1230|  22.5k|  if (second < 128) {
  ------------------
  |  Branch (1230:7): [True: 10.1k, False: 12.4k]
  ------------------
 1231|  10.1k|    *out = res;
 1232|  10.1k|    return p + 2;
 1233|  10.1k|  }
 1234|  12.4k|  auto tmp = ReadTagFallback(p, res);
 1235|  12.4k|  *out = tmp.second;
 1236|  12.4k|  return tmp.first;
 1237|  22.5k|}
_ZN6google8protobuf8internal26RotRight7AndReplaceLowByteEmc:
 1253|   250k|RotRight7AndReplaceLowByte(uint64_t res, const char byte) {
 1254|       |  // TODO: remove the inline assembly
 1255|   250k|#if defined(__x86_64__) && defined(__GNUC__)
 1256|       |  // This will only use one register for `res`.
 1257|       |  // `byte` comes as a reference to allow the compiler to generate code like:
 1258|       |  //
 1259|       |  //   rorq    $7, %rcx
 1260|       |  //   movb    1(%rax), %cl
 1261|       |  //
 1262|       |  // which avoids loading the incoming bytes into a separate register first.
 1263|   250k|  asm("ror $7,%0\n\t"
 1264|   250k|      "movb %1,%b0"
 1265|   250k|      : "+r"(res)
 1266|   250k|      : "m"(byte));
 1267|       |#else
 1268|       |  res = RotateLeft(res, -7);
 1269|       |  res = res & ~0xFF;
 1270|       |  res |= 0xFF & byte;
 1271|       |#endif
 1272|   250k|  return res;
 1273|   250k|}
_ZN6google8protobuf8internal14ReadTagInlinedEPKcPj:
 1277|  3.17M|                                                  uint32_t* out) {
 1278|  3.17M|  uint64_t res = 0xFF & ptr[0];
 1279|  3.17M|  if (ABSL_PREDICT_FALSE(res >= 128)) {
  ------------------
  |  |  190|  3.17M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 151k, False: 3.02M]
  |  |  |  Branch (190:49): [Folded, False: 3.17M]
  |  |  |  Branch (190:58): [True: 151k, False: 3.02M]
  |  |  ------------------
  ------------------
 1280|   151k|    res = RotRight7AndReplaceLowByte(res, ptr[1]);
 1281|   151k|    if (ABSL_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  190|   151k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 41.2k, False: 109k]
  |  |  |  Branch (190:49): [Folded, False: 151k]
  |  |  |  Branch (190:58): [True: 41.2k, False: 109k]
  |  |  ------------------
  ------------------
 1282|  41.2k|      res = RotRight7AndReplaceLowByte(res, ptr[2]);
 1283|  41.2k|      if (ABSL_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  190|  41.2k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 37.5k, False: 3.65k]
  |  |  |  Branch (190:49): [Folded, False: 41.2k]
  |  |  |  Branch (190:58): [True: 37.5k, False: 3.65k]
  |  |  ------------------
  ------------------
 1284|  37.5k|        res = RotRight7AndReplaceLowByte(res, ptr[3]);
 1285|  37.5k|        if (ABSL_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  190|  37.5k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 20.7k, False: 16.7k]
  |  |  |  Branch (190:49): [Folded, False: 37.5k]
  |  |  |  Branch (190:58): [True: 20.7k, False: 16.7k]
  |  |  ------------------
  ------------------
 1286|       |          // Note: this wouldn't work if res were 32-bit,
 1287|       |          // because then replacing the low byte would overwrite
 1288|       |          // the bottom 4 bits of the result.
 1289|  20.7k|          res = RotRight7AndReplaceLowByte(res, ptr[4]);
 1290|  20.7k|          if (ABSL_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  190|  20.7k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 24, False: 20.7k]
  |  |  |  Branch (190:49): [Folded, False: 20.7k]
  |  |  |  Branch (190:58): [True: 24, False: 20.7k]
  |  |  ------------------
  ------------------
 1291|       |            // The proto format does not permit longer than 5-byte encodings for
 1292|       |            // tags.
 1293|     24|            *out = 0;
 1294|     24|            return nullptr;
 1295|     24|          }
 1296|  20.7k|          *out = static_cast<uint32_t>(RotateLeft(res, 28));
 1297|  20.7k|#if defined(__GNUC__)
 1298|       |          // Note: this asm statement prevents the compiler from
 1299|       |          // trying to share the "return ptr + constant" among all
 1300|       |          // branches.
 1301|  20.7k|          asm("" : "+r"(ptr));
 1302|  20.7k|#endif
 1303|  20.7k|          return ptr + 5;
 1304|  20.7k|        }
 1305|  16.7k|        *out = static_cast<uint32_t>(RotateLeft(res, 21));
 1306|  16.7k|        return ptr + 4;
 1307|  37.5k|      }
 1308|  3.65k|      *out = static_cast<uint32_t>(RotateLeft(res, 14));
 1309|  3.65k|      return ptr + 3;
 1310|  41.2k|    }
 1311|   109k|    *out = static_cast<uint32_t>(RotateLeft(res, 7));
 1312|   109k|    return ptr + 2;
 1313|   151k|  }
 1314|  3.02M|  *out = static_cast<uint32_t>(res);
 1315|  3.02M|  return ptr + 1;
 1316|  3.17M|}
_ZN6google8protobuf8internal8ReadSizeEPPKc:
 1374|  3.39M|inline uint32_t ReadSize(const char** pp) {
 1375|  3.39M|  auto p = *pp;
 1376|  3.39M|  uint32_t res = static_cast<uint8_t>(p[0]);
 1377|  3.39M|  if (res < 128) {
  ------------------
  |  Branch (1377:7): [True: 3.37M, False: 17.4k]
  ------------------
 1378|  3.37M|    *pp = p + 1;
 1379|  3.37M|    return res;
 1380|  3.37M|  }
 1381|  17.4k|  auto x = ReadSizeFallback(p, res);
 1382|  17.4k|  *pp = x.first;
 1383|  17.4k|  return x.second;
 1384|  3.39M|}
_ZN6google8protobuf8internal12ParseContext35ReadSizeAndPushLimitAndDepthInlinedEPKcPNS1_18EpsCopyInputStream10LimitTokenE:
 1454|  2.34M|    const char* ptr, LimitToken* old_limit) {
 1455|  2.34M|  int size = ReadSize(&ptr);
 1456|  2.34M|  if (ABSL_PREDICT_FALSE(!ptr) || depth_ <= 0) {
  ------------------
  |  |  190|  4.69M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 14, False: 2.34M]
  |  |  |  Branch (190:49): [Folded, False: 2.34M]
  |  |  |  Branch (190:58): [True: 14, False: 2.34M]
  |  |  ------------------
  ------------------
  |  Branch (1456:35): [True: 0, False: 2.34M]
  ------------------
 1457|     14|    return nullptr;
 1458|     14|  }
 1459|  2.34M|  *old_limit = PushLimit(ptr, size);
 1460|  2.34M|  --depth_;
 1461|  2.34M|  return ptr;
 1462|  2.34M|}
_ZN6google8protobuf8internal18EpsCopyInputStream13DoneWithCheckINS2_18WireFormatNoOpSinkEEEbPPKciRT_:
  465|  6.38M|  bool DoneWithCheck(const char** ptr, int d, SinkT& sink) {
  466|  6.38M|    ABSL_DCHECK(*ptr);
  ------------------
  |  |   47|  6.38M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  6.38M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  12.7M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  6.38M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  12.7M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  12.7M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.38M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.38M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.38M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.38M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.38M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  12.7M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  12.7M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  467|  6.38M|    if (ABSL_PREDICT_TRUE(*ptr < limit_end_)) return false;
  ------------------
  |  |  191|  6.38M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 4.02M, False: 2.36M]
  |  |  |  Branch (191:48): [Folded, False: 6.38M]
  |  |  |  Branch (191:57): [True: 4.02M, False: 2.36M]
  |  |  ------------------
  ------------------
  468|  2.36M|    int overrun = static_cast<int>(*ptr - buffer_end_);
  469|  2.36M|    ABSL_DCHECK_LE(overrun, kSlopBytes);  // Guaranteed by parse loop.
  ------------------
  |  |   78|  2.36M|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  2.36M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.36M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.36M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.36M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|  2.36M|    if (overrun ==
  ------------------
  |  Branch (470:9): [True: 2.34M, False: 11.3k]
  ------------------
  471|  2.36M|        limit_) {  //  No need to flip buffers if we ended on a limit.
  472|       |      // Flush up to *ptr since we're done with it.
  473|  2.34M|      sink.Flush(*ptr);
  474|  2.34M|      sink.Reset(*ptr);
  475|       |      // If we actually overrun the buffer and next_chunk_ is null, it means
  476|       |      // the stream ended and we passed the stream end.
  477|  2.34M|      if (overrun > 0 && next_chunk_ == nullptr) *ptr = nullptr;
  ------------------
  |  Branch (477:11): [True: 1.73k, False: 2.34M]
  |  Branch (477:26): [True: 187, False: 1.54k]
  ------------------
  478|  2.34M|      return true;
  479|  2.34M|    }
  480|       |    // Flush up to *ptr before updating it.
  481|  11.3k|    sink.Flush(*ptr);
  482|  11.3k|    auto res = DoneFallback(overrun, d);
  483|  11.3k|    *ptr = res.first;
  484|       |    // Reset the sink to the new start pointer.
  485|  11.3k|    sink.Reset(res.first);
  486|  11.3k|    return res.second;
  487|  2.36M|  }
_ZN6google8protobuf8internal13UnalignedLoadItEET_PKc:
  902|  3.74M|PROTOBUF_FUTURE_ADD_EARLY_NODISCARD T UnalignedLoad(const char* p) {
  903|  3.74M|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  904|  3.74M|  T res;
  905|  3.74M|  memcpy(&res, &tmp, sizeof(T));
  906|  3.74M|  return res;
  907|  3.74M|}
_ZN6google8protobuf8internal11VarintParseImEEPKcS4_PT_:
 1181|  3.61M|[[nodiscard]] const char* VarintParse(const char* p, T* out) {
 1182|  3.61M|  AssertBytesAreReadable(p, 10);
 1183|       |#if defined(__aarch64__) && defined(ABSL_IS_LITTLE_ENDIAN) && !defined(_MSC_VER)
 1184|       |  // This optimization is not supported in big endian mode
 1185|       |  uint64_t first8;
 1186|       |  std::memcpy(&first8, p, sizeof(first8));
 1187|       |  if (ABSL_PREDICT_TRUE((first8 & 0x80) == 0)) {
 1188|       |    *out = static_cast<uint8_t>(first8);
 1189|       |    return p + 1;
 1190|       |  }
 1191|       |  if (ABSL_PREDICT_TRUE((first8 & 0x8000) == 0)) {
 1192|       |    uint64_t chunk1;
 1193|       |    uint64_t chunk2;
 1194|       |    // Extracting the two chunks this way gives a speedup for this path.
 1195|       |    chunk1 = Ubfx7(first8, 0);
 1196|       |    chunk2 = Ubfx7(first8, 8);
 1197|       |    *out = chunk1 | (chunk2 << 7);
 1198|       |    return p + 2;
 1199|       |  }
 1200|       |  return VarintParseSlowArm(p, out, first8);
 1201|       |#else   // __aarch64__
 1202|  3.61M|  auto ptr = reinterpret_cast<const uint8_t*>(p);
 1203|  3.61M|  uint32_t res = ptr[0];
 1204|  3.61M|  if ((res & 0x80) == 0) {
  ------------------
  |  Branch (1204:7): [True: 3.51M, False: 95.8k]
  ------------------
 1205|  3.51M|    *out = res;
 1206|  3.51M|    return p + 1;
 1207|  3.51M|  }
 1208|  95.8k|  return VarintParseSlow(p, res, out);
 1209|  3.61M|#endif  // __aarch64__
 1210|  3.61M|}
_ZN6google8protobuf8internal13UnalignedLoadIjEET_PKc:
  902|   165k|PROTOBUF_FUTURE_ADD_EARLY_NODISCARD T UnalignedLoad(const char* p) {
  903|   165k|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  904|   165k|  T res;
  905|   165k|  memcpy(&res, &tmp, sizeof(T));
  906|   165k|  return res;
  907|   165k|}
_ZN6google8protobuf8internal13UnalignedLoadImEET_PKc:
  902|   192k|PROTOBUF_FUTURE_ADD_EARLY_NODISCARD T UnalignedLoad(const char* p) {
  903|   192k|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  904|   192k|  T res;
  905|   192k|  memcpy(&res, &tmp, sizeof(T));
  906|   192k|  return res;
  907|   192k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser24MpRepeatedMessageOrGroupILb0ELb0EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1421|  2.25k|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1422|  2.25k|  LimitToken old;
 1423|  2.25k|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1424|  2.25k|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1424:7): [True: 1, False: 2.25k]
  ------------------
 1425|  2.25k|  auto old_depth = depth_;
 1426|  2.25k|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  174|  2.25k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1427|  2.25k|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|  2.25k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.18k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.18k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.18k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.18k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1427:7): [True: 2.18k, False: 69]
  ------------------
 1428|  2.25k|  depth_++;
 1429|  2.25k|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1429:7): [True: 85, False: 2.17k]
  ------------------
 1430|  2.17k|  return ptr;
 1431|  2.25k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1421|  1.03k|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1422|  1.03k|  LimitToken old;
 1423|  1.03k|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1424|  1.03k|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1424:7): [True: 1, False: 1.03k]
  ------------------
 1425|  1.03k|  auto old_depth = depth_;
 1426|  1.03k|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  174|  1.03k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1427|  1.03k|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|  1.03k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|    942|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    942|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 942]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    942|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1427:7): [True: 942, False: 91]
  ------------------
 1428|  1.03k|  depth_++;
 1429|  1.03k|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1429:7): [True: 83, False: 950]
  ------------------
 1430|    950|  return ptr;
 1431|  1.03k|}
_ZN6google8protobuf8internal13UnalignedLoadIhEET_PKc:
  902|  3.38M|PROTOBUF_FUTURE_ADD_EARLY_NODISCARD T UnalignedLoad(const char* p) {
  903|  3.38M|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  904|  3.38M|  T res;
  905|  3.38M|  memcpy(&res, &tmp, sizeof(T));
  906|  3.38M|  return res;
  907|  3.38M|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1421|  15.2k|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1422|  15.2k|  LimitToken old;
 1423|  15.2k|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1424|  15.2k|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1424:7): [True: 9, False: 15.2k]
  ------------------
 1425|  15.2k|  auto old_depth = depth_;
 1426|  15.2k|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  174|  15.2k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1427|  15.2k|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|  15.2k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  12.8k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  12.8k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 12.8k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  12.8k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1427:7): [True: 12.8k, False: 2.32k]
  ------------------
 1428|  15.2k|  depth_++;
 1429|  15.2k|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1429:7): [True: 591, False: 14.6k]
  ------------------
 1430|  14.6k|  return ptr;
 1431|  15.2k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1421|  2.32M|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1422|  2.32M|  LimitToken old;
 1423|  2.32M|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1424|  2.32M|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1424:7): [True: 3, False: 2.32M]
  ------------------
 1425|  2.32M|  auto old_depth = depth_;
 1426|  2.32M|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  174|  2.32M|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1427|  2.32M|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|  2.32M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  2.32M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  2.32M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 2.32M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  2.32M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1427:7): [True: 2.32M, False: 513]
  ------------------
 1428|  2.32M|  depth_++;
 1429|  2.32M|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1429:7): [True: 151, False: 2.32M]
  ------------------
 1430|  2.32M|  return ptr;
 1431|  2.32M|}
_ZN6google8protobuf8internal12ParseContextC2IJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEEibPPKcDpOT_:
  697|  12.3k|      : EpsCopyInputStream(aliasing), depth_(depth) {
  698|  12.3k|    *start = InitFrom(std::forward<T>(args)...);
  699|  12.3k|  }
parse_context.cc:_ZN6google8protobuf8internal18EpsCopyInputStream10AppendSizeIZNS2_18ReadStringFallbackEPKciPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEE3$_0EES5_S5_jRKT_:
  613|    301|  const char* AppendSize(const char* ptr, uint32_t size, const A& append) {
  614|       |    // Some append functions may return false to bail out early.
  615|    301|    constexpr bool kCheckReturn =
  616|    301|        std::is_invocable_r_v<bool, decltype(append), const char*, int>;
  617|       |
  618|    301|    ABSL_DCHECK_GE(BytesAvailable(ptr), 0);
  ------------------
  |  |   82|    301|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|    301|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    301|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 301]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    301|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|    301|    uint32_t chunk_size = static_cast<uint32_t>(BytesAvailable(ptr));
  620|    334|    do {
  621|    334|      ABSL_DCHECK_GT(size, chunk_size);
  ------------------
  |  |   84|    334|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   97|    334|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    334|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 334]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    334|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|    334|      if (next_chunk_ == nullptr) return nullptr;
  ------------------
  |  Branch (622:11): [True: 274, False: 60]
  ------------------
  623|       |      if constexpr (kCheckReturn) {
  624|       |        if (!append(ptr, chunk_size)) return nullptr;
  625|     60|      } else {
  626|     60|        append(ptr, chunk_size);
  627|     60|      }
  628|     60|      ptr += chunk_size;
  629|     60|      size -= chunk_size;
  630|       |      // TODO Next calls NextBuffer which generates buffers with
  631|       |      // overlap and thus incurs cost of copying the slop regions. This is not
  632|       |      // necessary for reading strings. We should just call Next buffers.
  633|     60|      if (limit_ <= kSlopBytes) return nullptr;
  ------------------
  |  Branch (633:11): [True: 15, False: 45]
  ------------------
  634|     45|      ptr = Next();
  635|     45|      if (ptr == nullptr) return nullptr;  // passed the limit
  ------------------
  |  Branch (635:11): [True: 0, False: 45]
  ------------------
  636|     45|      ptr += kSlopBytes;
  637|     45|      chunk_size = BytesAvailable(ptr);
  638|     45|    } while (size > chunk_size);
  ------------------
  |  Branch (638:14): [True: 33, False: 12]
  ------------------
  639|       |
  640|       |    if constexpr (kCheckReturn) {
  641|       |      if (!append(ptr, size)) return nullptr;
  642|     12|    } else {
  643|     12|      append(ptr, size);
  644|     12|    }
  645|     12|    return ptr + size;
  646|    301|  }
parse_context.cc:_ZN6google8protobuf8internal18EpsCopyInputStream10AppendSizeIZNS2_20AppendStringFallbackEPKciPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEE3$_0EES5_S5_jRKT_:
  613|    244|  const char* AppendSize(const char* ptr, uint32_t size, const A& append) {
  614|       |    // Some append functions may return false to bail out early.
  615|    244|    constexpr bool kCheckReturn =
  616|    244|        std::is_invocable_r_v<bool, decltype(append), const char*, int>;
  617|       |
  618|    244|    ABSL_DCHECK_GE(BytesAvailable(ptr), 0);
  ------------------
  |  |   82|    244|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|    244|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    244|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 244]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    244|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|    244|    uint32_t chunk_size = static_cast<uint32_t>(BytesAvailable(ptr));
  620|    278|    do {
  621|    278|      ABSL_DCHECK_GT(size, chunk_size);
  ------------------
  |  |   84|    278|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   97|    278|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    278|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 278]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    278|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|    278|      if (next_chunk_ == nullptr) return nullptr;
  ------------------
  |  Branch (622:11): [True: 211, False: 67]
  ------------------
  623|       |      if constexpr (kCheckReturn) {
  624|       |        if (!append(ptr, chunk_size)) return nullptr;
  625|     67|      } else {
  626|     67|        append(ptr, chunk_size);
  627|     67|      }
  628|     67|      ptr += chunk_size;
  629|     67|      size -= chunk_size;
  630|       |      // TODO Next calls NextBuffer which generates buffers with
  631|       |      // overlap and thus incurs cost of copying the slop regions. This is not
  632|       |      // necessary for reading strings. We should just call Next buffers.
  633|     67|      if (limit_ <= kSlopBytes) return nullptr;
  ------------------
  |  Branch (633:11): [True: 25, False: 42]
  ------------------
  634|     42|      ptr = Next();
  635|     42|      if (ptr == nullptr) return nullptr;  // passed the limit
  ------------------
  |  Branch (635:11): [True: 0, False: 42]
  ------------------
  636|     42|      ptr += kSlopBytes;
  637|     42|      chunk_size = BytesAvailable(ptr);
  638|     42|    } while (size > chunk_size);
  ------------------
  |  Branch (638:14): [True: 34, False: 8]
  ------------------
  639|       |
  640|       |    if constexpr (kCheckReturn) {
  641|       |      if (!append(ptr, size)) return nullptr;
  642|      8|    } else {
  643|      8|      append(ptr, size);
  644|      8|    }
  645|      8|    return ptr + size;
  646|    244|  }
_ZN6google8protobuf8internal16WireFormatParserINS1_28UnknownFieldLiteParserHelperEEEPKcRT_S5_PNS1_12ParseContextE:
 1775|  2.47k|                                           ParseContext* ctx) {
 1776|   704k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (1776:10): [True: 704k, False: 243]
  ------------------
 1777|   704k|    uint32_t tag;
 1778|   704k|    ptr = ReadTag(ptr, &tag);
 1779|   704k|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
  ------------------
  |  | 1506|   704k|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|   704k|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 1, False: 704k]
  |  |  |  |  ------------------
  |  |  |  | 1500|      1|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|      1|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|      1|    return ret;                                        \
  |  |  |  | 1503|      1|  }
  |  |  ------------------
  ------------------
 1780|   704k|    if (tag == 0 || (tag & 7) == 4) {
  ------------------
  |  Branch (1780:9): [True: 16, False: 704k]
  |  Branch (1780:21): [True: 380, False: 704k]
  ------------------
 1781|    396|      ctx->SetLastTag(tag);
 1782|    396|      return ptr;
 1783|    396|    }
 1784|   704k|    ptr = FieldParser(tag, field_parser, ptr, ctx);
 1785|   704k|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
  ------------------
  |  | 1506|   704k|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|   704k|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 1.83k, False: 702k]
  |  |  |  |  ------------------
  |  |  |  | 1500|  1.83k|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|  1.83k|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|  1.83k|    return ret;                                        \
  |  |  |  | 1503|  1.83k|  }
  |  |  ------------------
  ------------------
 1786|   702k|  }
 1787|    243|  return ptr;
 1788|  2.47k|}
_ZN6google8protobuf8internal11FieldParserINS1_28UnknownFieldLiteParserHelperEEEPKcmRT_S5_PNS1_12ParseContextE:
 1729|  3.85M|                                      const char* ptr, ParseContext* ctx) {
 1730|  3.85M|  uint32_t number = tag >> 3;
 1731|  3.85M|  GOOGLE_PROTOBUF_PARSER_ASSERT(number != 0);
  ------------------
  |  | 1506|  3.85M|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|  3.85M|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 67, False: 3.85M]
  |  |  |  |  ------------------
  |  |  |  | 1500|     67|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|     67|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|     67|    return ret;                                        \
  |  |  |  | 1503|     67|  }
  |  |  ------------------
  ------------------
 1732|  3.85M|  using WireType = internal::WireFormatLite::WireType;
 1733|  3.85M|  switch (tag & 7) {
 1734|  3.61M|    case WireType::WIRETYPE_VARINT: {
  ------------------
  |  Branch (1734:5): [True: 3.61M, False: 240k]
  ------------------
 1735|  3.61M|      uint64_t value;
 1736|  3.61M|      ptr = VarintParse(ptr, &value);
 1737|  3.61M|      GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1506|  3.61M|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|  3.61M|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 1, False: 3.61M]
  |  |  |  |  ------------------
  |  |  |  | 1500|      1|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|      1|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|      1|    return ret;                                        \
  |  |  |  | 1503|      1|  }
  |  |  ------------------
  ------------------
 1738|  3.61M|      field_parser.AddVarint(number, value);
 1739|  3.61M|      break;
 1740|  3.61M|    }
 1741|   192k|    case WireType::WIRETYPE_FIXED64: {
  ------------------
  |  Branch (1741:5): [True: 192k, False: 3.66M]
  ------------------
 1742|   192k|      uint64_t value = UnalignedLoad<uint64_t>(ptr);
 1743|   192k|      ptr += 8;
 1744|   192k|      field_parser.AddFixed64(number, value);
 1745|   192k|      break;
 1746|  3.61M|    }
 1747|  17.3k|    case WireType::WIRETYPE_LENGTH_DELIMITED: {
  ------------------
  |  Branch (1747:5): [True: 17.3k, False: 3.83M]
  ------------------
 1748|  17.3k|      ptr = field_parser.ParseLengthDelimited(number, ptr, ctx);
 1749|  17.3k|      GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1506|  17.3k|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|  17.3k|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 248, False: 17.1k]
  |  |  |  |  ------------------
  |  |  |  | 1500|    248|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|    248|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|    248|    return ret;                                        \
  |  |  |  | 1503|    248|  }
  |  |  ------------------
  ------------------
 1750|  17.1k|      break;
 1751|  17.3k|    }
 1752|  2.47k|    case WireType::WIRETYPE_START_GROUP: {
  ------------------
  |  Branch (1752:5): [True: 2.47k, False: 3.85M]
  ------------------
 1753|  2.47k|      ptr = field_parser.ParseGroup(number, ptr, ctx);
 1754|  2.47k|      GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1506|  2.47k|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1499|  2.47k|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1499:7): [True: 2.12k, False: 348]
  |  |  |  |  ------------------
  |  |  |  | 1500|  2.12k|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1501|  2.12k|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1502|  2.12k|    return ret;                                        \
  |  |  |  | 1503|  2.12k|  }
  |  |  ------------------
  ------------------
 1755|    348|      break;
 1756|  2.47k|    }
 1757|      0|    case WireType::WIRETYPE_END_GROUP: {
  ------------------
  |  Branch (1757:5): [True: 0, False: 3.85M]
  ------------------
 1758|      0|      ABSL_LOG(FATAL) << "Can't happen";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1759|      0|      break;
 1760|      0|    }
 1761|  28.0k|    case WireType::WIRETYPE_FIXED32: {
  ------------------
  |  Branch (1761:5): [True: 28.0k, False: 3.82M]
  ------------------
 1762|  28.0k|      uint32_t value = UnalignedLoad<uint32_t>(ptr);
 1763|  28.0k|      ptr += 4;
 1764|  28.0k|      field_parser.AddFixed32(number, value);
 1765|  28.0k|      break;
 1766|      0|    }
 1767|    229|    default:
  ------------------
  |  Branch (1767:5): [True: 229, False: 3.85M]
  ------------------
 1768|    229|      return nullptr;
 1769|  3.85M|  }
 1770|  3.85M|  return ptr;
 1771|  3.85M|}
_ZN6google8protobuf8internal12ParseContext17ParseGroupInlinedIZNS1_28UnknownFieldLiteParserHelper10ParseGroupEjPKcPS2_EUlS6_E_EES6_S6_jRKT_:
 1436|  2.47k|                                const Func& func) {
 1437|  2.47k|  if (--depth_ < 0) return nullptr;
  ------------------
  |  Branch (1437:7): [True: 2, False: 2.47k]
  ------------------
 1438|  2.47k|  group_depth_++;
 1439|  2.47k|  auto old_depth = depth_;
 1440|  2.47k|  auto old_group_depth = group_depth_;
 1441|  2.47k|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  174|  2.47k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1442|  2.47k|  if (ptr != nullptr) {
  ------------------
  |  Branch (1442:7): [True: 509, False: 1.96k]
  ------------------
 1443|    509|    ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|    509|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|    509|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    509|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 509]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    509|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1444|    509|    ABSL_DCHECK_EQ(old_group_depth, group_depth_);
  ------------------
  |  |   74|    509|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|    509|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    509|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 509]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    509|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1445|    509|  }
 1446|  2.47k|  group_depth_--;
 1447|  2.47k|  depth_++;
 1448|  2.47k|  if (ABSL_PREDICT_FALSE(!ConsumeEndGroup(start_tag))) return nullptr;
  ------------------
  |  |  190|  2.47k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.12k, False: 348]
  |  |  |  Branch (190:49): [Folded, False: 2.47k]
  |  |  |  Branch (190:58): [True: 2.12k, False: 348]
  |  |  ------------------
  ------------------
 1449|    348|  return ptr;
 1450|  2.47k|}

_ZN6google8protobuf8internal8TSanReadEPKv:
  730|  3.62G|PROTOBUF_ALWAYS_INLINE void TSanRead(const void*) {}
_ZN6google8protobuf8internal9TSanWriteEPKv:
  731|   785M|PROTOBUF_ALWAYS_INLINE void TSanWrite(const void*) {}
_ZN6google8protobuf8internal8AllocateEm:
  141|  2.89M|PROTOBUF_ALWAYS_INLINE PROTOBUF_MALLOC void* Allocate(size_t size) {
  142|  2.89M|#if ABSL_HAVE_BUILTIN(__builtin_operator_new)
  143|       |  // Allows the compiler to merge or optimize away the allocation even if it
  144|       |  // would violate the observability guarantees of ::operator new.
  145|  2.89M|  return __builtin_operator_new(size);
  146|       |#else
  147|       |  return ::operator new(size);
  148|       |#endif
  149|  2.89M|}
_ZN6google8protobuf8internal16NoopDebugCounter6IncLogEm:
  824|  2.33M|  constexpr void IncLog(uint64_t) {}
_ZNK6google8protobuf8internal26GlobalEmptyStringConstexpr4InitEv:
  867|      2|  std::string* Init() const { return nullptr; }
_ZN6google8protobuf8internal15AllocateAtLeastEm:
  155|   354k|inline SizedPtr AllocateAtLeast(size_t size) {
  156|       |#if !defined(NDEBUG) && defined(ABSL_HAVE_THREAD_LOCAL) && \
  157|       |    defined(__cpp_inline_variables)
  158|       |  if (allocate_at_least_hook != nullptr) {
  159|       |    return allocate_at_least_hook(size, allocate_at_least_hook_context);
  160|       |  }
  161|       |#endif  // !NDEBUG && ABSL_HAVE_THREAD_LOCAL && __cpp_inline_variables
  162|   354k|  return {Allocate(size), size};
  163|   354k|}
_ZN6google8protobuf8internal11SizedDeleteEPvm:
  165|   559k|inline void SizedDelete(void* p, size_t size) {
  166|   559k|#if defined(__cpp_sized_deallocation)
  167|   559k|  ::operator delete(p, size);
  168|       |#else
  169|       |  // Avoid -Wunused-parameter
  170|       |  (void)size;
  171|       |  ::operator delete(p);
  172|       |#endif
  173|   559k|}
_ZN6google8protobuf8internal16SizedArrayDeleteEPvm:
  174|  2.34M|inline void SizedArrayDelete(void* p, size_t size) {
  175|  2.34M|#if defined(__cpp_sized_deallocation)
  176|  2.34M|  ::operator delete[](p, size);
  177|       |#else
  178|       |  // Avoid -Wunused-parameter
  179|       |  (void)size;
  180|       |  ::operator delete[](p);
  181|       |#endif
  182|  2.34M|}
_ZN6google8protobuf8internal22AssertBytesAreReadableEPVKci:
  372|  3.61M|inline void AssertBytesAreReadable(const volatile char* p, int n) {
  373|  3.61M|  if (PerformDebugChecks()) {
  ------------------
  |  Branch (373:7): [Folded, False: 3.61M]
  ------------------
  374|      0|    for (int i = 0; i < n; ++i) {
  ------------------
  |  Branch (374:21): [True: 0, False: 0]
  ------------------
  375|      0|      p[i];
  376|      0|    }
  377|      0|  }
  378|  3.61M|}
_ZN6google8protobuf8internal24Prefetch5LinesFrom7LinesEPKv:
  574|   123k|PROTOBUF_ALWAYS_INLINE void Prefetch5LinesFrom7Lines(const void* ptr) {
  575|   123k|  static constexpr PrefetchOpts kOpts = {
  576|   123k|      /*num=*/{5, PrefetchOpts::kLines},
  577|   123k|      /*from=*/{7, PrefetchOpts::kLines},
  578|   123k|      /*locality=*/PrefetchOpts::kHigh,
  579|   123k|  };
  580|   123k|  Prefetch<kOpts>(ptr);
  581|   123k|}
_ZN6google8protobuf8internal18PoisonMemoryRegionEPKvm:
  639|  9.75M|                               [[maybe_unused]] size_t n) {
  640|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER)
  641|       |  ASAN_POISON_MEMORY_REGION(p, n);
  642|       |#else
  643|       |  // Nothing
  644|  9.75M|#endif
  645|  9.75M|}
_ZN6google8protobuf8internal20UnpoisonMemoryRegionEPKvm:
  648|   107M|                                 [[maybe_unused]] size_t n) {
  649|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER)
  650|       |  static const bool kReallyHasMemoryPoisoning = [] {
  651|       |    // Test if poisoning is on. `allow_user_poisoning=0` would disable it.
  652|       |    // There is no official API for this, so we just probe.
  653|       |    alignas(8) char buf[8];
  654|       |    ASAN_POISON_MEMORY_REGION(buf, sizeof(buf));
  655|       |    bool res = __asan_address_is_poisoned(buf);
  656|       |    ASAN_UNPOISON_MEMORY_REGION(buf, sizeof(buf));
  657|       |    return res;
  658|       |  }();
  659|       |  if (kReallyHasMemoryPoisoning) {
  660|       |    ASAN_UNPOISON_MEMORY_REGION(p, n);
  661|       |  } else {
  662|       |    // When in ASan but with memory poisoning off, we still want to clear
  663|       |    // container annotations from such memory.
  664|       |    // We annotate the whole block as usable.
  665|       |    ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(p, static_cast<const char*>(p) + n, p,
  666|       |                                       static_cast<const char*>(p) + n);
  667|       |  }
  668|       |#else
  669|       |  // Nothing
  670|   107M|#endif
  671|   107M|}
_ZN6google8protobuf8internal8PrefetchIL_ZZNS1_24Prefetch5LinesFrom7LinesEPKvE5kOptsEvvEEvPKT1_:
  540|   123k|PROTOBUF_ALWAYS_INLINE void Prefetch(const U* ptr) {
  541|       |  // TODO: Add a check: prefetched amount <= some reasonable limit.
  542|       |  if constexpr (kOpts.num.unit == PrefetchOpts::kObjects ||
  543|       |                kOpts.from.unit == PrefetchOpts::kObjects) {
  544|       |    static_assert(sizeof(T) > 0, "Need explicit, non-void, complete T");
  545|       |  }
  546|       |  if constexpr (!std::is_void_v<T> && !std::is_void_v<U>) {
  547|       |    // Prevent accidental mistakes, but only when it's matters.
  548|       |    static_assert(std::is_convertible_v<T*, U*>, "Type mismatch");
  549|       |  }
  550|   123k|  static constexpr PrefetchOpts kScaledOpts = {
  551|   123k|      kOpts.num.ToLines<T>(),
  552|   123k|      kOpts.from.ToBytes<T>(),
  553|   123k|      kOpts.locality,
  554|   123k|      kOpts.mem_op,
  555|   123k|  };
  556|       |  // Unroll the loop iterations by blocks of 16 in optimized builds.
  557|   123k|#pragma unroll 16
  558|   743k|  for (size_t line = 0; line < kScaledOpts.num.num; ++line) {
  ------------------
  |  Branch (558:25): [True: 619k, False: 123k]
  ------------------
  559|   619k|    detail::PrefetchLine<kScaledOpts>(ptr, line);
  560|   619k|  }
  561|   123k|}
_ZN6google8protobuf8internal6detail12PrefetchLineIL_ZZNS1_8PrefetchIL_ZZNS1_24Prefetch5LinesFrom7LinesEPKvE5kOptsEvvEEvPKT1_E11kScaledOptsEEEvS6_m:
  501|   619k|PROTOBUF_ALWAYS_INLINE void PrefetchLine(const void* ptr, size_t line) {
  502|   619k|  static_assert(kOpts.from.unit == PrefetchOpts::kBytes);
  503|   619k|  const ptrdiff_t offset = kOpts.from.num + (line * ABSL_CACHELINE_SIZE);
  ------------------
  |  |   89|   619k|#define ABSL_CACHELINE_SIZE 64
  ------------------
  504|       |  // Pointer + offset overflows don't matter for prefetching, because the
  505|       |  // prefetch instruction is just a no-op for invalid addresses (although
  506|       |  // potentially incurring the cost of a TLB page-walk if there's no valid
  507|       |  // mapping for the page - but that should be rare in practice). Still, to
  508|       |  // formally avoid UB, we perform the arithmetic in uintptr_t space.
  509|   619k|  const void* prefetch_ptr =
  510|   619k|      reinterpret_cast<const void*>(reinterpret_cast<uintptr_t>(ptr) + offset);
  511|   619k|  __builtin_prefetch(prefetch_ptr, kOpts.mem_op, kOpts.locality);
  512|   619k|}
_ZN6google8protobuf8internal7LaunderINS0_11MessageLiteEEEPT_S5_:
  747|  2.33M|constexpr T* Launder(T* p) {
  748|  2.33M|#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
  749|  2.33M|  return std::launder(p);
  750|       |#elif ABSL_HAVE_BUILTIN(__builtin_launder)
  751|       |  return __builtin_launder(p);
  752|       |#else
  753|       |  return p;
  754|       |#endif
  755|  2.33M|}
_ZN6google8protobuf8internal13StrongPointerIPNS1_16DummyWeakDefaultETnT_XadL_ZNS1_18dummy_weak_defaultEEEEEvv:
   74|      2|PROTOBUF_ALWAYS_INLINE void StrongPointer() {
   75|       |  // This injects a relocation in the code path without having to run code, but
   76|       |  // we can only do it with a newer clang.
   77|      2|  asm(".reloc ., BFD_RELOC_NONE, %p0" ::"Ws"(ptr));
   78|      2|}

_ZN6google8protobuf8internal20CalculateReserveSizeIPvLi8EEEiii:
 1502|  70.8k|inline int CalculateReserveSize(int capacity, int new_size) {
 1503|  70.8k|  constexpr int lower_limit =
 1504|  70.8k|      RepeatedFieldLowerClampLimit<T, kHeapRepHeaderSize>();
 1505|  70.8k|  if (new_size < lower_limit) {
  ------------------
  |  Branch (1505:7): [True: 0, False: 70.8k]
  ------------------
 1506|       |    // Clamp to smallest allowed size.
 1507|      0|    return lower_limit;
 1508|      0|  }
 1509|  70.8k|  constexpr int kMaxSizeBeforeClamp =
 1510|  70.8k|      (std::numeric_limits<int>::max() - kHeapRepHeaderSize) / 2;
 1511|  70.8k|  if (ABSL_PREDICT_FALSE(capacity > kMaxSizeBeforeClamp)) {
  ------------------
  |  |  190|  70.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 70.8k]
  |  |  |  Branch (190:49): [Folded, False: 70.8k]
  |  |  |  Branch (190:58): [True: 0, False: 70.8k]
  |  |  ------------------
  ------------------
 1512|      0|    return std::numeric_limits<int>::max();
 1513|      0|  }
 1514|  70.8k|  constexpr int kSooCapacityElements = SooCapacityElements<T>();
 1515|  70.8k|  if (kSooCapacityElements > 0 && kSooCapacityElements < lower_limit) {
  ------------------
  |  Branch (1515:7): [True: 0, Folded]
  |  Branch (1515:35): [Folded, False: 0]
  ------------------
 1516|       |    // In this case, we need to set capacity to 0 here to ensure power-of-two
 1517|       |    // sized allocations.
 1518|      0|    if (capacity < lower_limit) capacity = 0;
  ------------------
  |  Branch (1518:9): [True: 0, False: 0]
  ------------------
 1519|  70.8k|  } else {
 1520|   141k|    ABSL_DCHECK(capacity == 0 || capacity >= lower_limit)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  70.8k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  70.8k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   141k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   141k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 70.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  70.8k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 70.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  70.8k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 70.8k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  70.8k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|  70.8k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1521|   141k|        << capacity << " " << lower_limit;
 1522|  70.8k|  }
 1523|       |  // We want to double the number of bytes, not the number of elements, to try
 1524|       |  // to stay within power-of-two allocations.
 1525|       |  // The allocation has kHeapRepHeaderSize + sizeof(T) * capacity.
 1526|  70.8k|  int doubled_size = 2 * capacity + kHeapRepHeaderSize / sizeof(T);
 1527|  70.8k|  return std::max(doubled_size, new_size);
 1528|  70.8k|}

_ZN6google8protobuf8internal20RepeatedPtrFieldBase14InternalExtendEiPNS0_5ArenaE:
   46|  70.8k|void** RepeatedPtrFieldBase::InternalExtend(int extend_amount, Arena* arena) {
   47|  70.8k|  ABSL_DCHECK(extend_amount > 0);
  ------------------
  |  |   47|  70.8k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  70.8k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   141k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  70.8k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   141k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   141k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 70.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  70.8k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 70.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  70.8k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 70.8k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   141k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   141k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|  70.8k|  ABSL_DCHECK_EQ(arena, GetArena());
  ------------------
  |  |   74|  70.8k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  70.8k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  70.8k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 70.8k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  70.8k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|  70.8k|  constexpr size_t kPtrSize = sizeof(rep()->elements[0]);
   50|  70.8k|  constexpr size_t kMaxSize = std::numeric_limits<size_t>::max();
   51|  70.8k|  constexpr size_t kMaxCapacity = (kMaxSize - kRepHeaderSize) / kPtrSize;
   52|  70.8k|  const int old_capacity = Capacity();
   53|  70.8k|  Rep* new_rep = nullptr;
   54|       |
   55|  70.8k|  int new_capacity = internal::CalculateReserveSize<void*, kRepHeaderSize>(
   56|  70.8k|      old_capacity, old_capacity + extend_amount);
   57|  70.8k|  {
   58|  70.8k|    ABSL_DCHECK_LE(new_capacity, kMaxCapacity)
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  70.8k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  70.8k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 70.8k]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  70.8k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   59|      0|        << "New capacity is too large to fit into internal representation";
   60|  70.8k|    const size_t new_size = kRepHeaderSize + kPtrSize * new_capacity;
   61|  70.8k|    if (arena == nullptr) {
  ------------------
  |  Branch (61:9): [True: 16.8k, False: 54.0k]
  ------------------
   62|  16.8k|      const internal::SizedPtr alloc = internal::AllocateAtLeast(new_size);
   63|  16.8k|      new_capacity = static_cast<int>((alloc.n - kRepHeaderSize) / kPtrSize);
   64|  16.8k|      new_rep = reinterpret_cast<Rep*>(alloc.p);
   65|  54.0k|    } else {
   66|  54.0k|      auto* alloc = Arena::CreateArray<char>(arena, new_size);
   67|  54.0k|      new_rep = reinterpret_cast<Rep*>(alloc);
   68|  54.0k|    }
   69|  70.8k|  }
   70|       |
   71|  70.8k|  if (using_sso()) {
  ------------------
  |  Branch (71:7): [True: 18.1k, False: 52.7k]
  ------------------
   72|  18.1k|    new_rep->capacity = new_capacity;
   73|  18.1k|    new_rep->allocated_size = tagged_rep_or_elem_ != nullptr ? 1 : 0;
  ------------------
  |  Branch (73:31): [True: 18.1k, False: 0]
  ------------------
   74|  18.1k|    new_rep->elements[0] = tagged_rep_or_elem_;
   75|  52.7k|  } else {
   76|  52.7k|    Rep* old_rep = rep();
   77|  52.7k|    new_rep->capacity = new_capacity;
   78|  52.7k|    new_rep->allocated_size = old_rep->allocated_size;
   79|  52.7k|    memcpy(new_rep->elements, old_rep->elements,
   80|  52.7k|           new_rep->allocated_size * kPtrSize);
   81|  52.7k|    size_t old_total_size = old_capacity * kPtrSize + kRepHeaderSize;
   82|  52.7k|    if (arena == nullptr) {
  ------------------
  |  Branch (82:9): [True: 9.51k, False: 43.2k]
  ------------------
   83|  9.51k|      internal::SizedDelete(old_rep, old_total_size);
   84|  43.2k|    } else {
   85|  43.2k|      arena->ReturnArrayMemory(old_rep, old_total_size);
   86|  43.2k|    }
   87|  52.7k|  }
   88|       |
   89|  70.8k|  tagged_rep_or_elem_ =
   90|  70.8k|      reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(new_rep) + 1);
   91|       |
   92|  70.8k|  return &new_rep->elements[current_size_];
   93|  70.8k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase13DestroyProtosEv:
  128|  8.62k|void RepeatedPtrFieldBase::DestroyProtos() {
  129|       |#if defined(PROTOBUF_CUSTOM_VTABLE)
  130|       |  if (allocated_size() > 0) {
  131|       |    using H = GenericTypeHandler<MessageLite>;
  132|       |    const ClassData* class_data = cast<H>(elements()[0])->GetClassData();
  133|       |    PROTOBUF_ALWAYS_INLINE_CALL DestroyMessageLites(class_data);
  134|       |  } else if (!using_sso()) {
  135|       |    internal::SizedDelete(rep(), Capacity() * sizeof(void*) + kRepHeaderSize);
  136|       |  }
  137|       |#else
  138|  8.62k|  PROTOBUF_ALWAYS_INLINE_CALL Destroy<GenericTypeHandler<MessageLite>>();
  ------------------
  |  |  174|  8.62k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
  139|  8.62k|#endif
  140|       |
  141|       |  // TODO:  Eliminate this store when invoked from the destructor,
  142|       |  // since it is dead.
  143|  8.62k|  tagged_rep_or_elem_ = nullptr;
  144|  8.62k|}
_ZN6google8protobuf8internal34InternalOutOfLineDeleteMessageLiteEPNS0_11MessageLiteE:
  161|  2.32M|void InternalOutOfLineDeleteMessageLite(MessageLite* message) {
  162|  2.32M|  delete message;
  163|  2.32M|}

_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEE4sizeEv:
 1740|   602M|inline int RepeatedPtrField<Element>::size() const {
 1741|   602M|  return RepeatedPtrFieldBase::size();
 1742|   602M|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase4sizeEv:
  227|  1.66G|  int size() const {
  228|  1.66G|    int res = current_size_;
  229|  1.66G|    PROTOBUF_ASSUME(res >= 0);
  ------------------
  |  |  733|  1.66G|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  230|  1.66G|    return res;
  231|  1.66G|  }
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEE7MutableEi:
 1764|   125k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1765|   125k|  return RepeatedPtrFieldBase::Mutable<TypeHandler>(index);
 1766|   125k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7MutableINS1_18GenericTypeHandlerIN13sentencepiece24ModelProto_SentencePieceEEEEEPNT_4TypeEi:
  259|   125k|  Value<TypeHandler>* Mutable(int index) {
  260|   125k|    RuntimeAssertInBounds(index, size());
  261|   125k|    return cast<TypeHandler>(element_at(index));
  262|   125k|  }
_ZN6google8protobuf8internal21RuntimeAssertInBoundsEii:
  130|   979M|PROTOBUF_EXPORT inline void RuntimeAssertInBounds(int index, int size) {
  131|       |  if constexpr (GetBoundsCheckMode() == BoundsCheckMode::kAbort) {
  132|       |    if (ABSL_PREDICT_FALSE(index < 0 || index >= size)) {
  133|       |      // "No merge" attribute used to improve debuggability by telling the
  134|       |      // compiler not to merge these failure paths. Note that this is currently
  135|       |      // best-effort in clang/llvm.
  136|       |      PROTOBUF_NO_MERGE LogIndexOutOfBoundsAndAbort(index, size);
  137|       |    }
  138|       |  }
  139|   979M|  ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|   979M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|   979M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   979M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 979M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   979M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|   979M|  ABSL_DCHECK_LT(index, size);
  ------------------
  |  |   80|   979M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|   979M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   979M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 979M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   979M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|   979M|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN13sentencepiece24ModelProto_SentencePieceEEEEEPNT_4TypeEPv:
  811|   125k|  static inline Value<TypeHandler>* cast(void* element) {
  812|   125k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  813|   125k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase10element_atEi:
  782|   979M|  void*& element_at(int index) {
  783|   979M|    if (using_sso()) {
  ------------------
  |  Branch (783:9): [True: 40.9M, False: 938M]
  ------------------
  784|  40.9M|      ABSL_DCHECK_EQ(index, 0);
  ------------------
  |  |   74|  40.9M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  40.9M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  40.9M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 40.9M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  40.9M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|  40.9M|      return tagged_rep_or_elem_;
  786|  40.9M|    }
  787|   938M|    return rep()->elements[index];
  788|   979M|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase9using_ssoEv:
  806|  1.26G|  bool using_sso() const {
  807|  1.26G|    return (reinterpret_cast<uintptr_t>(tagged_rep_or_elem_) & 1) == 0;
  808|  1.26G|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3repEv:
  797|  1.22G|  Rep* rep() {
  798|  1.22G|    ABSL_DCHECK(!using_sso());
  ------------------
  |  |   47|  1.22G|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  1.22G|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  2.45G|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  1.22G|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  2.45G|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  2.45G|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.22G, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.22G|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.22G]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.22G|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.22G, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  2.45G|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  2.45G|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|  1.22G|    return reinterpret_cast<Rep*>(
  800|  1.22G|        reinterpret_cast<uintptr_t>(tagged_rep_or_elem_) - 1);
  801|  1.22G|  }
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEE20InternalAddWithArenaENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
 1776|  92.7M|    internal::InternalVisibility, Arena* arena) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1777|  92.7M|  return AddWithArena(arena);
 1778|  92.7M|}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEE12AddWithArenaEPNS0_5ArenaE:
 1782|  92.7M|    Arena* arena) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1783|  92.7M|  return RepeatedPtrFieldBase::Add<TypeHandler>(arena);
 1784|  92.7M|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3AddINS1_18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEEEEEPNT_4TypeEPNS0_5ArenaE:
  265|  92.7M|  Value<TypeHandler>* Add(Arena* arena) {
  266|  92.7M|    return cast<TypeHandler>(AddInternal(arena, TypeHandler::GetNewFunc()));
  267|  92.7M|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEEEEEPNT_4TypeEPv:
  811|   177M|  static inline Value<TypeHandler>* cast(void* element) {
  812|   177M|    return reinterpret_cast<Value<TypeHandler>*>(element);
  813|   177M|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase11AddInternalEPNS0_5ArenaEN4absl12lts_2026081711FunctionRefIFvS4_RPvEEE:
  910|  95.9M|    Arena* arena, absl::FunctionRef<ElementNewFn> factory) {
  911|  95.9M|  ABSL_DCHECK_EQ(arena, GetArena());
  ------------------
  |  |   74|  95.9M|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  95.9M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  95.9M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 95.9M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  95.9M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  912|  95.9M|  if (tagged_rep_or_elem_ == nullptr) {
  ------------------
  |  Branch (912:7): [True: 27.9k, False: 95.8M]
  ------------------
  913|  27.9k|    ExchangeCurrentSize(1);
  914|  27.9k|    factory(arena, tagged_rep_or_elem_);
  915|  27.9k|    return tagged_rep_or_elem_;
  916|  27.9k|  }
  917|  95.8M|  absl::PrefetchToLocalCache(tagged_rep_or_elem_);
  918|  95.8M|  if (using_sso()) {
  ------------------
  |  Branch (918:7): [True: 18.1k, False: 95.8M]
  ------------------
  919|  18.1k|    if (current_size_ == 0) {
  ------------------
  |  Branch (919:9): [True: 0, False: 18.1k]
  ------------------
  920|      0|      ExchangeCurrentSize(1);
  921|      0|      return tagged_rep_or_elem_;
  922|      0|    }
  923|  18.1k|    void*& result = *InternalExtend(1, arena);
  924|  18.1k|    factory(arena, result);
  925|  18.1k|    Rep* r = rep();
  926|  18.1k|    r->allocated_size = 2;
  927|  18.1k|    ExchangeCurrentSize(2);
  928|  18.1k|    return result;
  929|  18.1k|  }
  930|  95.8M|  Rep* r = rep();
  931|  95.8M|  if (ABSL_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  190|  95.8M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 52.7k, False: 95.8M]
  |  |  |  Branch (190:49): [Folded, False: 95.8M]
  |  |  |  Branch (190:58): [True: 52.7k, False: 95.8M]
  |  |  ------------------
  ------------------
  932|  52.7k|    InternalExtend(1, arena);
  933|  52.7k|    r = rep();
  934|  95.8M|  } else {
  935|  95.8M|    if (ClearedCount() > 0) {
  ------------------
  |  Branch (935:9): [True: 0, False: 95.8M]
  ------------------
  936|      0|      return r->elements[ExchangeCurrentSize(current_size_ + 1)];
  937|      0|    }
  938|  95.8M|  }
  939|  95.8M|  ++r->allocated_size;
  940|  95.8M|  void*& result = r->elements[ExchangeCurrentSize(current_size_ + 1)];
  941|  95.8M|  factory(arena, result);
  942|  95.8M|  return result;
  943|  95.8M|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase19ExchangeCurrentSizeEi:
  759|  95.9M|  inline int ExchangeCurrentSize(int new_size) {
  760|  95.9M|    return std::exchange(current_size_, new_size);
  761|  95.9M|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase14SizeAtCapacityEv:
  762|  95.8M|  inline bool SizeAtCapacity() const {
  763|       |    // Harden invariant size() <= allocated_size() <= Capacity().
  764|  95.8M|    ABSL_DCHECK_LE(size(), allocated_size());
  ------------------
  |  |   78|  95.8M|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  95.8M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  95.8M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 95.8M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  95.8M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|  95.8M|    ABSL_DCHECK_LE(allocated_size(), Capacity());
  ------------------
  |  |   78|  95.8M|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  95.8M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  95.8M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 95.8M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  95.8M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  766|  95.8M|    return current_size_ == Capacity();
  767|  95.8M|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8CapacityEv:
  238|  95.9M|  int Capacity() const {
  239|  95.9M|    int res = using_sso() ? kSSOCapacity : rep()->capacity;
  ------------------
  |  Branch (239:15): [True: 18.1k, False: 95.9M]
  ------------------
  240|  95.9M|    PROTOBUF_ASSUME(res >= 0);
  ------------------
  |  |  733|  95.9M|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  241|  95.9M|    return res;
  242|  95.9M|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3repEv:
  802|   191M|  const Rep* rep() const {
  803|   191M|    return const_cast<RepeatedPtrFieldBase*>(this)->rep();
  804|   191M|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase12ClearedCountEv:
  642|  95.8M|  int ClearedCount() const { return allocated_size() - current_size_; }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase14allocated_sizeEv:
  793|  95.8M|  int allocated_size() const {
  794|  95.8M|    return using_sso() ? (tagged_rep_or_elem_ != nullptr ? 1 : 0)
  ------------------
  |  Branch (794:12): [True: 4.38k, False: 95.8M]
  |  Branch (794:27): [True: 4.38k, False: 0]
  ------------------
  795|  95.8M|                       : rep()->allocated_size;
  796|  95.8M|  }
_ZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEE10GetNewFuncEv:
 1059|  92.7M|  static constexpr auto GetNewFunc() {
 1060|  92.7M|    return [](Arena* arena, void*& ptr) {
 1061|  92.7M|      ptr = Arena::DefaultConstruct<Type>(arena);
 1062|  92.7M|    };
 1063|  92.7M|  }
_ZZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEE10GetNewFuncEvENKUlPNS0_5ArenaERPvE_clES7_S9_:
 1060|  92.7M|    return [](Arena* arena, void*& ptr) {
 1061|  92.7M|      ptr = Arena::DefaultConstruct<Type>(arena);
 1062|  92.7M|    };
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEE7MutableEi:
 1764|  84.5M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1765|  84.5M|  return RepeatedPtrFieldBase::Mutable<TypeHandler>(index);
 1766|  84.5M|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7MutableINS1_18GenericTypeHandlerIN13sentencepiece31SentencePieceText_SentencePieceEEEEEPNT_4TypeEi:
  259|  84.5M|  Value<TypeHandler>* Mutable(int index) {
  260|  84.5M|    RuntimeAssertInBounds(index, size());
  261|  84.5M|    return cast<TypeHandler>(element_at(index));
  262|  84.5M|  }
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEE20InternalAddWithArenaENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
 1776|  4.55k|    internal::InternalVisibility, Arena* arena) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1777|  4.55k|  return AddWithArena(arena);
 1778|  4.55k|}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEE12AddWithArenaEPNS0_5ArenaE:
 1782|  4.55k|    Arena* arena) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1783|  4.55k|  return RepeatedPtrFieldBase::Add<TypeHandler>(arena);
 1784|  4.55k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3AddINS1_18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEEEEEPNT_4TypeEPNS0_5ArenaE:
  265|  4.55k|  Value<TypeHandler>* Add(Arena* arena) {
  266|  4.55k|    return cast<TypeHandler>(AddInternal(arena, TypeHandler::GetNewFunc()));
  267|  4.55k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEEEEEPNT_4TypeEPv:
  811|  4.55k|  static inline Value<TypeHandler>* cast(void* element) {
  812|  4.55k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  813|  4.55k|  }
_ZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEE10GetNewFuncEv:
 1059|  4.55k|  static constexpr auto GetNewFunc() {
 1060|  4.55k|    return [](Arena* arena, void*& ptr) {
 1061|  4.55k|      ptr = Arena::DefaultConstruct<Type>(arena);
 1062|  4.55k|    };
 1063|  4.55k|  }
_ZZN6google8protobuf8internal18GenericTypeHandlerIN13sentencepiece17SentencePieceTextEE10GetNewFuncEvENKUlPNS0_5ArenaERPvE_clES7_S9_:
 1060|  4.55k|    return [](Arena* arena, void*& ptr) {
 1061|  4.55k|      ptr = Arena::DefaultConstruct<Type>(arena);
 1062|  4.55k|    };
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase10element_atEi:
  789|   895M|  const void* element_at(int index) const {
  790|   895M|    return const_cast<RepeatedPtrFieldBase*>(this)->element_at(index);
  791|   895M|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase8elementsEv:
  778|  11.7k|  void** elements() {
  779|  11.7k|    return using_sso() ? &tagged_rep_or_elem_ : +rep()->elements;
  ------------------
  |  Branch (779:12): [True: 4.38k, False: 7.35k]
  ------------------
  780|  11.7k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEPNT_4TypeEPv:
  811|  4.65M|  static inline Value<TypeHandler>* cast(void* element) {
  812|  4.65M|    return reinterpret_cast<Value<TypeHandler>*>(element);
  813|  4.65M|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEE4sizeEv:
 1740|  84.5M|inline int RepeatedPtrField<Element>::size() const {
 1741|  84.5M|  return RepeatedPtrFieldBase::size();
 1742|  84.5M|}
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEE4sizeEv:
 1740|  6.86k|inline int RepeatedPtrField<Element>::size() const {
 1741|  6.86k|  return RepeatedPtrFieldBase::size();
 1742|  6.86k|}
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEE5beginEv:
 2409|  3.43k|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2410|  3.43k|  return iterator(raw_data());
 2411|  3.43k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8raw_dataEv:
  489|  60.3k|  void* const* raw_data() const { return elements(); }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8elementsEv:
  775|  60.3k|  void* const* elements() const {
  776|  60.3k|    return using_sso() ? &tagged_rep_or_elem_ : +rep()->elements;
  ------------------
  |  Branch (776:12): [True: 19.2k, False: 41.0k]
  ------------------
  777|  60.3k|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIN13sentencepiece17SentencePieceTextEEC2EPKPv:
 2169|  6.86k|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece17SentencePieceTextEEC2IS4_vEERKNS2_IT_EE:
 2177|  6.86k|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEE3endEv:
 2424|  3.43k|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2425|  3.43k|  return iterator(raw_data() + size());
 2426|  3.43k|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKN13sentencepiece17SentencePieceTextEEES8_:
 2203|  7.98k|  friend bool operator!=(const iterator& x, const iterator& y) {
 2204|  7.98k|    return x.it_ != y.it_;
 2205|  7.98k|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece17SentencePieceTextEEppEv:
 2188|  4.55k|  iterator& operator++() {
 2189|  4.55k|    ++it_;
 2190|  4.55k|    return *this;
 2191|  4.55k|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece17SentencePieceTextEEdeEv:
 2180|  4.55k|  PROTOBUF_FUTURE_ADD_NODISCARD reference operator*() const {
 2181|  4.55k|    return *reinterpret_cast<Element*>(*it_);
 2182|  4.55k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEE5beginEv:
 2409|  15.6k|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2410|  15.6k|  return iterator(raw_data());
 2411|  15.6k|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIN13sentencepiece31SentencePieceText_SentencePieceEEC2EPKPv:
 2169|  31.3k|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece31SentencePieceText_SentencePieceEEC2IS4_vEERKNS2_IT_EE:
 2177|  31.3k|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEE3endEv:
 2424|  15.6k|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2425|  15.6k|  return iterator(raw_data() + size());
 2426|  15.6k|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKN13sentencepiece31SentencePieceText_SentencePieceEEES8_:
 2203|  92.8M|  friend bool operator!=(const iterator& x, const iterator& y) {
 2204|  92.8M|    return x.it_ != y.it_;
 2205|  92.8M|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece31SentencePieceText_SentencePieceEEppEv:
 2188|  92.7M|  iterator& operator++() {
 2189|  92.7M|    ++it_;
 2190|  92.7M|    return *this;
 2191|  92.7M|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece31SentencePieceText_SentencePieceEEdeEv:
 2180|  92.7M|  PROTOBUF_FUTURE_ADD_NODISCARD reference operator*() const {
 2181|  92.7M|    return *reinterpret_cast<Element*>(*it_);
 2182|  92.7M|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8GetArenaEv:
  677|  8.45k|  inline Arena* GetArena() const {
  678|  8.45k|    return ResolveArena<&RepeatedPtrFieldBase::resolver_>(this);
  679|  8.45k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBaseC2ENS1_22InternalMetadataOffsetE:
  211|  37.3k|      : tagged_rep_or_elem_(nullptr), current_size_(0), resolver_(offset) {}
_ZN6google8protobuf8internal20RepeatedPtrFieldBaseD2Ev:
  216|  40.3k|  ~RepeatedPtrFieldBase() {
  217|       |#ifndef NDEBUG
  218|       |    // Try to trigger segfault / asan failure in non-opt builds if the arena
  219|       |    // lifetime has ended before the destructor. Note that `GetArena()` is
  220|       |    // not free, but this is debug-only.
  221|       |    const Arena* arena = GetArena();
  222|       |    if (arena != nullptr) (void)arena->SpaceAllocated();
  223|       |#endif
  224|  40.3k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase12NeedsDestroyEv:
  339|  40.3k|  inline bool NeedsDestroy() const {
  340|       |    // Either there is an allocated element in SSO buffer or there is an
  341|       |    // allocated Rep.
  342|  40.3k|    return tagged_rep_or_elem_ != nullptr;
  343|  40.3k|  }
_ZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE10GetNewFuncEv:
 1132|   796k|  static constexpr auto GetNewFunc() {
 1133|   796k|    return [](Arena* arena, void*& ptr) { ptr = Arena::Create<Type>(arena); };
 1134|   796k|  }
_ZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE6DeleteEPS9_:
 1159|   796k|  static inline void Delete(Type* value) { delete value; }
_ZN6google8protobuf8internal18GenericTypeHandlerINS0_11MessageLiteEE23GetNewFromPrototypeFuncEPKS3_:
 1082|  2.32M|  static constexpr auto GetNewFromPrototypeFunc(const Type* prototype) {
 1083|  2.32M|    static_assert(std::is_base_of_v<MessageLite, Type>);
 1084|  2.32M|    ABSL_DCHECK(prototype != nullptr);
  ------------------
  |  |   47|  2.32M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  2.32M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.65M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  2.32M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  4.65M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  4.65M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.32M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.32M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.32M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.32M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.32M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  4.65M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  4.65M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1085|  2.32M|    return
 1086|  2.32M|        [prototype](Arena* arena, void*& ptr) { ptr = prototype->New(arena); };
 1087|  2.32M|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase16AddFromPrototypeINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEPNT_4TypeEPNS0_5ArenaEPKS8_:
  376|  2.32M|      Arena* arena, const Value<TypeHandler>* prototype) {
  377|  2.32M|    using H = CommonHandler<TypeHandler>;
  378|  2.32M|    Value<TypeHandler>* result = cast<TypeHandler>(
  379|  2.32M|        AddInternal(arena, H::GetNewFromPrototypeFunc(prototype)));
  380|  2.32M|    return result;
  381|  2.32M|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEPv:
  811|  1.59M|  static inline Value<TypeHandler>* cast(void* element) {
  812|  1.59M|    return reinterpret_cast<Value<TypeHandler>*>(element);
  813|  1.59M|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE8GetArenaEv:
 2001|  8.45k|inline Arena* RepeatedPtrField<Element>::GetArena() {
 2002|       |  // Note: we make this function non-const to force callers to call the
 2003|       |  // `mutable_*` accessor on the repeated field before calling `GetArena()`,
 2004|       |  // which initializes the field if it is split. If this method were const, then
 2005|       |  // `msg.repeated_ptr_field().GetArena()` would be valid, but for split
 2006|       |  // repeated fields `repeated_ptr_field()` could point to the default split
 2007|       |  // instance. This would always return `nullptr`, which is incorrect when using
 2008|       |  // arenas.
 2009|  8.45k|  return RepeatedPtrFieldBase::GetArena();
 2010|  8.45k|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE12AddWithArenaEPNS0_5ArenaE:
 1782|   796k|    Arena* arena) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1783|   796k|  return RepeatedPtrFieldBase::Add<TypeHandler>(arena);
 1784|   796k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3AddINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEPNS0_5ArenaE:
  265|   796k|  Value<TypeHandler>* Add(Arena* arena) {
  266|   796k|    return cast<TypeHandler>(AddInternal(arena, TypeHandler::GetNewFunc()));
  267|   796k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE4sizeEv:
 1740|  7.44k|inline int RepeatedPtrField<Element>::size() const {
 1741|  7.44k|  return RepeatedPtrFieldBase::size();
 1742|  7.44k|}
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3GetEi:
 1746|  12.2k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1747|  12.2k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1748|  12.2k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEERKNT_4TypeEi:
  354|  12.2k|  PROTOBUF_FUTURE_ADD_NODISCARD const Value<TypeHandler>& Get(int index) const {
  355|       |    if constexpr (GetBoundsCheckMode() == BoundsCheckMode::kReturnDefault) {
  356|       |      if (ABSL_PREDICT_FALSE(index < 0 || index >= size())) {
  357|       |        // `default_instance()` is not supported for MessageLite and Message.
  358|       |        if constexpr (TypeHandler::has_default_instance()) {
  359|       |          LogIndexOutOfBounds(index, current_size_);
  360|       |          return TypeHandler::default_instance();
  361|       |        }
  362|       |      }
  363|       |    }
  364|       |    // We refactor this to a separate function instead of inlining it so we
  365|       |    // can measure the performance impact more easily.
  366|  12.2k|    RuntimeAssertInBounds(index, size());
  367|  12.2k|    return *cast<TypeHandler>(element_at(index));
  368|  12.2k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPKNT_4TypeEPKv:
  815|  12.2k|  static inline const Value<TypeHandler>* cast(const void* element) {
  816|  12.2k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  817|  12.2k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEE3GetEi:
 1746|   895M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1747|   895M|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1748|   895M|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerIN13sentencepiece24ModelProto_SentencePieceEEEEERKNT_4TypeEi:
  354|   895M|  PROTOBUF_FUTURE_ADD_NODISCARD const Value<TypeHandler>& Get(int index) const {
  355|       |    if constexpr (GetBoundsCheckMode() == BoundsCheckMode::kReturnDefault) {
  356|       |      if (ABSL_PREDICT_FALSE(index < 0 || index >= size())) {
  357|       |        // `default_instance()` is not supported for MessageLite and Message.
  358|       |        if constexpr (TypeHandler::has_default_instance()) {
  359|       |          LogIndexOutOfBounds(index, current_size_);
  360|       |          return TypeHandler::default_instance();
  361|       |        }
  362|       |      }
  363|       |    }
  364|       |    // We refactor this to a separate function instead of inlining it so we
  365|       |    // can measure the performance impact more easily.
  366|   895M|    RuntimeAssertInBounds(index, size());
  367|   895M|    return *cast<TypeHandler>(element_at(index));
  368|   895M|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN13sentencepiece24ModelProto_SentencePieceEEEEEPKNT_4TypeEPKv:
  815|   895M|  static inline const Value<TypeHandler>* cast(const void* element) {
  816|   895M|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  817|   895M|  }
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEEC2ENS0_8internal18InternalVisibilityENS5_22InternalMetadataOffsetE:
 1236|  18.1k|      : RepeatedPtrField(offset) {}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece31SentencePieceText_SentencePieceEEC2ENS0_8internal22InternalMetadataOffsetE:
 1627|  18.1k|    : RepeatedPtrFieldBase(offset) {
 1628|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1629|       |  // a complete type, and in split repeated fields cases, we call
 1630|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1631|  18.1k|}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEEC2ENS0_8internal18InternalVisibilityENS5_22InternalMetadataOffsetE:
 1236|  6.81k|      : RepeatedPtrField(offset) {}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece17SentencePieceTextEEC2ENS0_8internal22InternalMetadataOffsetE:
 1627|  6.81k|    : RepeatedPtrFieldBase(offset) {
 1628|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1629|       |  // a complete type, and in split repeated fields cases, we call
 1630|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1631|  6.81k|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE19StaticValidityCheckEv:
 1200|  27.9k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
 1201|  27.9k|    static_assert(
 1202|  27.9k|        std::disjunction_v<
 1203|  27.9k|            internal::is_supported_string_type<Element>,
 1204|  27.9k|            internal::is_supported_message_type<Element>>,
 1205|  27.9k|        "We only support string and Message types in RepeatedPtrField.");
 1206|  27.9k|    static_assert(alignof(Element) <= internal::ArenaAlignDefault::align,
 1207|  27.9k|                  "Overaligned types are not supported");
 1208|  27.9k|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEED2Ev:
 1653|  27.9k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1654|  27.9k|  StaticValidityCheck();
 1655|  27.9k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1655:7): [True: 24.8k, False: 3.11k]
  ------------------
 1656|       |  if constexpr (std::is_base_of_v<MessageLite, Element>) {
 1657|       |#if defined(PROTOBUF_CUSTOM_VTABLE)
 1658|       |    if constexpr (std::is_same_v<Element, MessageLite> ||
 1659|       |                  std::is_same_v<Element, Message>) {
 1660|       |      DestroyProtos();
 1661|       |    } else {
 1662|       |      DestroyMessageLites(internal::MessageTraits<Element>::class_data());
 1663|       |    }
 1664|       |#else
 1665|       |    DestroyProtos();
 1666|       |#endif
 1667|  3.11k|  } else {
 1668|  3.11k|    Destroy<TypeHandler>();
 1669|  3.11k|  }
 1670|  3.11k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7DestroyINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvv:
  314|  3.11k|  void Destroy() {
  315|  3.11k|    ABSL_DCHECK(NeedsDestroy());
  ------------------
  |  |   47|  3.11k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  3.11k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  6.22k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  3.11k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  6.22k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  6.22k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3.11k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  3.11k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3.11k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  3.11k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3.11k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  6.22k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  6.22k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|  3.11k|    ABSL_DCHECK_EQ(GetArena(), nullptr);
  ------------------
  |  |   74|  3.11k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  3.11k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  3.11k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 3.11k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  3.11k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|       |
  318|  3.11k|    using H = CommonHandler<TypeHandler>;
  319|  3.11k|    int n = allocated_size();
  320|  3.11k|    ABSL_DCHECK_LE(n, Capacity());
  ------------------
  |  |   78|  3.11k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  3.11k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  3.11k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 3.11k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  3.11k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|  3.11k|    void** elems = elements();
  322|   800k|    for (int i = 0; i < n; i++) {
  ------------------
  |  Branch (322:21): [True: 796k, False: 3.11k]
  ------------------
  323|   796k|      if (i + 5 < n) {
  ------------------
  |  Branch (323:11): [True: 791k, False: 5.03k]
  ------------------
  324|   791k|        absl::PrefetchToLocalCacheNta(elems[i + 5]);
  325|   791k|      }
  326|   796k|      Delete<H>(elems[i]);
  327|   796k|    }
  328|  3.11k|    if (!using_sso()) {
  ------------------
  |  Branch (328:9): [True: 710, False: 2.40k]
  ------------------
  329|    710|      internal::SizedDelete(rep(),
  330|    710|                            Capacity() * sizeof(elems[0]) + kRepHeaderSize);
  331|    710|    }
  332|  3.11k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase6DeleteINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPv:
  821|   796k|  static inline void Delete(void* obj) {
  822|   796k|    TypeHandler::Delete(cast<TypeHandler>(obj));
  823|   796k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEE19StaticValidityCheckEv:
 1200|  12.3k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
 1201|  12.3k|    static_assert(
 1202|  12.3k|        std::disjunction_v<
 1203|  12.3k|            internal::is_supported_string_type<Element>,
 1204|  12.3k|            internal::is_supported_message_type<Element>>,
 1205|  12.3k|        "We only support string and Message types in RepeatedPtrField.");
 1206|  12.3k|    static_assert(alignof(Element) <= internal::ArenaAlignDefault::align,
 1207|  12.3k|                  "Overaligned types are not supported");
 1208|  12.3k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEEC2ENS0_8internal18InternalVisibilityENS5_22InternalMetadataOffsetE:
 1236|  12.3k|      : RepeatedPtrField(offset) {}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEEC2ENS0_8internal22InternalMetadataOffsetE:
 1627|  12.3k|    : RepeatedPtrFieldBase(offset) {
 1628|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1629|       |  // a complete type, and in split repeated fields cases, we call
 1630|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1631|  12.3k|}
_ZN6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEED2Ev:
 1653|  12.3k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1654|  12.3k|  StaticValidityCheck();
 1655|  12.3k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1655:7): [True: 3.77k, False: 8.62k]
  ------------------
 1656|  8.62k|  if constexpr (std::is_base_of_v<MessageLite, Element>) {
 1657|       |#if defined(PROTOBUF_CUSTOM_VTABLE)
 1658|       |    if constexpr (std::is_same_v<Element, MessageLite> ||
 1659|       |                  std::is_same_v<Element, Message>) {
 1660|       |      DestroyProtos();
 1661|       |    } else {
 1662|       |      DestroyMessageLites(internal::MessageTraits<Element>::class_data());
 1663|       |    }
 1664|       |#else
 1665|  8.62k|    DestroyProtos();
 1666|  8.62k|#endif
 1667|       |  } else {
 1668|       |    Destroy<TypeHandler>();
 1669|       |  }
 1670|  8.62k|}
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEE5beginEv:
 2409|  11.0k|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2410|  11.0k|  return iterator(raw_data());
 2411|  11.0k|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIN13sentencepiece24ModelProto_SentencePieceEEC2EPKPv:
 2169|  22.1k|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece24ModelProto_SentencePieceEEC2IS4_vEERKNS2_IT_EE:
 2177|  22.1k|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldIN13sentencepiece24ModelProto_SentencePieceEE3endEv:
 2424|  11.0k|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2425|  11.0k|  return iterator(raw_data() + size());
 2426|  11.0k|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKN13sentencepiece24ModelProto_SentencePieceEEES8_:
 2203|  2.14M|  friend bool operator!=(const iterator& x, const iterator& y) {
 2204|  2.14M|    return x.it_ != y.it_;
 2205|  2.14M|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece24ModelProto_SentencePieceEEppEv:
 2188|  2.13M|  iterator& operator++() {
 2189|  2.13M|    ++it_;
 2190|  2.13M|    return *this;
 2191|  2.13M|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKN13sentencepiece24ModelProto_SentencePieceEEdeEv:
 2180|  2.13M|  PROTOBUF_FUTURE_ADD_NODISCARD reference operator*() const {
 2181|  2.13M|    return *reinterpret_cast<Element*>(*it_);
 2182|  2.13M|  }
_ZZN6google8protobuf8internal18GenericTypeHandlerINS0_11MessageLiteEE23GetNewFromPrototypeFuncEPKS3_ENKUlPNS0_5ArenaERPvE_clES8_SA_:
 1086|  2.32M|        [prototype](Arena* arena, void*& ptr) { ptr = prototype->New(arena); };
_ZZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE10GetNewFuncEvENKUlPNS0_5ArenaERPvE_clESC_SE_:
 1133|   796k|    return [](Arena* arena, void*& ptr) { ptr = Arena::Create<Type>(arena); };
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7DestroyINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEvv:
  314|  8.62k|  void Destroy() {
  315|  8.62k|    ABSL_DCHECK(NeedsDestroy());
  ------------------
  |  |   47|  8.62k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  8.62k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  17.2k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  8.62k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  17.2k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  17.2k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8.62k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  8.62k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  8.62k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8.62k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  17.2k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  17.2k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|  8.62k|    ABSL_DCHECK_EQ(GetArena(), nullptr);
  ------------------
  |  |   74|  8.62k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|  8.62k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  8.62k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 8.62k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  8.62k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|       |
  318|  8.62k|    using H = CommonHandler<TypeHandler>;
  319|  8.62k|    int n = allocated_size();
  320|  8.62k|    ABSL_DCHECK_LE(n, Capacity());
  ------------------
  |  |   78|  8.62k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|  8.62k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  8.62k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 8.62k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  8.62k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|  8.62k|    void** elems = elements();
  322|  2.33M|    for (int i = 0; i < n; i++) {
  ------------------
  |  Branch (322:21): [True: 2.32M, False: 8.62k]
  ------------------
  323|  2.32M|      if (i + 5 < n) {
  ------------------
  |  Branch (323:11): [True: 2.30M, False: 25.6k]
  ------------------
  324|  2.30M|        absl::PrefetchToLocalCacheNta(elems[i + 5]);
  325|  2.30M|      }
  326|  2.32M|      Delete<H>(elems[i]);
  327|  2.32M|    }
  328|  8.62k|    if (!using_sso()) {
  ------------------
  |  Branch (328:9): [True: 6.64k, False: 1.97k]
  ------------------
  329|  6.64k|      internal::SizedDelete(rep(),
  330|  6.64k|                            Capacity() * sizeof(elems[0]) + kRepHeaderSize);
  331|  6.64k|    }
  332|  8.62k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase6DeleteINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEvPv:
  821|  2.32M|  static inline void Delete(void* obj) {
  822|  2.32M|    TypeHandler::Delete(cast<TypeHandler>(obj));
  823|  2.32M|  }
_ZN6google8protobuf8internal18GenericTypeHandlerINS0_11MessageLiteEE6DeleteEPS3_:
 1093|  2.32M|  static inline void Delete(Type* value) {
 1094|  2.32M|    static_assert(std::is_base_of_v<MessageLite, Type>);
 1095|       |    // Using virtual destructor to reduce generated code size that would have
 1096|       |    // happened otherwise due to inlined `~Type()`.
 1097|  2.32M|    InternalOutOfLineDeleteMessageLite(value);
 1098|  2.32M|  }

_ZN6google8protobuf8internal10ArenaBlockC2EPS2_m:
   43|   337k|  ArenaBlock(ArenaBlock* next, size_t size) : next(next), size(size) {
   44|   337k|    ABSL_DCHECK_GT(size, sizeof(ArenaBlock));
  ------------------
  |  |   84|   337k|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   97|   337k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   337k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 337k]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   337k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|   337k|  }
_ZN6google8protobuf8internal10ArenaBlock7PointerEm:
   47|   992k|  char* Pointer(size_t n) {
   48|   992k|    ABSL_DCHECK_LE(n, size);
  ------------------
  |  |   78|   992k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|   992k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   992k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 992k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   992k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|   992k|    return reinterpret_cast<char*>(this) + n;
   50|   992k|  }
_ZN6google8protobuf8internal10ArenaBlock5LimitEv:
   51|   337k|  char* Limit() { return Pointer(size & static_cast<size_t>(-8)); }
_ZNK6google8protobuf8internal10ArenaBlock8IsSentryEv:
   53|   337k|  bool IsSentry() const { return size == 0; }
_ZN6google8protobuf8internal11SerialArena11CleanupListEv:
   85|  20.4k|  void CleanupList() { cleanup_list_.Cleanup(*this); }
_ZNK6google8protobuf8internal11SerialArena14SpaceAllocatedEv:
   86|  20.4k|  uint64_t SpaceAllocated() const {
   87|  20.4k|    return space_allocated_.load(std::memory_order_relaxed);
   88|  20.4k|  }
_ZN6google8protobuf8internal11SerialArena26TryAllocateFromCachedBlockEm:
   92|  54.0k|  PROTOBUF_ALWAYS_INLINE void* TryAllocateFromCachedBlock(size_t size) {
   93|  54.0k|    if (ABSL_PREDICT_FALSE(size < 16)) return nullptr;
  ------------------
  |  |  190|  54.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 54.0k]
  |  |  |  Branch (190:49): [Folded, False: 54.0k]
  |  |  |  Branch (190:58): [True: 0, False: 54.0k]
  |  |  ------------------
  ------------------
   94|       |    // We round up to the next larger block in case the memory doesn't match
   95|       |    // the pattern we are looking for.
   96|  54.0k|    const size_t index = absl::bit_width(size - 1) - 4;
   97|       |
   98|  54.0k|    if (ABSL_PREDICT_FALSE(index >= cached_block_length_)) return nullptr;
  ------------------
  |  |  190|  54.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 25.2k, False: 28.7k]
  |  |  |  Branch (190:49): [Folded, False: 54.0k]
  |  |  |  Branch (190:58): [True: 25.2k, False: 28.7k]
  |  |  ------------------
  ------------------
   99|  28.7k|    auto& cached_head = cached_blocks_[index];
  100|  28.7k|    if (cached_head == nullptr) return nullptr;
  ------------------
  |  Branch (100:9): [True: 25.3k, False: 3.37k]
  ------------------
  101|       |
  102|  3.37k|    void* ret = cached_head;
  103|  3.37k|    internal::UnpoisonMemoryRegion(ret, size);
  104|  3.37k|    cached_head = cached_head->next;
  105|  3.37k|    return ret;
  106|  28.7k|  }
_ZN6google8protobuf8internal11SerialArena17ReturnArrayMemoryEPvm:
  151|  43.2k|  void ReturnArrayMemory(void* p, size_t size) {
  152|       |    // We only need to check for 32-bit platforms.
  153|       |    // In 64-bit platforms the minimum allocation size from Repeated*Field will
  154|       |    // be 16 guaranteed.
  155|  43.2k|    if (sizeof(void*) < 8) {
  ------------------
  |  Branch (155:9): [Folded, False: 43.2k]
  ------------------
  156|      0|      if (ABSL_PREDICT_FALSE(size < 16)) return;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  157|  43.2k|    } else {
  158|  43.2k|      PROTOBUF_ASSUME(size >= 16);
  ------------------
  |  |  733|  43.2k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  159|  43.2k|    }
  160|       |
  161|       |    // We round down to the next smaller block in case the memory doesn't match
  162|       |    // the pattern we are looking for. eg, someone might have called Reserve()
  163|       |    // on the repeated field.
  164|  43.2k|    const size_t index = absl::bit_width(size) - 5;
  165|       |
  166|  43.2k|    if (ABSL_PREDICT_FALSE(index >= cached_block_length_)) {
  ------------------
  |  |  190|  43.2k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 11.3k, False: 31.8k]
  |  |  |  Branch (190:49): [Folded, False: 43.2k]
  |  |  |  Branch (190:58): [True: 11.3k, False: 31.8k]
  |  |  ------------------
  ------------------
  167|       |      // We can't put this object on the freelist so make this object the
  168|       |      // freelist. It is guaranteed it is larger than the one we have, and
  169|       |      // large enough to hold another allocation of `size`.
  170|  11.3k|      CachedBlock** new_list = static_cast<CachedBlock**>(p);
  171|  11.3k|      size_t new_size = size / sizeof(CachedBlock*);
  172|       |
  173|  11.3k|      std::copy(cached_blocks_, cached_blocks_ + cached_block_length_,
  174|  11.3k|                new_list);
  175|       |
  176|       |      // We need to unpoison this memory before filling it in case it has been
  177|       |      // poisoned by another sanitizer client.
  178|  11.3k|      internal::UnpoisonMemoryRegion(
  179|  11.3k|          new_list + cached_block_length_,
  180|  11.3k|          (new_size - cached_block_length_) * sizeof(CachedBlock*));
  181|       |
  182|  11.3k|      std::fill(new_list + cached_block_length_, new_list + new_size, nullptr);
  183|       |
  184|  11.3k|      cached_blocks_ = new_list;
  185|       |      // Make the size fit in uint8_t. This is the power of two, so we don't
  186|       |      // need anything larger.
  187|  11.3k|      cached_block_length_ =
  188|  11.3k|          static_cast<uint8_t>(std::min(size_t{64}, new_size));
  189|       |
  190|  11.3k|      return;
  191|  11.3k|    }
  192|       |
  193|  31.8k|    auto& cached_head = cached_blocks_[index];
  194|  31.8k|    auto* new_node = static_cast<CachedBlock*>(p);
  195|  31.8k|    new_node->next = cached_head;
  196|  31.8k|    cached_head = new_node;
  197|  31.8k|    internal::PoisonMemoryRegion(p, size);
  198|  31.8k|  }
_ZN6google8protobuf8internal11SerialArena20MaybeAllocateAlignedEmPPv:
  201|  93.7M|  bool MaybeAllocateAligned(size_t n, void** out) {
  202|  93.7M|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|  93.7M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  93.7M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   187M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  93.7M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   187M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   187M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 93.7M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  93.7M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 93.7M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  93.7M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 93.7M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   187M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   187M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|  93.7M|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|  93.7M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  93.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  93.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 93.7M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  93.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|  93.7M|    char* ret = ptr();
  205|  93.7M|    if (ABSL_PREDICT_FALSE(limit_ - ret < static_cast<ptrdiff_t>(n))) {
  ------------------
  |  |  190|  93.7M|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 542k, False: 93.1M]
  |  |  |  Branch (190:49): [Folded, False: 93.7M]
  |  |  |  Branch (190:58): [True: 542k, False: 93.1M]
  |  |  ------------------
  ------------------
  206|   542k|      return false;
  207|   542k|    }
  208|  93.1M|    internal::UnpoisonMemoryRegion(ret, n);
  209|  93.1M|    *out = ret;
  210|  93.1M|    char* next = ret + n;
  211|  93.1M|    set_ptr(next);
  212|  93.1M|    MaybePrefetchData(next);
  213|  93.1M|    return true;
  214|  93.7M|  }
_ZN6google8protobuf8internal11SerialArena17MaybePrefetchImplElPKcS4_S4_:
  281|  93.1M|                                       const char* prefetch_ptr) {
  282|  93.1M|    if (ABSL_PREDICT_TRUE(prefetch_ptr - next > prefetch_degree))
  ------------------
  |  |  191|  93.1M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 82.0M, False: 11.0M]
  |  |  |  Branch (191:48): [Folded, False: 93.1M]
  |  |  |  Branch (191:57): [True: 82.0M, False: 11.0M]
  |  |  ------------------
  ------------------
  283|  82.0M|      return prefetch_ptr;
  284|  11.0M|    if (ABSL_PREDICT_TRUE(prefetch_ptr < limit)) {
  ------------------
  |  |  191|  11.0M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 7.16M, False: 3.93M]
  |  |  |  Branch (191:48): [Folded, False: 11.0M]
  |  |  |  Branch (191:57): [True: 7.16M, False: 3.93M]
  |  |  ------------------
  ------------------
  285|  7.16M|      prefetch_ptr = std::max(next, prefetch_ptr);
  286|  7.16M|      ABSL_DCHECK(prefetch_ptr != nullptr);
  ------------------
  |  |   47|  7.16M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  7.16M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  14.3M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  7.16M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  14.3M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  14.3M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 7.16M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  7.16M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 7.16M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  7.16M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 7.16M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  14.3M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  14.3M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|  7.16M|      const char* end = std::min(limit, prefetch_ptr + prefetch_degree);
  288|   119M|      for (; prefetch_ptr < end; prefetch_ptr += ABSL_CACHELINE_SIZE) {
  ------------------
  |  |   89|   111M|#define ABSL_CACHELINE_SIZE 64
  ------------------
  |  Branch (288:14): [True: 111M, False: 7.16M]
  ------------------
  289|   111M|        absl::PrefetchToLocalCacheForWrite(prefetch_ptr);
  290|   111M|      }
  291|  7.16M|    }
  292|  11.0M|    return prefetch_ptr;
  293|  11.0M|  }
_ZN6google8protobuf8internal11SerialArena17MaybePrefetchDataEPKc:
  295|  93.1M|  void MaybePrefetchData(const char* next) {
  296|  93.1M|    ABSL_DCHECK(static_cast<const void*>(prefetch_ptr_) == ptr() ||
  ------------------
  |  |   47|  93.1M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  93.1M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   186M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  93.1M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   186M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   186M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 93.1M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  93.1M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 93.1M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  93.1M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 93.1M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   186M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   186M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|  93.1M|                static_cast<const void*>(prefetch_ptr_) >= head());
  298|  93.1M|    prefetch_ptr_ =
  299|  93.1M|        MaybePrefetchImpl(kPrefetchDataDegree, next, limit_, prefetch_ptr_);
  300|  93.1M|  }
_ZN6google8protobuf8internal11SerialArena16FreeStringBlocksEv:
  322|  20.4k|  size_t FreeStringBlocks() {
  323|       |    // On the active block delete all strings skipping the unused instances.
  324|  20.4k|    size_t unused_bytes = string_block_unused_.load(std::memory_order_relaxed);
  325|  20.4k|    if (StringBlock* sb = string_block_.load(std::memory_order_relaxed)) {
  ------------------
  |  Branch (325:22): [True: 14.5k, False: 5.88k]
  ------------------
  326|  14.5k|      return FreeStringBlocks(sb, unused_bytes);
  327|  14.5k|    }
  328|  5.88k|    return 0;
  329|  20.4k|  }
_ZN6google8protobuf8internal11SerialArena12AddSpaceUsedEm:
  333|  1.11M|  void AddSpaceUsed(size_t space_used) {
  334|  1.11M|    space_used_.store(space_used_.load(std::memory_order_relaxed) + space_used,
  335|  1.11M|                      std::memory_order_relaxed);
  336|  1.11M|  }
_ZN6google8protobuf8internal11SerialArena17AddSpaceAllocatedEm:
  339|   542k|  void AddSpaceAllocated(size_t space_allocated) {
  340|   542k|    space_allocated_.store(
  341|   542k|        space_allocated_.load(std::memory_order_relaxed) + space_allocated,
  342|   542k|        std::memory_order_relaxed);
  343|   542k|  }
_ZN6google8protobuf8internal11SerialArena4headEv:
  346|   357k|  ArenaBlock* head() { return head_.load(std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena3ptrEv:
  351|  94.7M|  char* ptr() { return ptr_.load(std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena7set_ptrEPc:
  353|  93.5M|  void set_ptr(char* ptr) { return ptr_.store(ptr, std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena9set_rangeEPcS3_:
  354|   337k|  PROTOBUF_ALWAYS_INLINE void set_range(char* ptr, char* limit) {
  355|   337k|    set_ptr(ptr);
  356|   337k|    prefetch_ptr_ = ptr;
  357|   337k|    limit_ = limit;
  358|   337k|  }
_ZN6google8protobuf8internal11SerialArena31ArbitraryInternalPointerForInitEv:
  373|  61.2k|  static char* ArbitraryInternalPointerForInit() {
  374|       |    // Use rodata to detect potential bugs. No one should be writing here.
  375|  61.2k|    alignas(8) static constexpr char dummy{};
  376|  61.2k|    return const_cast<char*>(&dummy);
  377|  61.2k|  }
_ZN6google8protobuf8internal11SerialArena19MaybeAllocateStringERPv:
  422|   161M|PROTOBUF_ALWAYS_INLINE bool SerialArena::MaybeAllocateString(void*& p) {
  423|       |  // Check how many unused instances are in the current block.
  424|   161M|  size_t unused_bytes = string_block_unused_.load(std::memory_order_relaxed);
  425|   161M|  if (ABSL_PREDICT_TRUE(unused_bytes != 0)) {
  ------------------
  |  |  191|   161M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 160M, False: 510k]
  |  |  |  Branch (191:48): [Folded, False: 161M]
  |  |  |  Branch (191:57): [True: 160M, False: 510k]
  |  |  ------------------
  ------------------
  426|   160M|    unused_bytes -= sizeof(std::string);
  427|   160M|    string_block_unused_.store(unused_bytes, std::memory_order_relaxed);
  428|   160M|    p = string_block_.load(std::memory_order_relaxed)->AtOffset(unused_bytes);
  429|   160M|    return true;
  430|   160M|  }
  431|   510k|  return false;
  432|   161M|}
_ZN6google8protobuf8internal11SerialArena23AllocateFromStringBlockEv:
  435|   161M|SerialArena::AllocateFromStringBlock() {
  436|   161M|  void* p;
  437|   161M|  if (ABSL_PREDICT_TRUE(MaybeAllocateString(p))) return p;
  ------------------
  |  |  191|   161M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 160M, False: 510k]
  |  |  |  Branch (191:48): [Folded, False: 161M]
  |  |  |  Branch (191:57): [True: 160M, False: 510k]
  |  |  ------------------
  ------------------
  438|   510k|  return AllocateFromStringBlockFallback();
  439|   161M|}
_ZN6google8protobuf8internal11SerialArena15AllocateAlignedILNS1_16AllocationClientE1EEEPvm:
  116|  54.0k|  void* AllocateAligned(size_t n) {
  117|  54.0k|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|  54.0k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  54.0k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   108k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  54.0k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   108k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   108k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 54.0k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  54.0k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 54.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  54.0k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 54.0k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   108k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   108k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|  54.0k|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|  54.0k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  54.0k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  54.0k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 54.0k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  54.0k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|       |
  120|  54.0k|    if (alloc_client == AllocationClient::kArray) {
  ------------------
  |  Branch (120:9): [True: 54.0k, Folded]
  ------------------
  121|  54.0k|      if (void* res = TryAllocateFromCachedBlock(n)) {
  ------------------
  |  Branch (121:17): [True: 3.37k, False: 50.6k]
  ------------------
  122|  3.37k|        return res;
  123|  3.37k|      }
  124|  54.0k|    }
  125|       |
  126|  50.6k|    void* ptr;
  127|  50.6k|    if (ABSL_PREDICT_TRUE(MaybeAllocateAligned(n, &ptr))) {
  ------------------
  |  |  191|  50.6k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 38.0k, False: 12.6k]
  |  |  |  Branch (191:48): [Folded, False: 50.6k]
  |  |  |  Branch (191:57): [True: 38.0k, False: 12.6k]
  |  |  ------------------
  ------------------
  128|  38.0k|      return ptr;
  129|  38.0k|    }
  130|  12.6k|    return AllocateAlignedFallback(n);
  131|  50.6k|  }
_ZN6google8protobuf8internal11SerialArena15AllocateAlignedILNS1_16AllocationClientE0EEEPvm:
  116|  92.8M|  void* AllocateAligned(size_t n) {
  117|  92.8M|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|  92.8M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  92.8M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   185M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  92.8M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   185M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   185M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 92.8M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  92.8M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 92.8M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  92.8M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 92.8M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|   185M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|   185M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|  92.8M|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|  92.8M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  92.8M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  92.8M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 92.8M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  92.8M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|       |
  120|  92.8M|    if (alloc_client == AllocationClient::kArray) {
  ------------------
  |  Branch (120:9): [Folded, False: 92.8M]
  ------------------
  121|      0|      if (void* res = TryAllocateFromCachedBlock(n)) {
  ------------------
  |  Branch (121:17): [True: 0, False: 0]
  ------------------
  122|      0|        return res;
  123|      0|      }
  124|      0|    }
  125|       |
  126|  92.8M|    void* ptr;
  127|  92.8M|    if (ABSL_PREDICT_TRUE(MaybeAllocateAligned(n, &ptr))) {
  ------------------
  |  |  191|  92.8M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 92.4M, False: 324k]
  |  |  |  Branch (191:48): [Folded, False: 92.8M]
  |  |  |  Branch (191:57): [True: 92.4M, False: 324k]
  |  |  ------------------
  ------------------
  128|  92.4M|      return ptr;
  129|  92.4M|    }
  130|   324k|    return AllocateAlignedFallback(n);
  131|  92.8M|  }

_ZNK6google8protobuf8internal11StringBlock14allocated_sizeEv:
   74|   410k|  size_t allocated_size() const { return allocated_size_; }
_ZN6google8protobuf8internal11StringBlockC2EPS2_btt:
   94|   510k|      : next_(next),
   95|   510k|        allocated_size_(size),
   96|   510k|        next_size_(next_size),
   97|   510k|        heap_allocated_(heap_allocated) {}
_ZN6google8protobuf8internal11StringBlock8min_sizeEv:
   99|   425k|  static constexpr size_type min_size() { return size_type{256}; }
_ZN6google8protobuf8internal11StringBlock8max_sizeEv:
  100|   495k|  static constexpr size_type max_size() { return size_type{8192}; }
_ZNK6google8protobuf8internal11StringBlock9next_sizeEv:
  107|   495k|  size_t next_size() const { return next_size_; }
_ZN6google8protobuf8internal11StringBlock11RoundedSizeEt:
  115|   510k|constexpr StringBlock::size_type StringBlock::RoundedSize(size_type size) {
  116|   510k|  return size - (size - sizeof(StringBlock)) % sizeof(std::string);
  117|   510k|}
_ZN6google8protobuf8internal11StringBlock8NextSizeEPS2_:
  119|   510k|inline size_t StringBlock::NextSize(StringBlock* block) {
  120|   510k|  return block ? block->next_size() : min_size();
  ------------------
  |  Branch (120:10): [True: 495k, False: 14.5k]
  ------------------
  121|   510k|}
_ZN6google8protobuf8internal11StringBlock7EmplaceEPvmPS2_:
  123|   304k|inline StringBlock* StringBlock::Emplace(void* p, size_t n, StringBlock* next) {
  124|   304k|  const auto count = static_cast<size_type>(n);
  125|   304k|  ABSL_DCHECK_EQ(count, NextSize(next));
  ------------------
  |  |   74|   304k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   87|   304k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   304k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 304k]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   304k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|   304k|  size_type doubled = count * 2;
  127|   304k|  size_type next_size = next ? std::min(doubled, max_size()) : min_size();
  ------------------
  |  Branch (127:25): [True: 304k, False: 0]
  ------------------
  128|   304k|  return new (p) StringBlock(next, false, RoundedSize(count), next_size);
  129|   304k|}
_ZN6google8protobuf8internal11StringBlock3NewEPS2_:
  131|   205k|inline StringBlock* StringBlock::New(StringBlock* next) {
  132|       |  // Compute required size, rounding down to a multiple of sizeof(std:string)
  133|       |  // so that we can optimize the allocation path. I.e., we incur a (constant
  134|       |  // size) MOD() operation cost here to avoid any MUL() later on.
  135|   205k|  size_type size = min_size();
  136|   205k|  size_type next_size = min_size();
  137|   205k|  if (next) {
  ------------------
  |  Branch (137:7): [True: 190k, False: 14.5k]
  ------------------
  138|   190k|    size = next->next_size_;
  139|   190k|    next_size = std::min<size_type>(size * 2, max_size());
  140|   190k|  }
  141|   205k|  size = RoundedSize(size);
  142|   205k|  void* p = Allocate(size);
  143|   205k|  return new (p) StringBlock(next, true, size, next_size);
  144|   205k|}
_ZN6google8protobuf8internal11StringBlock6DeleteEPS2_:
  146|   510k|inline size_t StringBlock::Delete(StringBlock* block) {
  147|   510k|  ABSL_DCHECK(block != nullptr);
  ------------------
  |  |   47|   510k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|   510k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.02M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|   510k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.02M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.02M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 510k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   510k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 510k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   510k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 510k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  1.02M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  1.02M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|   510k|  if (!block->heap_allocated_) return size_t{0};
  ------------------
  |  Branch (148:7): [True: 304k, False: 205k]
  ------------------
  149|   205k|  size_t size = block->allocated_size();
  150|   205k|  internal::SizedDelete(block, size);
  151|   205k|  return size;
  152|   510k|}
_ZNK6google8protobuf8internal11StringBlock4nextEv:
  154|   510k|inline StringBlock* StringBlock::next() const { return next_; }
_ZNK6google8protobuf8internal11StringBlock14effective_sizeEv:
  156|  1.51M|inline size_t StringBlock::effective_size() const {
  157|  1.51M|  return allocated_size_ - sizeof(StringBlock);
  158|  1.51M|}
_ZN6google8protobuf8internal11StringBlock8AtOffsetEm:
  161|   162M|    size_t offset) {
  162|   162M|  ABSL_DCHECK_LE(offset, effective_size());
  ------------------
  |  |   78|   162M|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   91|   162M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   162M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 162M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   162M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|   162M|  return reinterpret_cast<std::string*>(reinterpret_cast<char*>(this + 1) +
  164|   162M|                                        offset);
  165|   162M|}
_ZN6google8protobuf8internal11StringBlock5beginEv:
  167|   495k|ABSL_ATTRIBUTE_RETURNS_NONNULL inline std::string* StringBlock::begin() {
  168|   495k|  return AtOffset(0);
  169|   495k|}
_ZN6google8protobuf8internal11StringBlock3endEv:
  171|   510k|ABSL_ATTRIBUTE_RETURNS_NONNULL inline std::string* StringBlock::end() {
  172|   510k|  return AtOffset(effective_size());
  173|   510k|}

_ZN6google8protobuf8internal15ThreadSafeArena17ReturnArrayMemoryEPvm:
   82|  43.2k|  void ReturnArrayMemory(void* p, size_t size) {
   83|  43.2k|    SerialArena* arena = nullptr;
   84|  43.2k|    if (ABSL_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  191|  43.2k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 43.2k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 43.2k]
  |  |  |  Branch (191:57): [True: 43.2k, False: 0]
  |  |  ------------------
  ------------------
   85|  43.2k|      arena->ReturnArrayMemory(p, size);
   86|  43.2k|    }
   87|  43.2k|  }
_ZNK6google8protobuf8internal15ThreadSafeArena11AllocPolicyEv:
  167|   337k|  const AllocationPolicy* AllocPolicy() const { return alloc_policy_.get(); }
_ZN6google8protobuf8internal15ThreadSafeArena16CacheSerialArenaEPNS1_11SerialArenaE:
  177|  20.4k|  inline void CacheSerialArena(SerialArena* serial) {
  178|  20.4k|    thread_cache().last_serial_arena = serial;
  179|  20.4k|    thread_cache().last_lifecycle_id_seen = tag_and_id_;
  180|  20.4k|  }
_ZN6google8protobuf8internal15ThreadSafeArena18GetSerialArenaFastEPPNS1_11SerialArenaE:
  182|   253M|  PROTOBUF_NDEBUG_INLINE bool GetSerialArenaFast(SerialArena** arena) {
  183|       |    // If this thread already owns a block in this arena then try to use that.
  184|       |    // This fast path optimizes the case where multiple threads allocate from
  185|       |    // the same arena.
  186|   253M|    ThreadCache* tc = &thread_cache();
  187|   253M|    if (ABSL_PREDICT_TRUE(tc->last_lifecycle_id_seen == tag_and_id_)) {
  ------------------
  |  |  191|   253M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 253M, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 253M]
  |  |  |  Branch (191:57): [True: 253M, False: 0]
  |  |  ------------------
  ------------------
  188|   253M|      *arena = tc->last_serial_arena;
  189|   253M|      return true;
  190|   253M|    }
  191|      0|    return false;
  192|   253M|  }
_ZN6google8protobuf8internal15ThreadSafeArena14GetSerialArenaEv:
  199|   161M|  SerialArena* GetSerialArena() {
  200|   161M|    SerialArena* arena;
  201|   161M|    if (ABSL_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  191|   161M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 161M, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 161M]
  |  |  |  Branch (191:57): [True: 161M, False: 0]
  |  |  ------------------
  ------------------
  202|   161M|      return arena;
  203|   161M|    }
  204|      0|    return GetSerialArenaSlow();
  205|   161M|  }
_ZN6google8protobuf8internal15ThreadSafeArena12thread_cacheEv:
  273|   254M|  static ThreadCache& thread_cache() { return thread_cache_; }
_ZN6google8protobuf8internal15ThreadSafeArena15AllocateAlignedILNS1_16AllocationClientE0EEEPvm:
   73|  92.8M|  void* AllocateAligned(size_t n) {
   74|  92.8M|    SerialArena* arena;
   75|  92.8M|    if (ABSL_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  191|  92.8M|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 92.8M, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 92.8M]
  |  |  |  Branch (191:57): [True: 92.8M, False: 0]
  |  |  ------------------
  ------------------
   76|  92.8M|      return arena->AllocateAligned<alloc_client>(n);
   77|  92.8M|    } else {
   78|      0|      return AllocateAlignedFallback<alloc_client>(n);
   79|      0|    }
   80|  92.8M|  }
_ZN6google8protobuf8internal15ThreadSafeArena15AllocateAlignedILNS1_16AllocationClientE1EEEPvm:
   73|  54.0k|  void* AllocateAligned(size_t n) {
   74|  54.0k|    SerialArena* arena;
   75|  54.0k|    if (ABSL_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  191|  54.0k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 54.0k, False: 0]
  |  |  |  Branch (191:48): [Folded, False: 54.0k]
  |  |  |  Branch (191:57): [True: 54.0k, False: 0]
  |  |  ------------------
  ------------------
   76|  54.0k|      return arena->AllocateAligned<alloc_client>(n);
   77|  54.0k|    } else {
   78|      0|      return AllocateAlignedFallback<alloc_client>(n);
   79|      0|    }
   80|  54.0k|  }

_ZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_Rl:
   55|  8.89k|ShiftMixParseVarint(const char* p, int64_t& res1) {
   56|  8.89k|  using Signed = std::make_signed_t<VarintType>;
   57|  8.89k|  constexpr bool kIs64BitVarint = std::is_same_v<Signed, int64_t>;
   58|  8.89k|  constexpr bool kIs32BitVarint = std::is_same_v<Signed, int32_t>;
   59|  8.89k|  static_assert(kIs64BitVarint || kIs32BitVarint, "");
   60|       |
   61|       |  // The algorithm relies on sign extension for each byte to set all high bits
   62|       |  // when the varint continues. It also relies on asserting all of the lower
   63|       |  // bits for each successive byte read. This allows the result to be aggregated
   64|       |  // using a bitwise AND. For example:
   65|       |  //
   66|       |  //          8       1          64     57 ... 24     17  16      9  8       1
   67|       |  // ptr[0] = 1aaa aaaa ; res1 = 1111 1111 ... 1111 1111  1111 1111  1aaa aaaa
   68|       |  // ptr[1] = 1bbb bbbb ; res2 = 1111 1111 ... 1111 1111  11bb bbbb  b111 1111
   69|       |  // ptr[2] = 0ccc cccc ; res3 = 0000 0000 ... 000c cccc  cc11 1111  1111 1111
   70|       |  //                             ---------------------------------------------
   71|       |  //        res1 & res2 & res3 = 0000 0000 ... 000c cccc  ccbb bbbb  baaa aaaa
   72|       |  //
   73|       |  // On x86-64, a shld from a single register filled with enough 1s in the high
   74|       |  // bits can accomplish all this in one instruction. It so happens that res1
   75|       |  // has 57 high bits of ones, which is enough for the largest shift done.
   76|       |  //
   77|       |  // Just as importantly, by keeping results in res1, res2, and res3, we take
   78|       |  // advantage of the superscalar abilities of the CPU.
   79|  8.89k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
   80|  8.89k|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
   81|       |
   82|  8.89k|  int64_t res2, res3;  // accumulated result chunks
   83|  8.89k|  res1 = next();
   84|  8.89k|  if (ABSL_PREDICT_TRUE(res1 >= 0)) return p;
  ------------------
  |  |  191|  8.89k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 5.19k, False: 3.69k]
  |  |  |  Branch (191:48): [Folded, False: 8.89k]
  |  |  |  Branch (191:57): [True: 5.19k, False: 3.69k]
  |  |  ------------------
  ------------------
   85|  3.69k|  if (limit <= 1) goto limit0;
  ------------------
  |  Branch (85:7): [Folded, False: 3.69k]
  ------------------
   86|       |
   87|       |  // Densify all ops with explicit FALSE predictions from here on, except that
   88|       |  // we predict length = 5 as a common length for fields like timestamp.
   89|  3.69k|  if (ABSL_PREDICT_FALSE(VarintShl<1>(next(), res1, res2))) goto done1;
  ------------------
  |  |  190|  3.69k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.03k, False: 2.65k]
  |  |  |  Branch (190:49): [Folded, False: 3.69k]
  |  |  |  Branch (190:58): [True: 1.03k, False: 2.65k]
  |  |  ------------------
  ------------------
   90|  2.65k|  if (limit <= 2) goto limit1;
  ------------------
  |  Branch (90:7): [Folded, False: 2.65k]
  ------------------
   91|  2.65k|  if (ABSL_PREDICT_FALSE(VarintShl<2>(next(), res1, res3))) goto done2;
  ------------------
  |  |  190|  2.65k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 428, False: 2.23k]
  |  |  |  Branch (190:49): [Folded, False: 2.65k]
  |  |  |  Branch (190:58): [True: 428, False: 2.23k]
  |  |  ------------------
  ------------------
   92|  2.23k|  if (limit <= 3) goto limit2;
  ------------------
  |  Branch (92:7): [Folded, False: 2.23k]
  ------------------
   93|  2.23k|  if (ABSL_PREDICT_FALSE(VarintShlAnd<3>(next(), res1, res2))) goto done2;
  ------------------
  |  |  190|  2.23k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 269, False: 1.96k]
  |  |  |  Branch (190:49): [Folded, False: 2.23k]
  |  |  |  Branch (190:58): [True: 269, False: 1.96k]
  |  |  ------------------
  ------------------
   94|  1.96k|  if (limit <= 4) goto limit2;
  ------------------
  |  Branch (94:7): [Folded, False: 1.96k]
  ------------------
   95|  1.96k|  if (ABSL_PREDICT_TRUE(VarintShlAnd<4>(next(), res1, res3))) goto done2;
  ------------------
  |  |  191|  1.96k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 259, False: 1.70k]
  |  |  |  Branch (191:48): [Folded, False: 1.96k]
  |  |  |  Branch (191:57): [True: 259, False: 1.70k]
  |  |  ------------------
  ------------------
   96|  1.70k|  if (limit <= 5) goto limit2;
  ------------------
  |  Branch (96:7): [Folded, False: 1.70k]
  ------------------
   97|       |
   98|  1.70k|  if (kIs64BitVarint) {
  ------------------
  |  Branch (98:7): [Folded, False: 1.70k]
  ------------------
   99|      0|    if (ABSL_PREDICT_FALSE(VarintShlAnd<5>(next(), res1, res2))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  100|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (100:9): [Folded, False: 0]
  ------------------
  101|      0|    if (ABSL_PREDICT_FALSE(VarintShlAnd<6>(next(), res1, res3))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  102|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (102:9): [Folded, False: 0]
  ------------------
  103|      0|    if (ABSL_PREDICT_FALSE(VarintShlAnd<7>(next(), res1, res2))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  104|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (104:9): [Folded, False: 0]
  ------------------
  105|      0|    if (ABSL_PREDICT_FALSE(VarintShlAnd<8>(next(), res1, res3))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  106|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (106:9): [Folded, False: 0]
  ------------------
  107|  1.70k|  } else {
  108|       |    // An overlong int32 is expected to span the full 10 bytes
  109|  1.70k|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|  1.70k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 253, False: 1.45k]
  |  |  |  Branch (190:49): [Folded, False: 1.70k]
  |  |  |  Branch (190:58): [True: 253, False: 1.45k]
  |  |  ------------------
  ------------------
  110|  1.45k|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (110:9): [Folded, False: 1.45k]
  ------------------
  111|  1.45k|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|  1.45k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 489, False: 961]
  |  |  |  Branch (190:49): [Folded, False: 1.45k]
  |  |  |  Branch (190:58): [True: 489, False: 961]
  |  |  ------------------
  ------------------
  112|    961|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (112:9): [Folded, False: 961]
  ------------------
  113|    961|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|    961|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 230, False: 731]
  |  |  |  Branch (190:49): [Folded, False: 961]
  |  |  |  Branch (190:58): [True: 230, False: 731]
  |  |  ------------------
  ------------------
  114|    731|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (114:9): [Folded, False: 731]
  ------------------
  115|    731|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|    731|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 260, False: 471]
  |  |  |  Branch (190:49): [Folded, False: 731]
  |  |  |  Branch (190:58): [True: 260, False: 471]
  |  |  ------------------
  ------------------
  116|    471|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (116:9): [Folded, False: 471]
  ------------------
  117|    471|  }
  118|       |
  119|       |  // For valid 64bit varints, the 10th byte/ptr[9] should be exactly 1. In this
  120|       |  // case, the continuation bit of ptr[8] already set the top bit of res3
  121|       |  // correctly, so all we have to do is check that the expected case is true.
  122|    471|  if (ABSL_PREDICT_TRUE(next() == 1)) goto done2;
  ------------------
  |  |  191|    471|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 215, False: 256]
  |  |  |  Branch (191:48): [Folded, False: 471]
  |  |  |  Branch (191:57): [True: 215, False: 256]
  |  |  ------------------
  ------------------
  123|       |
  124|    256|  if (ABSL_PREDICT_FALSE(last() & 0x80)) {
  ------------------
  |  |  190|    256|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 9, False: 247]
  |  |  |  Branch (190:49): [Folded, False: 256]
  |  |  |  Branch (190:58): [True: 9, False: 247]
  |  |  ------------------
  ------------------
  125|       |    // If the continue bit is set, it is an unterminated varint.
  126|      9|    return nullptr;
  127|      9|  }
  128|       |
  129|       |  // A zero value of the first bit of the 10th byte represents an
  130|       |  // over-serialized varint. This case should not happen, but if does (say, due
  131|       |  // to a nonconforming serializer), deassert the continuation bit that came
  132|       |  // from ptr[8].
  133|    247|  if (kIs64BitVarint && (last() & 1) == 0) {
  ------------------
  |  Branch (133:7): [Folded, False: 247]
  |  Branch (133:25): [True: 0, False: 0]
  ------------------
  134|      0|    static constexpr int bits = 64 - 1;
  135|      0|#if defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(__x86_64__)
  136|       |    // Use a small instruction since this is an uncommon code path.
  137|      0|    asm("btc %[bits], %[res3]" : [res3] "+r"(res3) : [bits] "i"(bits));
  138|       |#else
  139|       |    res3 ^= int64_t{1} << bits;
  140|       |#endif
  141|      0|  }
  142|       |
  143|  2.65k|done2:
  144|  2.65k|  res2 &= res3;
  145|  3.68k|done1:
  146|  3.68k|  res1 &= res2;
  147|  3.68k|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  733|  3.68k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  148|  3.68k|  return p;
  149|      0|limit2:
  150|      0|  res2 &= res3;
  151|      0|limit1:
  152|      0|  res1 &= res2;
  153|      0|limit0:
  154|      0|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  733|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  155|      0|  PROTOBUF_ASSUME(res1 < 0);
  ------------------
  |  |  733|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  156|      0|  return p;
  157|      0|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_RlENKUlvE_clEv:
   79|  24.7k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
_ZN6google8protobuf8internal9VarintShlILi1EEEbalRl:
   48|  37.5k|    int8_t byte, int64_t ones, int64_t& res) {
   49|  37.5k|  res = VarintShlByte<n>(byte, ones);
   50|  37.5k|  return res >= 0;
   51|  37.5k|}
_ZN6google8protobuf8internal13VarintShlByteILi1EEElal:
   28|  37.5k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  37.5k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  37.5k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  37.5k|}
_ZN6google8protobuf8internal9VarintShlILi2EEEbalRl:
   48|  32.2k|    int8_t byte, int64_t ones, int64_t& res) {
   49|  32.2k|  res = VarintShlByte<n>(byte, ones);
   50|  32.2k|  return res >= 0;
   51|  32.2k|}
_ZN6google8protobuf8internal13VarintShlByteILi2EEElal:
   28|  32.2k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  32.2k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  32.2k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  32.2k|}
_ZN6google8protobuf8internal12VarintShlAndILi3EEEbalRl:
   38|  28.6k|    int8_t byte, int64_t ones, int64_t& res) {
   39|  28.6k|  res &= VarintShlByte<n>(byte, ones);
   40|  28.6k|  return res >= 0;
   41|  28.6k|}
_ZN6google8protobuf8internal13VarintShlByteILi3EEElal:
   28|  28.6k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  28.6k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  28.6k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  28.6k|}
_ZN6google8protobuf8internal12VarintShlAndILi4EEEbalRl:
   38|  23.6k|    int8_t byte, int64_t ones, int64_t& res) {
   39|  23.6k|  res &= VarintShlByte<n>(byte, ones);
   40|  23.6k|  return res >= 0;
   41|  23.6k|}
_ZN6google8protobuf8internal13VarintShlByteILi4EEElal:
   28|  23.6k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  23.6k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  23.6k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  23.6k|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_RlENKUlvE0_clEv:
   80|    256|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
_ZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_Rl:
   55|  65.8k|ShiftMixParseVarint(const char* p, int64_t& res1) {
   56|  65.8k|  using Signed = std::make_signed_t<VarintType>;
   57|  65.8k|  constexpr bool kIs64BitVarint = std::is_same_v<Signed, int64_t>;
   58|  65.8k|  constexpr bool kIs32BitVarint = std::is_same_v<Signed, int32_t>;
   59|  65.8k|  static_assert(kIs64BitVarint || kIs32BitVarint, "");
   60|       |
   61|       |  // The algorithm relies on sign extension for each byte to set all high bits
   62|       |  // when the varint continues. It also relies on asserting all of the lower
   63|       |  // bits for each successive byte read. This allows the result to be aggregated
   64|       |  // using a bitwise AND. For example:
   65|       |  //
   66|       |  //          8       1          64     57 ... 24     17  16      9  8       1
   67|       |  // ptr[0] = 1aaa aaaa ; res1 = 1111 1111 ... 1111 1111  1111 1111  1aaa aaaa
   68|       |  // ptr[1] = 1bbb bbbb ; res2 = 1111 1111 ... 1111 1111  11bb bbbb  b111 1111
   69|       |  // ptr[2] = 0ccc cccc ; res3 = 0000 0000 ... 000c cccc  cc11 1111  1111 1111
   70|       |  //                             ---------------------------------------------
   71|       |  //        res1 & res2 & res3 = 0000 0000 ... 000c cccc  ccbb bbbb  baaa aaaa
   72|       |  //
   73|       |  // On x86-64, a shld from a single register filled with enough 1s in the high
   74|       |  // bits can accomplish all this in one instruction. It so happens that res1
   75|       |  // has 57 high bits of ones, which is enough for the largest shift done.
   76|       |  //
   77|       |  // Just as importantly, by keeping results in res1, res2, and res3, we take
   78|       |  // advantage of the superscalar abilities of the CPU.
   79|  65.8k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
   80|  65.8k|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
   81|       |
   82|  65.8k|  int64_t res2, res3;  // accumulated result chunks
   83|  65.8k|  res1 = next();
   84|  65.8k|  if (ABSL_PREDICT_TRUE(res1 >= 0)) return p;
  ------------------
  |  |  191|  65.8k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 32.0k, False: 33.8k]
  |  |  |  Branch (191:48): [Folded, False: 65.8k]
  |  |  |  Branch (191:57): [True: 32.0k, False: 33.8k]
  |  |  ------------------
  ------------------
   85|  33.8k|  if (limit <= 1) goto limit0;
  ------------------
  |  Branch (85:7): [Folded, False: 33.8k]
  ------------------
   86|       |
   87|       |  // Densify all ops with explicit FALSE predictions from here on, except that
   88|       |  // we predict length = 5 as a common length for fields like timestamp.
   89|  33.8k|  if (ABSL_PREDICT_FALSE(VarintShl<1>(next(), res1, res2))) goto done1;
  ------------------
  |  |  190|  33.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 4.19k, False: 29.6k]
  |  |  |  Branch (190:49): [Folded, False: 33.8k]
  |  |  |  Branch (190:58): [True: 4.19k, False: 29.6k]
  |  |  ------------------
  ------------------
   90|  29.6k|  if (limit <= 2) goto limit1;
  ------------------
  |  Branch (90:7): [Folded, False: 29.6k]
  ------------------
   91|  29.6k|  if (ABSL_PREDICT_FALSE(VarintShl<2>(next(), res1, res3))) goto done2;
  ------------------
  |  |  190|  29.6k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 3.20k, False: 26.4k]
  |  |  |  Branch (190:49): [Folded, False: 29.6k]
  |  |  |  Branch (190:58): [True: 3.20k, False: 26.4k]
  |  |  ------------------
  ------------------
   92|  26.4k|  if (limit <= 3) goto limit2;
  ------------------
  |  Branch (92:7): [Folded, False: 26.4k]
  ------------------
   93|  26.4k|  if (ABSL_PREDICT_FALSE(VarintShlAnd<3>(next(), res1, res2))) goto done2;
  ------------------
  |  |  190|  26.4k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 4.71k, False: 21.6k]
  |  |  |  Branch (190:49): [Folded, False: 26.4k]
  |  |  |  Branch (190:58): [True: 4.71k, False: 21.6k]
  |  |  ------------------
  ------------------
   94|  21.6k|  if (limit <= 4) goto limit2;
  ------------------
  |  Branch (94:7): [Folded, False: 21.6k]
  ------------------
   95|  21.6k|  if (ABSL_PREDICT_TRUE(VarintShlAnd<4>(next(), res1, res3))) goto done2;
  ------------------
  |  |  191|  21.6k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 7.80k, False: 13.8k]
  |  |  |  Branch (191:48): [Folded, False: 21.6k]
  |  |  |  Branch (191:57): [True: 7.80k, False: 13.8k]
  |  |  ------------------
  ------------------
   96|  13.8k|  if (limit <= 5) goto limit2;
  ------------------
  |  Branch (96:7): [Folded, False: 13.8k]
  ------------------
   97|       |
   98|  13.8k|  if (kIs64BitVarint) {
  ------------------
  |  Branch (98:7): [True: 13.8k, Folded]
  ------------------
   99|  13.8k|    if (ABSL_PREDICT_FALSE(VarintShlAnd<5>(next(), res1, res2))) goto done2;
  ------------------
  |  |  190|  13.8k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 3.80k, False: 10.0k]
  |  |  |  Branch (190:49): [Folded, False: 13.8k]
  |  |  |  Branch (190:58): [True: 3.80k, False: 10.0k]
  |  |  ------------------
  ------------------
  100|  10.0k|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (100:9): [Folded, False: 10.0k]
  ------------------
  101|  10.0k|    if (ABSL_PREDICT_FALSE(VarintShlAnd<6>(next(), res1, res3))) goto done2;
  ------------------
  |  |  190|  10.0k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.12k, False: 7.96k]
  |  |  |  Branch (190:49): [Folded, False: 10.0k]
  |  |  |  Branch (190:58): [True: 2.12k, False: 7.96k]
  |  |  ------------------
  ------------------
  102|  7.96k|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (102:9): [Folded, False: 7.96k]
  ------------------
  103|  7.96k|    if (ABSL_PREDICT_FALSE(VarintShlAnd<7>(next(), res1, res2))) goto done2;
  ------------------
  |  |  190|  7.96k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.91k, False: 5.05k]
  |  |  |  Branch (190:49): [Folded, False: 7.96k]
  |  |  |  Branch (190:58): [True: 2.91k, False: 5.05k]
  |  |  ------------------
  ------------------
  104|  5.05k|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (104:9): [Folded, False: 5.05k]
  ------------------
  105|  5.05k|    if (ABSL_PREDICT_FALSE(VarintShlAnd<8>(next(), res1, res3))) goto done2;
  ------------------
  |  |  190|  5.05k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 1.25k, False: 3.80k]
  |  |  |  Branch (190:49): [Folded, False: 5.05k]
  |  |  |  Branch (190:58): [True: 1.25k, False: 3.80k]
  |  |  ------------------
  ------------------
  106|  3.80k|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (106:9): [Folded, False: 3.80k]
  ------------------
  107|  3.80k|  } else {
  108|       |    // An overlong int32 is expected to span the full 10 bytes
  109|      0|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  110|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (110:9): [Folded, False: 0]
  ------------------
  111|      0|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  112|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (112:9): [Folded, False: 0]
  ------------------
  113|      0|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (114:9): [Folded, False: 0]
  ------------------
  115|      0|    if (ABSL_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  190|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  Branch (190:49): [Folded, False: 0]
  |  |  |  Branch (190:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  116|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (116:9): [Folded, False: 0]
  ------------------
  117|      0|  }
  118|       |
  119|       |  // For valid 64bit varints, the 10th byte/ptr[9] should be exactly 1. In this
  120|       |  // case, the continuation bit of ptr[8] already set the top bit of res3
  121|       |  // correctly, so all we have to do is check that the expected case is true.
  122|  3.80k|  if (ABSL_PREDICT_TRUE(next() == 1)) goto done2;
  ------------------
  |  |  191|  3.80k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (191:30): [True: 1.10k, False: 2.69k]
  |  |  |  Branch (191:48): [Folded, False: 3.80k]
  |  |  |  Branch (191:57): [True: 1.10k, False: 2.69k]
  |  |  ------------------
  ------------------
  123|       |
  124|  2.69k|  if (ABSL_PREDICT_FALSE(last() & 0x80)) {
  ------------------
  |  |  190|  2.69k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 36, False: 2.66k]
  |  |  |  Branch (190:49): [Folded, False: 2.69k]
  |  |  |  Branch (190:58): [True: 36, False: 2.66k]
  |  |  ------------------
  ------------------
  125|       |    // If the continue bit is set, it is an unterminated varint.
  126|     36|    return nullptr;
  127|     36|  }
  128|       |
  129|       |  // A zero value of the first bit of the 10th byte represents an
  130|       |  // over-serialized varint. This case should not happen, but if does (say, due
  131|       |  // to a nonconforming serializer), deassert the continuation bit that came
  132|       |  // from ptr[8].
  133|  2.66k|  if (kIs64BitVarint && (last() & 1) == 0) {
  ------------------
  |  Branch (133:7): [True: 2.66k, Folded]
  |  Branch (133:25): [True: 1.97k, False: 688]
  ------------------
  134|  1.97k|    static constexpr int bits = 64 - 1;
  135|  1.97k|#if defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(__x86_64__)
  136|       |    // Use a small instruction since this is an uncommon code path.
  137|  1.97k|    asm("btc %[bits], %[res3]" : [res3] "+r"(res3) : [bits] "i"(bits));
  138|       |#else
  139|       |    res3 ^= int64_t{1} << bits;
  140|       |#endif
  141|  1.97k|  }
  142|       |
  143|  29.5k|done2:
  144|  29.5k|  res2 &= res3;
  145|  33.7k|done1:
  146|  33.7k|  res1 &= res2;
  147|  33.7k|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  733|  33.7k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  148|  33.7k|  return p;
  149|      0|limit2:
  150|      0|  res2 &= res3;
  151|      0|limit1:
  152|      0|  res1 &= res2;
  153|      0|limit0:
  154|      0|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  733|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  155|      0|  PROTOBUF_ASSUME(res1 < 0);
  ------------------
  |  |  733|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  156|      0|  return p;
  157|      0|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_RlENKUlvE_clEv:
   79|   218k|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
_ZN6google8protobuf8internal12VarintShlAndILi5EEEbalRl:
   38|  13.8k|    int8_t byte, int64_t ones, int64_t& res) {
   39|  13.8k|  res &= VarintShlByte<n>(byte, ones);
   40|  13.8k|  return res >= 0;
   41|  13.8k|}
_ZN6google8protobuf8internal13VarintShlByteILi5EEElal:
   28|  13.8k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  13.8k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  13.8k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  13.8k|}
_ZN6google8protobuf8internal12VarintShlAndILi6EEEbalRl:
   38|  10.0k|    int8_t byte, int64_t ones, int64_t& res) {
   39|  10.0k|  res &= VarintShlByte<n>(byte, ones);
   40|  10.0k|  return res >= 0;
   41|  10.0k|}
_ZN6google8protobuf8internal13VarintShlByteILi6EEElal:
   28|  10.0k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  10.0k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  10.0k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  10.0k|}
_ZN6google8protobuf8internal12VarintShlAndILi7EEEbalRl:
   38|  7.96k|    int8_t byte, int64_t ones, int64_t& res) {
   39|  7.96k|  res &= VarintShlByte<n>(byte, ones);
   40|  7.96k|  return res >= 0;
   41|  7.96k|}
_ZN6google8protobuf8internal13VarintShlByteILi7EEElal:
   28|  7.96k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  7.96k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  7.96k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  7.96k|}
_ZN6google8protobuf8internal12VarintShlAndILi8EEEbalRl:
   38|  5.05k|    int8_t byte, int64_t ones, int64_t& res) {
   39|  5.05k|  res &= VarintShlByte<n>(byte, ones);
   40|  5.05k|  return res >= 0;
   41|  5.05k|}
_ZN6google8protobuf8internal13VarintShlByteILi8EEElal:
   28|  5.05k|VarintShlByte(int8_t byte, int64_t ones) {
   29|  5.05k|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   30|  5.05k|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   31|  5.05k|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_RlENKUlvE0_clEv:
   80|  5.35k|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };

_ZN6google8protobuf8internal14WireFormatLite20InternalWriteMessageEiRKNS0_11MessageLiteEiPhPNS0_2io19EpsCopyOutputStreamE:
  512|   117k|                                              io::EpsCopyOutputStream* stream) {
  513|   117k|  target = stream->EnsureSpace(target);
  514|   117k|  target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target);
  515|   117k|  target = io::CodedOutputStream::WriteVarint32ToArray(
  516|   117k|      static_cast<uint32_t>(cached_size), target);
  517|   117k|  return value._InternalSerialize(target, stream);
  518|   117k|}

_ZN6google8protobuf8internal14WireFormatLite7MakeTagEiNS2_8WireTypeE:
  753|   309k|                                                  WireType type) {
  754|   309k|  return GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(field_number, type);
  ------------------
  |  |  225|   309k|  static_cast<uint32_t>((static_cast<uint32_t>(FIELD_NUMBER) << 3) | (TYPE))
  ------------------
  755|   309k|}
_ZN6google8protobuf8internal14WireFormatLite11EncodeFloatEf:
  777|   106k|inline uint32_t WireFormatLite::EncodeFloat(float value) {
  778|   106k|  return absl::bit_cast<uint32_t>(value);
  779|   106k|}
_ZN6google8protobuf8internal14WireFormatLite15WriteTagToArrayEiNS2_8WireTypeEPh:
 1297|   309k|                                                uint8_t* target) {
 1298|   309k|  return io::CodedOutputStream::WriteTagToArray(MakeTag(field_number, type),
 1299|   309k|                                                target);
 1300|   309k|}
_ZN6google8protobuf8internal14WireFormatLite22WriteInt32NoTagToArrayEiPh:
 1303|  1.53k|                                                       uint8_t* target) {
 1304|  1.53k|  return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target);
 1305|  1.53k|}
_ZN6google8protobuf8internal14WireFormatLite23WriteUInt64NoTagToArrayEmPh:
 1316|    242|                                                        uint8_t* target) {
 1317|    242|  return io::CodedOutputStream::WriteVarint64ToArray(value, target);
 1318|    242|}
_ZN6google8protobuf8internal14WireFormatLite22WriteFloatNoTagToArrayEfPh:
 1348|   106k|                                                       uint8_t* target) {
 1349|   106k|  return io::CodedOutputStream::WriteLittleEndian32ToArray(EncodeFloat(value),
 1350|   106k|                                                           target);
 1351|   106k|}
_ZN6google8protobuf8internal14WireFormatLite21WriteBoolNoTagToArrayEbPh:
 1358|    588|                                                      uint8_t* target) {
 1359|    588|  return io::CodedOutputStream::WriteVarint32ToArray(value ? 1 : 0, target);
  ------------------
  |  Branch (1359:54): [True: 510, False: 78]
  ------------------
 1360|    588|}
_ZN6google8protobuf8internal14WireFormatLite21WriteEnumNoTagToArrayEiPh:
 1362|  83.8k|                                                      uint8_t* target) {
 1363|  83.8k|  return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target);
 1364|  83.8k|}
_ZN6google8protobuf8internal14WireFormatLite17WriteInt32ToArrayEiiPh:
 1403|  1.53k|                                                  uint8_t* target) {
 1404|  1.53k|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1405|  1.53k|  return WriteInt32NoTagToArray(value, target);
 1406|  1.53k|}
_ZN6google8protobuf8internal14WireFormatLite18WriteUInt64ToArrayEimPh:
 1421|    242|                                                   uint8_t* target) {
 1422|    242|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1423|    242|  return WriteUInt64NoTagToArray(value, target);
 1424|    242|}
_ZN6google8protobuf8internal14WireFormatLite17WriteFloatToArrayEifPh:
 1462|   106k|                                                  uint8_t* target) {
 1463|   106k|  target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target);
 1464|   106k|  return WriteFloatNoTagToArray(value, target);
 1465|   106k|}
_ZN6google8protobuf8internal14WireFormatLite16WriteBoolToArrayEibPh:
 1473|    588|                                                 uint8_t* target) {
 1474|    588|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1475|    588|  return WriteBoolNoTagToArray(value, target);
 1476|    588|}
_ZN6google8protobuf8internal14WireFormatLite16WriteEnumToArrayEiiPh:
 1478|  83.8k|                                                 uint8_t* target) {
 1479|  83.8k|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1480|  83.8k|  return WriteEnumNoTagToArray(value, target);
 1481|  83.8k|}
_ZN6google8protobuf8internal14WireFormatLite9Int32SizeEi:
 1546|    355|inline size_t WireFormatLite::Int32Size(int32_t value) {
 1547|    355|  return io::CodedOutputStream::VarintSize32SignExtended(value);
 1548|    355|}
_ZN6google8protobuf8internal14WireFormatLite10UInt64SizeEm:
 1555|     93|inline size_t WireFormatLite::UInt64Size(uint64_t value) {
 1556|     93|  return io::CodedOutputStream::VarintSize64(value);
 1557|     93|}
_ZN6google8protobuf8internal14WireFormatLite8EnumSizeEi:
 1564|  83.8k|inline size_t WireFormatLite::EnumSize(int value) {
 1565|  83.8k|  return io::CodedOutputStream::VarintSize32SignExtended(value);
 1566|  83.8k|}
_ZN6google8protobuf8internal14WireFormatLite16Int32SizePlusOneEi:
 1567|  1.17k|inline size_t WireFormatLite::Int32SizePlusOne(int32_t value) {
 1568|  1.17k|  return io::CodedOutputStream::VarintSize32SignExtendedPlusOne(value);
 1569|  1.17k|}
_ZN6google8protobuf8internal14WireFormatLite17UInt64SizePlusOneEm:
 1577|    149|inline size_t WireFormatLite::UInt64SizePlusOne(uint64_t value) {
 1578|    149|  return io::CodedOutputStream::VarintSize64PlusOne(value);
 1579|    149|}
_ZN6google8protobuf8internal14WireFormatLite10StringSizeERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
 1590|   119k|inline size_t WireFormatLite::StringSize(const std::string& value) {
 1591|   119k|  return LengthDelimitedSize(value.size());
 1592|   119k|}
_ZN6google8protobuf8internal14WireFormatLite9BytesSizeERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
 1593|     13|inline size_t WireFormatLite::BytesSize(const std::string& value) {
 1594|     13|  return StringSize(value);
 1595|     13|}
_ZN6google8protobuf8internal14WireFormatLite19LengthDelimitedSizeEm:
 1624|   236k|inline size_t WireFormatLite::LengthDelimitedSize(size_t length) {
 1625|       |  // The static_cast here prevents an error in certain compiler configurations
 1626|       |  // but is not technically correct--if length is too large to fit in a uint32_t
 1627|       |  // then it will be silently truncated. We will need to fix this if we ever
 1628|       |  // decide to start supporting serialized messages greater than 2 GiB in size.
 1629|   236k|  return length +
 1630|   236k|         io::CodedOutputStream::VarintSize32(static_cast<uint32_t>(length));
 1631|   236k|}
_ZN6google8protobuf8internal14WireFormatLite26WriteInt32ToArrayWithFieldILi4EEEPhPNS0_2io19EpsCopyOutputStreamEiS4_:
  494|    500|                             int32_t value, uint8_t* target) {
  495|    500|    target = stream->EnsureSpace(target);
  496|    500|    return WriteInt32ToArray(field_number, value, target);
  497|    500|  }
_ZN6google8protobuf8internal14WireFormatLite26WriteInt32ToArrayWithFieldILi6EEEPhPNS0_2io19EpsCopyOutputStreamEiS4_:
  494|    119|                             int32_t value, uint8_t* target) {
  495|    119|    target = stream->EnsureSpace(target);
  496|    119|    return WriteInt32ToArray(field_number, value, target);
  497|    119|  }
_ZN6google8protobuf8internal14WireFormatLite26WriteInt32ToArrayWithFieldILi12EEEPhPNS0_2io19EpsCopyOutputStreamEiS4_:
  494|    426|                             int32_t value, uint8_t* target) {
  495|    426|    target = stream->EnsureSpace(target);
  496|    426|    return WriteInt32ToArray(field_number, value, target);
  497|    426|  }
_ZN6google8protobuf8internal14WireFormatLite26WriteInt32ToArrayWithFieldILi13EEEPhPNS0_2io19EpsCopyOutputStreamEiS4_:
  494|     70|                             int32_t value, uint8_t* target) {
  495|     70|    target = stream->EnsureSpace(target);
  496|     70|    return WriteInt32ToArray(field_number, value, target);
  497|     70|  }
_ZN6google8protobuf8internal14WireFormatLite26WriteInt32ToArrayWithFieldILi14EEEPhPNS0_2io19EpsCopyOutputStreamEiS4_:
  494|     63|                             int32_t value, uint8_t* target) {
  495|     63|    target = stream->EnsureSpace(target);
  496|     63|    return WriteInt32ToArray(field_number, value, target);
  497|     63|  }
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeIN13sentencepiece24ModelProto_SentencePieceEEEmRKT_:
 1620|   112k|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1621|   112k|  return LengthDelimitedSize(value.ByteSizeLong());
 1622|   112k|}
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeIN13sentencepiece11TrainerSpecEEEmRKT_:
 1620|  3.92k|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1621|  3.92k|  return LengthDelimitedSize(value.ByteSizeLong());
 1622|  3.92k|}
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeIN13sentencepiece14NormalizerSpecEEEmRKT_:
 1620|    395|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1621|    395|  return LengthDelimitedSize(value.ByteSizeLong());
 1622|    395|}

_ZNK4absl12lts_202608176Status2okEv:
 1010|  44.1M|inline bool Status::ok() const {
 1011|  44.1M|  return rep_ == CodeToInlinedRep(absl::StatusCode::kOk);
 1012|  44.1M|}
_ZN4absl12lts_202608176Status16CodeToInlinedRepENS0_10StatusCodeE:
 1093|   131M|constexpr uintptr_t Status::CodeToInlinedRep(absl::StatusCode code) {
 1094|   131M|  return (static_cast<uintptr_t>(code) << 2) + 1;
 1095|   131M|}
_ZN4absl12lts_202608176StatusD2Ev:
 1008|  44.1M|inline Status::~Status() { Unref(rep_); }
_ZN4absl12lts_202608176Status5UnrefEm:
 1121|  44.1M|inline void Status::Unref(uintptr_t rep) {
 1122|  44.1M|  if (!IsInlined(rep)) RepToPointer(rep)->Unref();
  ------------------
  |  Branch (1122:7): [True: 13.2k, False: 44.1M]
  ------------------
 1123|  44.1M|}
_ZN4absl12lts_202608176Status9IsInlinedEm:
 1089|  45.0M|constexpr bool Status::IsInlined(uintptr_t rep) { return (rep & 1) != 0; }
_ZN4absl12lts_202608176Status12RepToPointerEm:
 1107|  33.1k|    uintptr_t rep) {
 1108|  33.1k|  assert(!IsInlined(rep));
  ------------------
  |  Branch (1108:3): [True: 11.4k, False: 21.6k]
  ------------------
 1109|  11.4k|  return reinterpret_cast<const status_internal::StatusRep*>(rep);
 1110|  33.1k|}

_ZN4absl12lts_2026081713span_internal7GetDataIKNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  5.30k|    -> decltype(GetDataImpl(c, 0)) {
   51|  5.30k|  return GetDataImpl(c, 0);
   52|  5.30k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEEEEDTcldtfp_4dataEERT_c:
   38|  5.30k|    -> decltype(c.data()) {
   39|  5.30k|  return c.data();
   40|  5.30k|}
_ZN4absl12lts_2026081713span_internal7GetDataIKNSt3__16vectorIiNS3_9allocatorIiEEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|  5.30k|    -> decltype(GetDataImpl(c, 0)) {
   51|  5.30k|  return GetDataImpl(c, 0);
   52|  5.30k|}
_ZN4absl12lts_2026081713span_internal11GetDataImplIKNSt3__16vectorIiNS3_9allocatorIiEEEEEEDTcldtfp_4dataEERT_c:
   38|  5.30k|    -> decltype(c.data()) {
   39|  5.30k|  return c.data();
   40|  5.30k|}

_ZN4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2INS2_6vectorIS8_NS6_IS8_EEEEvSE_iEERKT_:
  252|  5.30k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2EPS9_m:
  228|  5.30k|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202608174SpanIKiEC2INSt3__16vectorIiNS5_9allocatorIiEEEEvS9_iEERKT_:
  252|  5.30k|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202608174SpanIKiEC2EPS2_m:
  228|  5.30k|      : ptr_(array), len_(length) {}

_ZNK13sentencepiece22SentencePieceProcessor14EncodeAsPiecesENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
  286|  6.81k|      absl::string_view input) const {
  287|  6.81k|    DEFINE_SPP_DIRECT_FUNC_IMPL(Encode, std::vector<std::string>, input);
  ------------------
  |  |  278|  6.81k|  OutType output;                                           \
  |  |  279|  6.81k|  const auto status = FuncName(__VA_ARGS__, &output);       \
  |  |  280|  6.81k|  return output;
  ------------------
  288|      0|  }
_ZNK13sentencepiece22SentencePieceProcessor20SampleEncodeAsPiecesENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEif:
  308|  6.81k|      absl::string_view input, int nbest_size, float alpha) const {
  309|  6.81k|    DEFINE_SPP_DIRECT_FUNC_IMPL(SampleEncode, std::vector<std::string>, input,
  ------------------
  |  |  278|  6.81k|  OutType output;                                           \
  |  |  279|  6.81k|  const auto status = FuncName(__VA_ARGS__, &output);       \
  |  |  280|  6.81k|  return output;
  ------------------
  310|  6.81k|                                nbest_size, alpha);
  311|      0|  }

_ZN13sentencepiece31SentencePieceText_SentencePieceC2EPN6google8protobuf5ArenaE:
  508|  92.7M|    : Super_(arena) {
  509|  92.7M|#endif  // PROTOBUF_CUSTOM_VTABLE
  510|  92.7M|  SharedCtor(arena);
  511|       |  // @@protoc_insertion_point(arena_constructor:sentencepiece.SentencePieceText.SentencePiece)
  512|  92.7M|}
_ZN13sentencepiece17SentencePieceTextC2EPN6google8protobuf5ArenaE:
  822|  18.1k|    : Super_(arena) {
  823|  18.1k|#endif  // PROTOBUF_CUSTOM_VTABLE
  824|  18.1k|  SharedCtor(arena);
  825|       |  // @@protoc_insertion_point(arena_constructor:sentencepiece.SentencePieceText)
  826|  18.1k|}
_ZN13sentencepiece17SentencePieceText5ClearEv:
  916|  13.6k|PROTOBUF_NOINLINE void SentencePieceText::Clear() {
  917|  13.6k|  auto& this_ [[maybe_unused]] = *this;
  918|       |  // @@protoc_insertion_point(message_clear_start:sentencepiece.SentencePieceText)
  919|  13.6k|  ::google::protobuf::internal::TSanWrite(&_impl_);
  920|  13.6k|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
  921|       |
  922|  13.6k|  _impl_._extensions_.Clear();
  923|  13.6k|  cached_has_bits = this_._impl_._has_bits_[0];
  924|  13.6k|  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
  ------------------
  |  Branch (924:7): [True: 0, False: 13.6k]
  ------------------
  925|      0|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (925:9): [True: 0, False: 0]
  ------------------
  926|      0|      _impl_.pieces_.Clear();
  927|      0|    }
  928|      0|    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (928:9): [True: 0, False: 0]
  ------------------
  929|      0|      this_._impl_.text_.ClearNonDefaultToEmpty();
  930|      0|    }
  931|      0|  }
  932|  13.6k|  this_._impl_.score_ = 0;
  933|  13.6k|  _impl_._has_bits_.Clear();
  934|  13.6k|  _internal_metadata_.Clear<::std::string>();
  935|  13.6k|}
_ZN13sentencepiece22NBestSentencePieceTextC2EPN6google8protobuf5ArenaE:
 1101|  6.81k|    : Super_(arena) {
 1102|  6.81k|#endif  // PROTOBUF_CUSTOM_VTABLE
 1103|  6.81k|  SharedCtor(arena);
 1104|       |  // @@protoc_insertion_point(arena_constructor:sentencepiece.NBestSentencePieceText)
 1105|  6.81k|}
_ZN13sentencepiece22NBestSentencePieceText5ClearEv:
 1184|  6.81k|PROTOBUF_NOINLINE void NBestSentencePieceText::Clear() {
 1185|  6.81k|  auto& this_ [[maybe_unused]] = *this;
 1186|       |  // @@protoc_insertion_point(message_clear_start:sentencepiece.NBestSentencePieceText)
 1187|  6.81k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1188|  6.81k|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
 1189|       |
 1190|  6.81k|  cached_has_bits = this_._impl_._has_bits_[0];
 1191|  6.81k|  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (1191:7): [True: 0, False: 6.81k]
  ------------------
 1192|      0|    _impl_.nbests_.Clear();
 1193|      0|  }
 1194|  6.81k|  _impl_._has_bits_.Clear();
 1195|  6.81k|  _internal_metadata_.Clear<::std::string>();
 1196|  6.81k|}
_ZN13sentencepiece31SentencePieceText_SentencePiece10SharedCtorEPN6google8protobuf5ArenaE:
  557|  92.7M|inline void SentencePieceText_SentencePiece::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  558|  92.7M|  new (&_impl_) Impl_(internal_visibility(), arena);
  559|  92.7M|  ::memset(reinterpret_cast<char*>(&_impl_) +
  560|  92.7M|               offsetof(Impl_, id_),
  561|  92.7M|           0,
  562|  92.7M|           offsetof(Impl_, end_) -
  563|       |               offsetof(Impl_, id_) +
  564|  92.7M|               sizeof(Impl_::end_));
  565|  92.7M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS3_5ArenaE:
  552|  92.7M|      : _extensions_ {}
  553|       |        ,
  554|  92.7M|        piece_(arena),
  555|  92.7M|        surface_(arena) {}
_ZN13sentencepiece17SentencePieceText10SharedCtorEPN6google8protobuf5ArenaE:
  875|  18.1k|inline void SentencePieceText::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  876|  18.1k|  new (&_impl_) Impl_(internal_visibility(), arena);
  877|  18.1k|  _impl_.score_ = {};
  878|  18.1k|}
_ZN13sentencepiece17SentencePieceText5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS3_5ArenaE:
  866|  18.1k|      : _extensions_ {}
  867|       |        ,
  868|  18.1k|        pieces_ { visibility, ::_pbi::InternalMetadataOffset::Build<
  869|  18.1k|            ::sentencepiece::SentencePieceText,
  870|  18.1k|            PROTOBUF_FIELD_OFFSET(::sentencepiece::SentencePieceText, _impl_.pieces_)>()
  871|  18.1k|         }
  872|       |        ,
  873|  18.1k|        text_(arena) {}
_ZN13sentencepiece22NBestSentencePieceText10SharedCtorEPN6google8protobuf5ArenaE:
 1145|  6.81k|inline void NBestSentencePieceText::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
 1146|  6.81k|  new (&_impl_) Impl_(internal_visibility(), arena);
 1147|  6.81k|}
_ZN13sentencepiece22NBestSentencePieceText5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS3_5ArenaE:
 1139|  6.81k|      : nbests_ { visibility, ::_pbi::InternalMetadataOffset::Build<
 1140|  6.81k|            ::sentencepiece::NBestSentencePieceText,
 1141|  6.81k|            PROTOBUF_FIELD_OFFSET(::sentencepiece::NBestSentencePieceText, _impl_.nbests_)>()
 1142|  6.81k|         }
 1143|  6.81k|     {}

_ZNK13sentencepiece22NBestSentencePieceText6nbestsEv:
 1582|  6.86k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1583|       |  // @@protoc_insertion_point(field_list:sentencepiece.NBestSentencePieceText.nbests)
 1584|  6.86k|  return _internal_nbests();
 1585|  6.86k|}
_ZNK13sentencepiece22NBestSentencePieceText16_internal_nbestsEv:
 1594|  6.86k|NBestSentencePieceText::_internal_nbests() const {
 1595|  6.86k|  ::google::protobuf::internal::TSanRead(&_impl_);
 1596|  6.86k|  return _impl_.nbests_;
 1597|  6.86k|}
_ZNK13sentencepiece17SentencePieceText6piecesEv:
 1495|  31.3k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1496|       |  // @@protoc_insertion_point(field_list:sentencepiece.SentencePieceText.pieces)
 1497|  31.3k|  return _internal_pieces();
 1498|  31.3k|}
_ZNK13sentencepiece17SentencePieceText16_internal_piecesEv:
 1507|  84.5M|SentencePieceText::_internal_pieces() const {
 1508|  84.5M|  ::google::protobuf::internal::TSanRead(&_impl_);
 1509|  84.5M|  return _impl_.pieces_;
 1510|  84.5M|}
_ZNK13sentencepiece31SentencePieceText_SentencePiece5pieceEv:
 1181|  92.7M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1182|       |  // @@protoc_insertion_point(field_get:sentencepiece.SentencePieceText.SentencePiece.piece)
 1183|  92.7M|  return _internal_piece();
 1184|  92.7M|}
_ZNK13sentencepiece31SentencePieceText_SentencePiece15_internal_pieceEv:
 1199|  92.7M|inline const ::std::string& SentencePieceText_SentencePiece::_internal_piece() const {
 1200|  92.7M|  ::google::protobuf::internal::TSanRead(&_impl_);
 1201|  92.7M|  return _impl_.piece_.Get();
 1202|  92.7M|}
_ZN13sentencepiece17SentencePieceText10add_piecesEv:
 1485|  92.7M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1486|  92.7M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1487|  92.7M|  ::sentencepiece::SentencePieceText_SentencePiece* _add =
 1488|  92.7M|      _internal_mutable_pieces()->InternalAddWithArena(
 1489|  92.7M|          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
 1490|  92.7M|  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
 1491|       |  // @@protoc_insertion_point(field_add:sentencepiece.SentencePieceText.pieces)
 1492|  92.7M|  return _add;
 1493|  92.7M|}
_ZN13sentencepiece17SentencePieceText24_internal_mutable_piecesEv:
 1512|   177M|SentencePieceText::_internal_mutable_pieces() {
 1513|   177M|  ::google::protobuf::internal::TSanRead(&_impl_);
 1514|   177M|  return &_impl_.pieces_;
 1515|   177M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece6set_idEj:
 1252|  92.7M|inline void SentencePieceText_SentencePiece::set_id(::uint32_t value) {
 1253|  92.7M|  _internal_set_id(value);
 1254|  92.7M|  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
 1255|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.SentencePiece.id)
 1256|  92.7M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece16_internal_set_idEj:
 1261|  92.7M|inline void SentencePieceText_SentencePiece::_internal_set_id(::uint32_t value) {
 1262|  92.7M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1263|  92.7M|  _impl_.id_ = value;
 1264|  92.7M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece9set_beginEj:
 1348|  92.7M|inline void SentencePieceText_SentencePiece::set_begin(::uint32_t value) {
 1349|  92.7M|  _internal_set_begin(value);
 1350|  92.7M|  SetHasBit(_impl_._has_bits_[0], 0x00000008U);
 1351|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.SentencePiece.begin)
 1352|  92.7M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece19_internal_set_beginEj:
 1357|  92.7M|inline void SentencePieceText_SentencePiece::_internal_set_begin(::uint32_t value) {
 1358|  92.7M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1359|  92.7M|  _impl_.begin_ = value;
 1360|  92.7M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece7set_endEj:
 1376|   177M|inline void SentencePieceText_SentencePiece::set_end(::uint32_t value) {
 1377|   177M|  _internal_set_end(value);
 1378|   177M|  SetHasBit(_impl_._has_bits_[0], 0x00000010U);
 1379|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.SentencePiece.end)
 1380|   177M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece17_internal_set_endEj:
 1385|   177M|inline void SentencePieceText_SentencePiece::_internal_set_end(::uint32_t value) {
 1386|   177M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1387|   177M|  _impl_.end_ = value;
 1388|   177M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece13mutable_pieceEv:
 1193|   135M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1194|   135M|  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
 1195|   135M|  ::std::string* _s = _internal_mutable_piece();
 1196|       |  // @@protoc_insertion_point(field_mutable:sentencepiece.SentencePieceText.SentencePiece.piece)
 1197|   135M|  return _s;
 1198|   135M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece23_internal_mutable_pieceEv:
 1207|   135M|inline ::std::string* PROTOBUF_NONNULL SentencePieceText_SentencePiece::_internal_mutable_piece() {
 1208|   135M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1209|   135M|  return _impl_.piece_.Mutable( GetArena());
 1210|   135M|}
_ZN13sentencepiece17SentencePieceText14mutable_piecesEi:
 1480|  84.5M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1481|       |  // @@protoc_insertion_point(field_mutable:sentencepiece.SentencePieceText.pieces)
 1482|  84.5M|  return _internal_mutable_pieces()->Mutable(index);
 1483|  84.5M|}
_ZNK13sentencepiece17SentencePieceText11pieces_sizeEv:
 1466|  84.5M|inline int SentencePieceText::pieces_size() const {
 1467|  84.5M|  return _internal_pieces_size();
 1468|  84.5M|}
_ZNK13sentencepiece17SentencePieceText21_internal_pieces_sizeEv:
 1463|  84.5M|inline int SentencePieceText::_internal_pieces_size() const {
 1464|  84.5M|  return _internal_pieces().size();
 1465|  84.5M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece15mutable_surfaceEv:
 1289|  84.5M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1290|  84.5M|  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
 1291|  84.5M|  ::std::string* _s = _internal_mutable_surface();
 1292|       |  // @@protoc_insertion_point(field_mutable:sentencepiece.SentencePieceText.SentencePiece.surface)
 1293|  84.5M|  return _s;
 1294|  84.5M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece25_internal_mutable_surfaceEv:
 1303|  84.5M|inline ::std::string* PROTOBUF_NONNULL SentencePieceText_SentencePiece::_internal_mutable_surface() {
 1304|  84.5M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1305|  84.5M|  return _impl_.surface_.Mutable( GetArena());
 1306|  84.5M|}
_ZN13sentencepiece22NBestSentencePieceText10add_nbestsEv:
 1572|  4.55k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1573|  4.55k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1574|  4.55k|  ::sentencepiece::SentencePieceText* _add =
 1575|  4.55k|      _internal_mutable_nbests()->InternalAddWithArena(
 1576|  4.55k|          ::google::protobuf::MessageLite::internal_visibility(), GetArena());
 1577|  4.55k|  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
 1578|       |  // @@protoc_insertion_point(field_add:sentencepiece.NBestSentencePieceText.nbests)
 1579|  4.55k|  return _add;
 1580|  4.55k|}
_ZN13sentencepiece22NBestSentencePieceText24_internal_mutable_nbestsEv:
 1599|  4.55k|NBestSentencePieceText::_internal_mutable_nbests() {
 1600|  4.55k|  ::google::protobuf::internal::TSanRead(&_impl_);
 1601|  4.55k|  return &_impl_.nbests_;
 1602|  4.55k|}
_ZN13sentencepiece17SentencePieceText9set_scoreEf:
 1531|  4.55k|inline void SentencePieceText::set_score(float value) {
 1532|  4.55k|  _internal_set_score(value);
 1533|  4.55k|  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
 1534|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.score)
 1535|  4.55k|}
_ZN13sentencepiece17SentencePieceText19_internal_set_scoreEf:
 1540|  4.55k|inline void SentencePieceText::_internal_set_score(float value) {
 1541|  4.55k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1542|  4.55k|  _impl_.score_ = value;
 1543|  4.55k|}
_ZN13sentencepiece31SentencePieceText_SentencePiece9set_pieceIPKcJmEEEvOT_DpT0_:
 1186|  41.9M|PROTOBUF_ALWAYS_INLINE void SentencePieceText_SentencePiece::set_piece(Arg_&& arg, Args_... args) {
 1187|  41.9M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1188|  41.9M|  SetHasBit(_impl_._has_bits_[0], 0x00000001U);
 1189|  41.9M|  _impl_.piece_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
 1190|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.SentencePiece.piece)
 1191|  41.9M|}
_ZN13sentencepiece31SentencePieceText_SentencePiece11set_surfaceIPKcJmEEEvOT_DpT0_:
 1282|  68.2M|PROTOBUF_ALWAYS_INLINE void SentencePieceText_SentencePiece::set_surface(Arg_&& arg, Args_... args) {
 1283|  68.2M|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1284|  68.2M|  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
 1285|  68.2M|  _impl_.surface_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
 1286|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.SentencePiece.surface)
 1287|  68.2M|}
_ZN13sentencepiece17SentencePieceText8set_textIPKcJmEEEvOT_DpT0_:
 1410|  15.6k|PROTOBUF_ALWAYS_INLINE void SentencePieceText::set_text(Arg_&& arg, Args_... args) {
 1411|  15.6k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1412|  15.6k|  SetHasBit(_impl_._has_bits_[0], 0x00000002U);
 1413|  15.6k|  _impl_.text_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
 1414|       |  // @@protoc_insertion_point(field_set:sentencepiece.SentencePieceText.text)
 1415|  15.6k|}

_ZN13sentencepiece11TrainerSpecD2Ev:
 1249|  6.98k|TrainerSpec::~TrainerSpec() {
 1250|       |  // @@protoc_insertion_point(destructor:sentencepiece.TrainerSpec)
 1251|  6.98k|  SharedDtor(*this);
 1252|  6.98k|}
_ZNK13sentencepiece11TrainerSpec18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE:
 1405|  3.92k|    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
 1406|  3.92k|  const TrainerSpec& this_ = *this;
 1407|  3.92k|#endif  // PROTOBUF_CUSTOM_VTABLE
 1408|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 1409|       |    this_.CheckHasBitConsistency();
 1410|       |  }
 1411|       |  // @@protoc_insertion_point(serialize_to_array_start:sentencepiece.TrainerSpec)
 1412|  3.92k|  ::uint32_t cached_has_bits = 0;
 1413|  3.92k|  (void)cached_has_bits;
 1414|       |
 1415|  3.92k|  cached_has_bits = this_._impl_._has_bits_[0];
 1416|       |  // repeated string input = 1;
 1417|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (1417:7): [True: 2.25k, False: 1.67k]
  ------------------
 1418|  6.14k|    for (int i = 0, n = this_._internal_input_size(); i < n; ++i) {
  ------------------
  |  Branch (1418:55): [True: 3.88k, False: 2.25k]
  ------------------
 1419|  3.88k|      const auto& s = this_._internal_input().Get(i);
 1420|  3.88k|      target = stream->WriteString(1, s, target);
 1421|  3.88k|    }
 1422|  2.25k|  }
 1423|       |
 1424|       |  // optional string model_prefix = 2;
 1425|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
  ------------------
  |  Branch (1425:7): [True: 31, False: 3.89k]
  ------------------
 1426|     31|    const ::std::string& _s = this_._internal_model_prefix();
 1427|     31|    target = stream->WriteStringMaybeAliased(2, _s, target);
 1428|     31|  }
 1429|       |
 1430|       |  // optional .sentencepiece.TrainerSpec.ModelType model_type = 3 [default = UNIGRAM];
 1431|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00008000U)) {
  ------------------
  |  Branch (1431:7): [True: 3.37k, False: 546]
  ------------------
 1432|  3.37k|    target = stream->EnsureSpace(target);
 1433|  3.37k|    target = ::_pbi::WireFormatLite::WriteEnumToArray(
 1434|  3.37k|        3, this_._internal_model_type(), target);
 1435|  3.37k|  }
 1436|       |
 1437|       |  // optional int32 vocab_size = 4 [default = 8000];
 1438|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00010000U)) {
  ------------------
  |  Branch (1438:7): [True: 500, False: 3.42k]
  ------------------
 1439|    500|    target =
 1440|    500|        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<4>(
 1441|    500|            stream, this_._internal_vocab_size(), target);
 1442|    500|  }
 1443|       |
 1444|       |  // repeated string accept_language = 5 [deprecated = true];
 1445|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (1445:7): [True: 100, False: 3.82k]
  ------------------
 1446|  1.60k|    for (int i = 0, n = this_._internal_accept_language_size(); i < n; ++i) {
  ------------------
  |  Branch (1446:65): [True: 1.50k, False: 100]
  ------------------
 1447|  1.50k|      const auto& s = this_._internal_accept_language().Get(i);
 1448|  1.50k|      target = stream->WriteString(5, s, target);
 1449|  1.50k|    }
 1450|    100|  }
 1451|       |
 1452|       |  // optional int32 self_test_sample_size = 6 [default = 0, deprecated = true];
 1453|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000100U)) {
  ------------------
  |  Branch (1453:7): [True: 119, False: 3.80k]
  ------------------
 1454|    119|    target =
 1455|    119|        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<6>(
 1456|    119|            stream, this_._internal_self_test_sample_size(), target);
 1457|    119|  }
 1458|       |
 1459|       |  // optional string input_format = 7;
 1460|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000020U)) {
  ------------------
  |  Branch (1460:7): [True: 80, False: 3.84k]
  ------------------
 1461|     80|    const ::std::string& _s = this_._internal_input_format();
 1462|     80|    target = stream->WriteStringMaybeAliased(7, _s, target);
 1463|     80|  }
 1464|       |
 1465|       |  // optional float character_coverage = 10 [default = 0.9995];
 1466|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00020000U)) {
  ------------------
  |  Branch (1466:7): [True: 15, False: 3.91k]
  ------------------
 1467|     15|    target = stream->EnsureSpace(target);
 1468|     15|    target = ::_pbi::WireFormatLite::WriteFloatToArray(
 1469|     15|        10, this_._internal_character_coverage(), target);
 1470|     15|  }
 1471|       |
 1472|       |  // optional uint64 input_sentence_size = 11 [default = 0];
 1473|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000400U)) {
  ------------------
  |  Branch (1473:7): [True: 149, False: 3.77k]
  ------------------
 1474|    149|    target = stream->EnsureSpace(target);
 1475|    149|    target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
 1476|    149|        11, this_._internal_input_sentence_size(), target);
 1477|    149|  }
 1478|       |
 1479|       |  // optional int32 mining_sentence_size = 12 [deprecated = true];
 1480|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000200U)) {
  ------------------
  |  Branch (1480:7): [True: 426, False: 3.49k]
  ------------------
 1481|    426|    target =
 1482|    426|        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<12>(
 1483|    426|            stream, this_._internal_mining_sentence_size(), target);
 1484|    426|  }
 1485|       |
 1486|       |  // optional int32 training_sentence_size = 13 [deprecated = true];
 1487|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000800U)) {
  ------------------
  |  Branch (1487:7): [True: 70, False: 3.85k]
  ------------------
 1488|     70|    target =
 1489|     70|        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<13>(
 1490|     70|            stream, this_._internal_training_sentence_size(), target);
 1491|     70|  }
 1492|       |
 1493|       |  // optional int32 seed_sentencepiece_size = 14 [default = 1000000];
 1494|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00040000U)) {
  ------------------
  |  Branch (1494:7): [True: 63, False: 3.86k]
  ------------------
 1495|     63|    target =
 1496|     63|        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<14>(
 1497|     63|            stream, this_._internal_seed_sentencepiece_size(), target);
 1498|     63|  }
 1499|       |
 1500|       |  // optional float shrinking_factor = 15 [default = 0.75];
 1501|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00080000U)) {
  ------------------
  |  Branch (1501:7): [True: 2, False: 3.92k]
  ------------------
 1502|      2|    target = stream->EnsureSpace(target);
 1503|      2|    target = ::_pbi::WireFormatLite::WriteFloatToArray(
 1504|      2|        15, this_._internal_shrinking_factor(), target);
 1505|      2|  }
 1506|       |
 1507|       |  // optional int32 num_threads = 16 [default = 16];
 1508|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00100000U)) {
  ------------------
  |  Branch (1508:7): [True: 42, False: 3.88k]
  ------------------
 1509|     42|    target = stream->EnsureSpace(target);
 1510|     42|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1511|     42|        16, this_._internal_num_threads(), target);
 1512|     42|  }
 1513|       |
 1514|       |  // optional int32 num_sub_iterations = 17 [default = 2];
 1515|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00200000U)) {
  ------------------
  |  Branch (1515:7): [True: 41, False: 3.88k]
  ------------------
 1516|     41|    target = stream->EnsureSpace(target);
 1517|     41|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1518|     41|        17, this_._internal_num_sub_iterations(), target);
 1519|     41|  }
 1520|       |
 1521|       |  // optional int32 max_sentence_length = 18 [default = 4192];
 1522|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00400000U)) {
  ------------------
  |  Branch (1522:7): [True: 42, False: 3.88k]
  ------------------
 1523|     42|    target = stream->EnsureSpace(target);
 1524|     42|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1525|     42|        18, this_._internal_max_sentence_length(), target);
 1526|     42|  }
 1527|       |
 1528|       |  // optional bool shuffle_input_sentence = 19 [default = true];
 1529|  3.92k|  if (CheckHasBit(cached_has_bits, 0x01000000U)) {
  ------------------
  |  Branch (1529:7): [True: 2, False: 3.92k]
  ------------------
 1530|      2|    target = stream->EnsureSpace(target);
 1531|      2|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1532|      2|        19, this_._internal_shuffle_input_sentence(), target);
 1533|      2|  }
 1534|       |
 1535|       |  // optional int32 max_sentencepiece_length = 20 [default = 16];
 1536|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00800000U)) {
  ------------------
  |  Branch (1536:7): [True: 54, False: 3.87k]
  ------------------
 1537|     54|    target = stream->EnsureSpace(target);
 1538|     54|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1539|     54|        20, this_._internal_max_sentencepiece_length(), target);
 1540|     54|  }
 1541|       |
 1542|       |  // optional bool split_by_unicode_script = 21 [default = true];
 1543|  3.92k|  if (CheckHasBit(cached_has_bits, 0x02000000U)) {
  ------------------
  |  Branch (1543:7): [True: 15, False: 3.91k]
  ------------------
 1544|     15|    target = stream->EnsureSpace(target);
 1545|     15|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1546|     15|        21, this_._internal_split_by_unicode_script(), target);
 1547|     15|  }
 1548|       |
 1549|       |  // optional bool split_by_whitespace = 22 [default = true];
 1550|  3.92k|  if (CheckHasBit(cached_has_bits, 0x04000000U)) {
  ------------------
  |  Branch (1550:7): [True: 50, False: 3.87k]
  ------------------
 1551|     50|    target = stream->EnsureSpace(target);
 1552|     50|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1553|     50|        22, this_._internal_split_by_whitespace(), target);
 1554|     50|  }
 1555|       |
 1556|       |  // optional bool split_by_number = 23 [default = true];
 1557|  3.92k|  if (CheckHasBit(cached_has_bits, 0x08000000U)) {
  ------------------
  |  Branch (1557:7): [True: 45, False: 3.88k]
  ------------------
 1558|     45|    target = stream->EnsureSpace(target);
 1559|     45|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1560|     45|        23, this_._internal_split_by_number(), target);
 1561|     45|  }
 1562|       |
 1563|       |  // optional bool treat_whitespace_as_suffix = 24 [default = false];
 1564|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00001000U)) {
  ------------------
  |  Branch (1564:7): [True: 11, False: 3.91k]
  ------------------
 1565|     11|    target = stream->EnsureSpace(target);
 1566|     11|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1567|     11|        24, this_._internal_treat_whitespace_as_suffix(), target);
 1568|     11|  }
 1569|       |
 1570|       |  // optional bool split_digits = 25 [default = false];
 1571|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00002000U)) {
  ------------------
  |  Branch (1571:7): [True: 2, False: 3.92k]
  ------------------
 1572|      2|    target = stream->EnsureSpace(target);
 1573|      2|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1574|      2|        25, this_._internal_split_digits(), target);
 1575|      2|  }
 1576|       |
 1577|       |  // optional bool allow_whitespace_only_pieces = 26 [default = false];
 1578|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00004000U)) {
  ------------------
  |  Branch (1578:7): [True: 2, False: 3.92k]
  ------------------
 1579|      2|    target = stream->EnsureSpace(target);
 1580|      2|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1581|      2|        26, this_._internal_allow_whitespace_only_pieces(), target);
 1582|      2|  }
 1583|       |
 1584|       |  // repeated string control_symbols = 30;
 1585|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (1585:7): [True: 45, False: 3.88k]
  ------------------
 1586|    182|    for (int i = 0, n = this_._internal_control_symbols_size(); i < n; ++i) {
  ------------------
  |  Branch (1586:65): [True: 137, False: 45]
  ------------------
 1587|    137|      const auto& s = this_._internal_control_symbols().Get(i);
 1588|    137|      target = stream->WriteString(30, s, target);
 1589|    137|    }
 1590|     45|  }
 1591|       |
 1592|       |  // repeated string user_defined_symbols = 31;
 1593|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (1593:7): [True: 86, False: 3.83k]
  ------------------
 1594|    662|    for (int i = 0, n = this_._internal_user_defined_symbols_size(); i < n; ++i) {
  ------------------
  |  Branch (1594:70): [True: 576, False: 86]
  ------------------
 1595|    576|      const auto& s = this_._internal_user_defined_symbols().Get(i);
 1596|    576|      target = stream->WriteString(31, s, target);
 1597|    576|    }
 1598|     86|  }
 1599|       |
 1600|  3.92k|  cached_has_bits = this_._impl_._has_bits_[1];
 1601|       |  // optional bool vocabulary_output_piece_score = 32 [default = true];
 1602|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000800U)) {
  ------------------
  |  Branch (1602:7): [True: 1, False: 3.92k]
  ------------------
 1603|      1|    target = stream->EnsureSpace(target);
 1604|      1|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1605|      1|        32, this_._internal_vocabulary_output_piece_score(), target);
 1606|      1|  }
 1607|       |
 1608|       |  // optional bool hard_vocab_limit = 33 [default = true];
 1609|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00001000U)) {
  ------------------
  |  Branch (1609:7): [True: 1, False: 3.92k]
  ------------------
 1610|      1|    target = stream->EnsureSpace(target);
 1611|      1|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1612|      1|        33, this_._internal_hard_vocab_limit(), target);
 1613|      1|  }
 1614|       |
 1615|       |  // optional bool use_all_vocab = 34 [default = false];
 1616|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
  ------------------
  |  Branch (1616:7): [True: 2, False: 3.92k]
  ------------------
 1617|      2|    target = stream->EnsureSpace(target);
 1618|      2|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1619|      2|        34, this_._internal_use_all_vocab(), target);
 1620|      2|  }
 1621|       |
 1622|       |  // optional bool byte_fallback = 35 [default = false];
 1623|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000020U)) {
  ------------------
  |  Branch (1623:7): [True: 263, False: 3.66k]
  ------------------
 1624|    263|    target = stream->EnsureSpace(target);
 1625|    263|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1626|    263|        35, this_._internal_byte_fallback(), target);
 1627|    263|  }
 1628|       |
 1629|  3.92k|  cached_has_bits = this_._impl_._has_bits_[0];
 1630|       |  // optional string required_chars = 36;
 1631|  3.92k|  if (CheckHasBit(cached_has_bits, 0x20000000U)) {
  ------------------
  |  Branch (1631:7): [True: 6, False: 3.91k]
  ------------------
 1632|      6|    const ::std::string& _s = this_._internal_required_chars();
 1633|      6|    target = stream->WriteStringMaybeAliased(36, _s, target);
 1634|      6|  }
 1635|       |
 1636|  3.92k|  cached_has_bits = this_._impl_._has_bits_[1];
 1637|       |  // optional int32 unk_id = 40 [default = 0];
 1638|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (1638:7): [True: 48, False: 3.87k]
  ------------------
 1639|     48|    target = stream->EnsureSpace(target);
 1640|     48|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1641|     48|        40, this_._internal_unk_id(), target);
 1642|     48|  }
 1643|       |
 1644|       |  // optional int32 bos_id = 41 [default = 1];
 1645|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00002000U)) {
  ------------------
  |  Branch (1645:7): [True: 44, False: 3.88k]
  ------------------
 1646|     44|    target = stream->EnsureSpace(target);
 1647|     44|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1648|     44|        41, this_._internal_bos_id(), target);
 1649|     44|  }
 1650|       |
 1651|       |  // optional int32 eos_id = 42 [default = 2];
 1652|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00004000U)) {
  ------------------
  |  Branch (1652:7): [True: 42, False: 3.88k]
  ------------------
 1653|     42|    target = stream->EnsureSpace(target);
 1654|     42|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1655|     42|        42, this_._internal_eos_id(), target);
 1656|     42|  }
 1657|       |
 1658|  3.92k|  cached_has_bits = this_._impl_._has_bits_[0];
 1659|       |  // optional int32 pad_id = 43 [default = -1];
 1660|  3.92k|  if (CheckHasBit(cached_has_bits, 0x10000000U)) {
  ------------------
  |  Branch (1660:7): [True: 42, False: 3.88k]
  ------------------
 1661|     42|    target = stream->EnsureSpace(target);
 1662|     42|    target = ::_pbi::WireFormatLite::WriteInt32ToArray(
 1663|     42|        43, this_._internal_pad_id(), target);
 1664|     42|  }
 1665|       |
 1666|       |  // optional string unk_surface = 44 [default = " \342\201\207 "];
 1667|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000040U)) {
  ------------------
  |  Branch (1667:7): [True: 59, False: 3.86k]
  ------------------
 1668|     59|    const ::std::string& _s = this_._internal_unk_surface();
 1669|     59|    target = stream->WriteStringMaybeAliased(44, _s, target);
 1670|     59|  }
 1671|       |
 1672|       |  // optional string unk_piece = 45 [default = "<unk>"];
 1673|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000080U)) {
  ------------------
  |  Branch (1673:7): [True: 14, False: 3.91k]
  ------------------
 1674|     14|    const ::std::string& _s = this_._internal_unk_piece();
 1675|     14|    target = stream->WriteStringMaybeAliased(45, _s, target);
 1676|     14|  }
 1677|       |
 1678|       |  // optional string bos_piece = 46 [default = "<s>"];
 1679|  3.92k|  if (CheckHasBit(cached_has_bits, 0x40000000U)) {
  ------------------
  |  Branch (1679:7): [True: 30, False: 3.89k]
  ------------------
 1680|     30|    const ::std::string& _s = this_._internal_bos_piece();
 1681|     30|    target = stream->WriteStringMaybeAliased(46, _s, target);
 1682|     30|  }
 1683|       |
 1684|       |  // optional string eos_piece = 47 [default = "</s>"];
 1685|  3.92k|  if (CheckHasBit(cached_has_bits, 0x80000000U)) {
  ------------------
  |  Branch (1685:7): [True: 29, False: 3.89k]
  ------------------
 1686|     29|    const ::std::string& _s = this_._internal_eos_piece();
 1687|     29|    target = stream->WriteStringMaybeAliased(47, _s, target);
 1688|     29|  }
 1689|       |
 1690|  3.92k|  cached_has_bits = this_._impl_._has_bits_[1];
 1691|       |  // optional string pad_piece = 48 [default = "<pad>"];
 1692|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (1692:7): [True: 20, False: 3.90k]
  ------------------
 1693|     20|    const ::std::string& _s = this_._internal_pad_piece();
 1694|     20|    target = stream->WriteStringMaybeAliased(48, _s, target);
 1695|     20|  }
 1696|       |
 1697|       |  // optional bool train_extremely_large_corpus = 49 [default = false, deprecated = true];
 1698|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000040U)) {
  ------------------
  |  Branch (1698:7): [True: 1, False: 3.92k]
  ------------------
 1699|      1|    target = stream->EnsureSpace(target);
 1700|      1|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1701|      1|        49, this_._internal_train_extremely_large_corpus(), target);
 1702|      1|  }
 1703|       |
 1704|       |  // optional bool enable_differential_privacy = 50 [default = false, deprecated = true];
 1705|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000080U)) {
  ------------------
  |  Branch (1705:7): [True: 1, False: 3.92k]
  ------------------
 1706|      1|    target = stream->EnsureSpace(target);
 1707|      1|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1708|      1|        50, this_._internal_enable_differential_privacy(), target);
 1709|      1|  }
 1710|       |
 1711|       |  // optional float differential_privacy_noise_level = 51 [default = 0, deprecated = true];
 1712|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000200U)) {
  ------------------
  |  Branch (1712:7): [True: 1, False: 3.92k]
  ------------------
 1713|      1|    target = stream->EnsureSpace(target);
 1714|      1|    target = ::_pbi::WireFormatLite::WriteFloatToArray(
 1715|      1|        51, this_._internal_differential_privacy_noise_level(), target);
 1716|      1|  }
 1717|       |
 1718|       |  // optional uint64 differential_privacy_clipping_threshold = 52 [default = 0, deprecated = true];
 1719|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000100U)) {
  ------------------
  |  Branch (1719:7): [True: 93, False: 3.83k]
  ------------------
 1720|     93|    target = stream->EnsureSpace(target);
 1721|     93|    target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
 1722|     93|        52, this_._internal_differential_privacy_clipping_threshold(), target);
 1723|     93|  }
 1724|       |
 1725|       |  // optional string pretokenization_delimiter = 53 [default = ""];
 1726|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (1726:7): [True: 19, False: 3.90k]
  ------------------
 1727|     19|    const ::std::string& _s = this_._internal_pretokenization_delimiter();
 1728|     19|    target = stream->WriteStringMaybeAliased(53, _s, target);
 1729|     19|  }
 1730|       |
 1731|       |  // optional string seed_sentencepieces_file = 54 [default = ""];
 1732|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (1732:7): [True: 5, False: 3.92k]
  ------------------
 1733|      5|    const ::std::string& _s = this_._internal_seed_sentencepieces_file();
 1734|      5|    target = stream->WriteStringMaybeAliased(54, _s, target);
 1735|      5|  }
 1736|       |
 1737|       |  // optional bool auto_character_coverage = 55 [default = false];
 1738|  3.92k|  if (CheckHasBit(cached_has_bits, 0x00000400U)) {
  ------------------
  |  Branch (1738:7): [True: 1, False: 3.92k]
  ------------------
 1739|      1|    target = stream->EnsureSpace(target);
 1740|      1|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 1741|      1|        55, this_._internal_auto_character_coverage(), target);
 1742|      1|  }
 1743|       |
 1744|       |  // All extensions.
 1745|  3.92k|  target = this_._impl_._extensions_._InternalSerializeAll(&default_instance(),
 1746|  3.92k|                                                    target, stream);
 1747|  3.92k|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|  3.92k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.30k, False: 1.62k]
  |  |  |  Branch (190:49): [Folded, False: 3.92k]
  |  |  |  Branch (190:58): [True: 2.30k, False: 1.62k]
  |  |  ------------------
  ------------------
 1748|  2.30k|    target = stream->WriteRaw(
 1749|  2.30k|        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
 1750|  2.30k|        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
 1751|  2.30k|  }
 1752|       |  // @@protoc_insertion_point(serialize_to_array_end:sentencepiece.TrainerSpec)
 1753|  3.92k|  return target;
 1754|  3.92k|}
_ZNK13sentencepiece11TrainerSpec12ByteSizeLongEv:
 1760|  3.92k|::size_t TrainerSpec::ByteSizeLong() const {
 1761|  3.92k|  const TrainerSpec& this_ = *this;
 1762|  3.92k|#endif  // PROTOBUF_CUSTOM_VTABLE
 1763|       |  // @@protoc_insertion_point(message_byte_size_start:sentencepiece.TrainerSpec)
 1764|  3.92k|  ::size_t total_size = 0;
 1765|  3.92k|  total_size += this_._impl_._extensions_.ByteSize();
 1766|       |
 1767|  3.92k|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
 1768|       |
 1769|  3.92k|  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 1770|  3.92k|  cached_has_bits = this_._impl_._has_bits_[0];
 1771|  3.92k|  total_size += ::absl::popcount(0x000a0000U & cached_has_bits) * 5;
 1772|  3.92k|  total_size += ::absl::popcount(0x0f007000U & cached_has_bits) * 3;
 1773|  3.92k|  if (BatchCheckHasBit(cached_has_bits, 0x000000ffU)) {
  ------------------
  |  Branch (1773:7): [True: 2.36k, False: 1.56k]
  ------------------
 1774|       |    // repeated string input = 1;
 1775|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (1775:9): [True: 2.25k, False: 112]
  ------------------
 1776|  2.25k|      total_size +=
 1777|  2.25k|          1 * ::google::protobuf::internal::FromIntSize(this_._internal_input().size());
 1778|  6.14k|      for (int i = 0, n = this_._internal_input().size(); i < n; ++i) {
  ------------------
  |  Branch (1778:59): [True: 3.88k, False: 2.25k]
  ------------------
 1779|  3.88k|        total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
 1780|  3.88k|            this_._internal_input().Get(i));
 1781|  3.88k|      }
 1782|  2.25k|    }
 1783|       |    // repeated string accept_language = 5 [deprecated = true];
 1784|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (1784:9): [True: 100, False: 2.26k]
  ------------------
 1785|    100|      total_size +=
 1786|    100|          1 * ::google::protobuf::internal::FromIntSize(this_._internal_accept_language().size());
 1787|  1.60k|      for (int i = 0, n = this_._internal_accept_language().size(); i < n; ++i) {
  ------------------
  |  Branch (1787:69): [True: 1.50k, False: 100]
  ------------------
 1788|  1.50k|        total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
 1789|  1.50k|            this_._internal_accept_language().Get(i));
 1790|  1.50k|      }
 1791|    100|    }
 1792|       |    // repeated string control_symbols = 30;
 1793|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (1793:9): [True: 45, False: 2.31k]
  ------------------
 1794|     45|      total_size +=
 1795|     45|          2 * ::google::protobuf::internal::FromIntSize(this_._internal_control_symbols().size());
 1796|    182|      for (int i = 0, n = this_._internal_control_symbols().size(); i < n; ++i) {
  ------------------
  |  Branch (1796:69): [True: 137, False: 45]
  ------------------
 1797|    137|        total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
 1798|    137|            this_._internal_control_symbols().Get(i));
 1799|    137|      }
 1800|     45|    }
 1801|       |    // repeated string user_defined_symbols = 31;
 1802|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (1802:9): [True: 86, False: 2.27k]
  ------------------
 1803|     86|      total_size +=
 1804|     86|          2 * ::google::protobuf::internal::FromIntSize(this_._internal_user_defined_symbols().size());
 1805|    662|      for (int i = 0, n = this_._internal_user_defined_symbols().size(); i < n; ++i) {
  ------------------
  |  Branch (1805:74): [True: 576, False: 86]
  ------------------
 1806|    576|        total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
 1807|    576|            this_._internal_user_defined_symbols().Get(i));
 1808|    576|      }
 1809|     86|    }
 1810|       |    // optional string model_prefix = 2;
 1811|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
  ------------------
  |  Branch (1811:9): [True: 31, False: 2.33k]
  ------------------
 1812|     31|      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1813|     31|                                      this_._internal_model_prefix());
 1814|     31|    }
 1815|       |    // optional string input_format = 7;
 1816|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
  ------------------
  |  Branch (1816:9): [True: 80, False: 2.28k]
  ------------------
 1817|     80|      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1818|     80|                                      this_._internal_input_format());
 1819|     80|    }
 1820|       |    // optional string unk_surface = 44 [default = " \342\201\207 "];
 1821|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000040U)) {
  ------------------
  |  Branch (1821:9): [True: 59, False: 2.30k]
  ------------------
 1822|     59|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1823|     59|                                      this_._internal_unk_surface());
 1824|     59|    }
 1825|       |    // optional string unk_piece = 45 [default = "<unk>"];
 1826|  2.36k|    if (CheckHasBit(cached_has_bits, 0x00000080U)) {
  ------------------
  |  Branch (1826:9): [True: 14, False: 2.35k]
  ------------------
 1827|     14|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1828|     14|                                      this_._internal_unk_piece());
 1829|     14|    }
 1830|  2.36k|  }
 1831|  3.92k|  if (BatchCheckHasBit(cached_has_bits, 0x00008f00U)) {
  ------------------
  |  Branch (1831:7): [True: 3.74k, False: 180]
  ------------------
 1832|       |    // optional int32 self_test_sample_size = 6 [default = 0, deprecated = true];
 1833|  3.74k|    if (CheckHasBit(cached_has_bits, 0x00000100U)) {
  ------------------
  |  Branch (1833:9): [True: 119, False: 3.62k]
  ------------------
 1834|    119|      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
 1835|    119|          this_._internal_self_test_sample_size());
 1836|    119|    }
 1837|       |    // optional int32 mining_sentence_size = 12 [deprecated = true];
 1838|  3.74k|    if (CheckHasBit(cached_has_bits, 0x00000200U)) {
  ------------------
  |  Branch (1838:9): [True: 426, False: 3.31k]
  ------------------
 1839|    426|      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
 1840|    426|          this_._internal_mining_sentence_size());
 1841|    426|    }
 1842|       |    // optional uint64 input_sentence_size = 11 [default = 0];
 1843|  3.74k|    if (CheckHasBit(cached_has_bits, 0x00000400U)) {
  ------------------
  |  Branch (1843:9): [True: 149, False: 3.59k]
  ------------------
 1844|    149|      total_size += ::_pbi::WireFormatLite::UInt64SizePlusOne(
 1845|    149|          this_._internal_input_sentence_size());
 1846|    149|    }
 1847|       |    // optional int32 training_sentence_size = 13 [deprecated = true];
 1848|  3.74k|    if (CheckHasBit(cached_has_bits, 0x00000800U)) {
  ------------------
  |  Branch (1848:9): [True: 70, False: 3.67k]
  ------------------
 1849|     70|      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
 1850|     70|          this_._internal_training_sentence_size());
 1851|     70|    }
 1852|       |    // optional .sentencepiece.TrainerSpec.ModelType model_type = 3 [default = UNIGRAM];
 1853|  3.74k|    if (CheckHasBit(cached_has_bits, 0x00008000U)) {
  ------------------
  |  Branch (1853:9): [True: 3.37k, False: 366]
  ------------------
 1854|  3.37k|      total_size += 1 +
 1855|  3.37k|                    ::_pbi::WireFormatLite::EnumSize(this_._internal_model_type());
 1856|  3.37k|    }
 1857|  3.74k|  }
 1858|  3.92k|  if (BatchCheckHasBit(cached_has_bits, 0x00f50000U)) {
  ------------------
  |  Branch (1858:7): [True: 691, False: 3.23k]
  ------------------
 1859|       |    // optional int32 vocab_size = 4 [default = 8000];
 1860|    691|    if (CheckHasBit(cached_has_bits, 0x00010000U)) {
  ------------------
  |  Branch (1860:9): [True: 500, False: 191]
  ------------------
 1861|    500|      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
 1862|    500|          this_._internal_vocab_size());
 1863|    500|    }
 1864|       |    // optional int32 seed_sentencepiece_size = 14 [default = 1000000];
 1865|    691|    if (CheckHasBit(cached_has_bits, 0x00040000U)) {
  ------------------
  |  Branch (1865:9): [True: 63, False: 628]
  ------------------
 1866|     63|      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
 1867|     63|          this_._internal_seed_sentencepiece_size());
 1868|     63|    }
 1869|       |    // optional int32 num_threads = 16 [default = 16];
 1870|    691|    if (CheckHasBit(cached_has_bits, 0x00100000U)) {
  ------------------
  |  Branch (1870:9): [True: 42, False: 649]
  ------------------
 1871|     42|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1872|     42|                                      this_._internal_num_threads());
 1873|     42|    }
 1874|       |    // optional int32 num_sub_iterations = 17 [default = 2];
 1875|    691|    if (CheckHasBit(cached_has_bits, 0x00200000U)) {
  ------------------
  |  Branch (1875:9): [True: 41, False: 650]
  ------------------
 1876|     41|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1877|     41|                                      this_._internal_num_sub_iterations());
 1878|     41|    }
 1879|       |    // optional int32 max_sentence_length = 18 [default = 4192];
 1880|    691|    if (CheckHasBit(cached_has_bits, 0x00400000U)) {
  ------------------
  |  Branch (1880:9): [True: 42, False: 649]
  ------------------
 1881|     42|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1882|     42|                                      this_._internal_max_sentence_length());
 1883|     42|    }
 1884|       |    // optional int32 max_sentencepiece_length = 20 [default = 16];
 1885|    691|    if (CheckHasBit(cached_has_bits, 0x00800000U)) {
  ------------------
  |  Branch (1885:9): [True: 54, False: 637]
  ------------------
 1886|     54|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1887|     54|                                      this_._internal_max_sentencepiece_length());
 1888|     54|    }
 1889|    691|  }
 1890|  3.92k|  if (BatchCheckHasBit(cached_has_bits, 0xf0000000U)) {
  ------------------
  |  Branch (1890:7): [True: 106, False: 3.81k]
  ------------------
 1891|       |    // optional int32 pad_id = 43 [default = -1];
 1892|    106|    if (CheckHasBit(cached_has_bits, 0x10000000U)) {
  ------------------
  |  Branch (1892:9): [True: 42, False: 64]
  ------------------
 1893|     42|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1894|     42|                                      this_._internal_pad_id());
 1895|     42|    }
 1896|       |    // optional string required_chars = 36;
 1897|    106|    if (CheckHasBit(cached_has_bits, 0x20000000U)) {
  ------------------
  |  Branch (1897:9): [True: 6, False: 100]
  ------------------
 1898|      6|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1899|      6|                                      this_._internal_required_chars());
 1900|      6|    }
 1901|       |    // optional string bos_piece = 46 [default = "<s>"];
 1902|    106|    if (CheckHasBit(cached_has_bits, 0x40000000U)) {
  ------------------
  |  Branch (1902:9): [True: 30, False: 76]
  ------------------
 1903|     30|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1904|     30|                                      this_._internal_bos_piece());
 1905|     30|    }
 1906|       |    // optional string eos_piece = 47 [default = "</s>"];
 1907|    106|    if (CheckHasBit(cached_has_bits, 0x80000000U)) {
  ------------------
  |  Branch (1907:9): [True: 29, False: 77]
  ------------------
 1908|     29|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1909|     29|                                      this_._internal_eos_piece());
 1910|     29|    }
 1911|    106|  }
 1912|  3.92k|  cached_has_bits = this_._impl_._has_bits_[1];
 1913|  3.92k|  total_size += static_cast<bool>(0x00000200U & cached_has_bits) * 6;
 1914|  3.92k|  total_size += ::absl::popcount(0x00001cf0U & cached_has_bits) * 3;
 1915|  3.92k|  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
  ------------------
  |  Branch (1915:7): [True: 92, False: 3.83k]
  ------------------
 1916|       |    // optional string pad_piece = 48 [default = "<pad>"];
 1917|     92|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (1917:9): [True: 20, False: 72]
  ------------------
 1918|     20|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1919|     20|                                      this_._internal_pad_piece());
 1920|     20|    }
 1921|       |    // optional string pretokenization_delimiter = 53 [default = ""];
 1922|     92|    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (1922:9): [True: 19, False: 73]
  ------------------
 1923|     19|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1924|     19|                                      this_._internal_pretokenization_delimiter());
 1925|     19|    }
 1926|       |    // optional string seed_sentencepieces_file = 54 [default = ""];
 1927|     92|    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (1927:9): [True: 5, False: 87]
  ------------------
 1928|      5|      total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 1929|      5|                                      this_._internal_seed_sentencepieces_file());
 1930|      5|    }
 1931|       |    // optional int32 unk_id = 40 [default = 0];
 1932|     92|    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (1932:9): [True: 48, False: 44]
  ------------------
 1933|     48|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1934|     48|                                      this_._internal_unk_id());
 1935|     48|    }
 1936|     92|  }
 1937|  3.92k|  if (BatchCheckHasBit(cached_has_bits, 0x00006100U)) {
  ------------------
  |  Branch (1937:7): [True: 179, False: 3.74k]
  ------------------
 1938|       |    // optional uint64 differential_privacy_clipping_threshold = 52 [default = 0, deprecated = true];
 1939|    179|    if (CheckHasBit(cached_has_bits, 0x00000100U)) {
  ------------------
  |  Branch (1939:9): [True: 93, False: 86]
  ------------------
 1940|     93|      total_size += 2 + ::_pbi::WireFormatLite::UInt64Size(
 1941|     93|                                      this_._internal_differential_privacy_clipping_threshold());
 1942|     93|    }
 1943|       |    // optional int32 bos_id = 41 [default = 1];
 1944|    179|    if (CheckHasBit(cached_has_bits, 0x00002000U)) {
  ------------------
  |  Branch (1944:9): [True: 44, False: 135]
  ------------------
 1945|     44|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1946|     44|                                      this_._internal_bos_id());
 1947|     44|    }
 1948|       |    // optional int32 eos_id = 42 [default = 2];
 1949|    179|    if (CheckHasBit(cached_has_bits, 0x00004000U)) {
  ------------------
  |  Branch (1949:9): [True: 42, False: 137]
  ------------------
 1950|     42|      total_size += 2 + ::_pbi::WireFormatLite::Int32Size(
 1951|     42|                                      this_._internal_eos_id());
 1952|     42|    }
 1953|    179|  }
 1954|  3.92k|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|  3.92k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.30k, False: 1.62k]
  |  |  |  Branch (190:49): [Folded, False: 3.92k]
  |  |  |  Branch (190:58): [True: 2.30k, False: 1.62k]
  |  |  ------------------
  ------------------
 1955|  2.30k|    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
 1956|  2.30k|  }
 1957|  3.92k|  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
 1958|  3.92k|  return total_size;
 1959|  3.92k|}
_ZN13sentencepiece11TrainerSpec17IsInitializedImplERKN6google8protobuf11MessageLiteE:
 2152|  4.28k|    const MessageLite& msg) {
 2153|  4.28k|  auto& this_ = static_cast<const TrainerSpec&>(msg);
 2154|  4.28k|  if (!this_._impl_._extensions_.IsInitialized(this_.GetArena(),
  ------------------
  |  Branch (2154:7): [True: 0, False: 4.28k]
  ------------------
 2155|  4.28k|                                        &default_instance())) {
 2156|      0|    return false;
 2157|      0|  }
 2158|  4.28k|  return true;
 2159|  4.28k|}
_ZN13sentencepiece14NormalizerSpecD2Ev:
 2260|  1.14k|NormalizerSpec::~NormalizerSpec() {
 2261|       |  // @@protoc_insertion_point(destructor:sentencepiece.NormalizerSpec)
 2262|  1.14k|  SharedDtor(*this);
 2263|  1.14k|}
_ZNK13sentencepiece14NormalizerSpec18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE:
 2333|    395|    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
 2334|    395|  const NormalizerSpec& this_ = *this;
 2335|    395|#endif  // PROTOBUF_CUSTOM_VTABLE
 2336|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 2337|       |    this_.CheckHasBitConsistency();
 2338|       |  }
 2339|       |  // @@protoc_insertion_point(serialize_to_array_start:sentencepiece.NormalizerSpec)
 2340|    395|  ::uint32_t cached_has_bits = 0;
 2341|    395|  (void)cached_has_bits;
 2342|       |
 2343|    395|  cached_has_bits = this_._impl_._has_bits_[0];
 2344|       |  // optional string name = 1;
 2345|    395|  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (2345:7): [True: 286, False: 109]
  ------------------
 2346|    286|    const ::std::string& _s = this_._internal_name();
 2347|    286|    target = stream->WriteStringMaybeAliased(1, _s, target);
 2348|    286|  }
 2349|       |
 2350|       |  // optional bytes precompiled_charsmap = 2;
 2351|    395|  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (2351:7): [True: 13, False: 382]
  ------------------
 2352|     13|    const ::std::string& _s = this_._internal_precompiled_charsmap();
 2353|     13|    target = stream->WriteBytesMaybeAliased(2, _s, target);
 2354|     13|  }
 2355|       |
 2356|       |  // optional bool add_dummy_prefix = 3 [default = true];
 2357|    395|  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (2357:7): [True: 115, False: 280]
  ------------------
 2358|    115|    target = stream->EnsureSpace(target);
 2359|    115|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 2360|    115|        3, this_._internal_add_dummy_prefix(), target);
 2361|    115|  }
 2362|       |
 2363|       |  // optional bool remove_extra_whitespaces = 4 [default = true];
 2364|    395|  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
  ------------------
  |  Branch (2364:7): [True: 53, False: 342]
  ------------------
 2365|     53|    target = stream->EnsureSpace(target);
 2366|     53|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 2367|     53|        4, this_._internal_remove_extra_whitespaces(), target);
 2368|     53|  }
 2369|       |
 2370|       |  // optional bool escape_whitespaces = 5 [default = true];
 2371|    395|  if (CheckHasBit(cached_has_bits, 0x00000020U)) {
  ------------------
  |  Branch (2371:7): [True: 23, False: 372]
  ------------------
 2372|     23|    target = stream->EnsureSpace(target);
 2373|     23|    target = ::_pbi::WireFormatLite::WriteBoolToArray(
 2374|     23|        5, this_._internal_escape_whitespaces(), target);
 2375|     23|  }
 2376|       |
 2377|       |  // optional string normalization_rule_tsv = 6;
 2378|    395|  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (2378:7): [True: 14, False: 381]
  ------------------
 2379|     14|    const ::std::string& _s = this_._internal_normalization_rule_tsv();
 2380|     14|    target = stream->WriteStringMaybeAliased(6, _s, target);
 2381|     14|  }
 2382|       |
 2383|       |  // All extensions.
 2384|    395|  target = this_._impl_._extensions_._InternalSerializeAll(&default_instance(),
 2385|    395|                                                    target, stream);
 2386|    395|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|    395|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 332, False: 63]
  |  |  |  Branch (190:49): [Folded, False: 395]
  |  |  |  Branch (190:58): [True: 332, False: 63]
  |  |  ------------------
  ------------------
 2387|    332|    target = stream->WriteRaw(
 2388|    332|        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
 2389|    332|        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
 2390|    332|  }
 2391|       |  // @@protoc_insertion_point(serialize_to_array_end:sentencepiece.NormalizerSpec)
 2392|    395|  return target;
 2393|    395|}
_ZNK13sentencepiece14NormalizerSpec12ByteSizeLongEv:
 2399|    395|::size_t NormalizerSpec::ByteSizeLong() const {
 2400|    395|  const NormalizerSpec& this_ = *this;
 2401|    395|#endif  // PROTOBUF_CUSTOM_VTABLE
 2402|       |  // @@protoc_insertion_point(message_byte_size_start:sentencepiece.NormalizerSpec)
 2403|    395|  ::size_t total_size = 0;
 2404|    395|  total_size += this_._impl_._extensions_.ByteSize();
 2405|       |
 2406|    395|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
 2407|       |
 2408|    395|  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 2409|    395|  cached_has_bits = this_._impl_._has_bits_[0];
 2410|    395|  total_size += ::absl::popcount(0x00000038U & cached_has_bits) * 2;
 2411|    395|  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
  ------------------
  |  Branch (2411:7): [True: 308, False: 87]
  ------------------
 2412|       |    // optional string name = 1;
 2413|    308|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (2413:9): [True: 286, False: 22]
  ------------------
 2414|    286|      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 2415|    286|                                      this_._internal_name());
 2416|    286|    }
 2417|       |    // optional bytes precompiled_charsmap = 2;
 2418|    308|    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (2418:9): [True: 13, False: 295]
  ------------------
 2419|     13|      total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize(
 2420|     13|                                      this_._internal_precompiled_charsmap());
 2421|     13|    }
 2422|       |    // optional string normalization_rule_tsv = 6;
 2423|    308|    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (2423:9): [True: 14, False: 294]
  ------------------
 2424|     14|      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 2425|     14|                                      this_._internal_normalization_rule_tsv());
 2426|     14|    }
 2427|    308|  }
 2428|    395|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|    395|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 332, False: 63]
  |  |  |  Branch (190:49): [Folded, False: 395]
  |  |  |  Branch (190:58): [True: 332, False: 63]
  |  |  ------------------
  ------------------
 2429|    332|    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
 2430|    332|  }
 2431|    395|  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
 2432|    395|  return total_size;
 2433|    395|}
_ZN13sentencepiece14NormalizerSpec17IsInitializedImplERKN6google8protobuf11MessageLiteE:
 2484|    585|    const MessageLite& msg) {
 2485|    585|  auto& this_ = static_cast<const NormalizerSpec&>(msg);
 2486|    585|  if (!this_._impl_._extensions_.IsInitialized(this_.GetArena(),
  ------------------
  |  Branch (2486:7): [True: 0, False: 585]
  ------------------
 2487|    585|                                        &default_instance())) {
 2488|      0|    return false;
 2489|      0|  }
 2490|    585|  return true;
 2491|    585|}
_ZN13sentencepiece24ModelProto_SentencePieceD2Ev:
 2569|  2.32M|ModelProto_SentencePiece::~ModelProto_SentencePiece() {
 2570|       |  // @@protoc_insertion_point(destructor:sentencepiece.ModelProto.SentencePiece)
 2571|  2.32M|  SharedDtor(*this);
 2572|  2.32M|}
_ZNK13sentencepiece24ModelProto_SentencePiece12GetClassDataEv:
 2591|  2.32M|ModelProto_SentencePiece::GetClassData() const {
 2592|  2.32M|  return ModelProto_SentencePiece_class_data_.base();
 2593|  2.32M|}
_ZNK13sentencepiece24ModelProto_SentencePiece18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE:
 2633|   112k|    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
 2634|   112k|  const ModelProto_SentencePiece& this_ = *this;
 2635|   112k|#endif  // PROTOBUF_CUSTOM_VTABLE
 2636|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 2637|       |    this_.CheckHasBitConsistency();
 2638|       |  }
 2639|       |  // @@protoc_insertion_point(serialize_to_array_start:sentencepiece.ModelProto.SentencePiece)
 2640|   112k|  ::uint32_t cached_has_bits = 0;
 2641|   112k|  (void)cached_has_bits;
 2642|       |
 2643|   112k|  cached_has_bits = this_._impl_._has_bits_[0];
 2644|       |  // optional string piece = 1;
 2645|   112k|  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (2645:7): [True: 112k, False: 0]
  ------------------
 2646|   112k|    const ::std::string& _s = this_._internal_piece();
 2647|   112k|    target = stream->WriteStringMaybeAliased(1, _s, target);
 2648|   112k|  }
 2649|       |
 2650|       |  // optional float score = 2;
 2651|   112k|  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (2651:7): [True: 106k, False: 6.26k]
  ------------------
 2652|   106k|    target = stream->EnsureSpace(target);
 2653|   106k|    target = ::_pbi::WireFormatLite::WriteFloatToArray(
 2654|   106k|        2, this_._internal_score(), target);
 2655|   106k|  }
 2656|       |
 2657|       |  // optional .sentencepiece.ModelProto.SentencePiece.Type type = 3 [default = NORMAL];
 2658|   112k|  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (2658:7): [True: 80.5k, False: 32.2k]
  ------------------
 2659|  80.5k|    target = stream->EnsureSpace(target);
 2660|  80.5k|    target = ::_pbi::WireFormatLite::WriteEnumToArray(
 2661|  80.5k|        3, this_._internal_type(), target);
 2662|  80.5k|  }
 2663|       |
 2664|       |  // All extensions.
 2665|   112k|  target = this_._impl_._extensions_._InternalSerializeAll(&default_instance(),
 2666|   112k|                                                    target, stream);
 2667|   112k|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|   112k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 7.71k, False: 105k]
  |  |  |  Branch (190:49): [Folded, False: 112k]
  |  |  |  Branch (190:58): [True: 7.71k, False: 105k]
  |  |  ------------------
  ------------------
 2668|  7.71k|    target = stream->WriteRaw(
 2669|  7.71k|        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
 2670|  7.71k|        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
 2671|  7.71k|  }
 2672|       |  // @@protoc_insertion_point(serialize_to_array_end:sentencepiece.ModelProto.SentencePiece)
 2673|   112k|  return target;
 2674|   112k|}
_ZNK13sentencepiece24ModelProto_SentencePiece12ByteSizeLongEv:
 2680|   112k|::size_t ModelProto_SentencePiece::ByteSizeLong() const {
 2681|   112k|  const ModelProto_SentencePiece& this_ = *this;
 2682|   112k|#endif  // PROTOBUF_CUSTOM_VTABLE
 2683|       |  // @@protoc_insertion_point(message_byte_size_start:sentencepiece.ModelProto.SentencePiece)
 2684|   112k|  ::size_t total_size = 0;
 2685|   112k|  total_size += this_._impl_._extensions_.ByteSize();
 2686|       |
 2687|   112k|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
 2688|       |
 2689|   112k|  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 2690|   112k|  cached_has_bits = this_._impl_._has_bits_[0];
 2691|   112k|  total_size += static_cast<bool>(0x00000002U & cached_has_bits) * 5;
 2692|   112k|  if (BatchCheckHasBit(cached_has_bits, 0x00000005U)) {
  ------------------
  |  Branch (2692:7): [True: 112k, False: 0]
  ------------------
 2693|       |    // optional string piece = 1;
 2694|   112k|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (2694:9): [True: 112k, False: 0]
  ------------------
 2695|   112k|      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 2696|   112k|                                      this_._internal_piece());
 2697|   112k|    }
 2698|       |    // optional .sentencepiece.ModelProto.SentencePiece.Type type = 3 [default = NORMAL];
 2699|   112k|    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (2699:9): [True: 80.5k, False: 32.2k]
  ------------------
 2700|  80.5k|      total_size += 1 +
 2701|  80.5k|                    ::_pbi::WireFormatLite::EnumSize(this_._internal_type());
 2702|  80.5k|    }
 2703|   112k|  }
 2704|   112k|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|   112k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 7.71k, False: 105k]
  |  |  |  Branch (190:49): [Folded, False: 112k]
  |  |  |  Branch (190:58): [True: 7.71k, False: 105k]
  |  |  ------------------
  ------------------
 2705|  7.71k|    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
 2706|  7.71k|  }
 2707|   112k|  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
 2708|   112k|  return total_size;
 2709|   112k|}
_ZN13sentencepiece24ModelProto_SentencePiece17IsInitializedImplERKN6google8protobuf11MessageLiteE:
 2751|  2.07M|    const MessageLite& msg) {
 2752|  2.07M|  auto& this_ = static_cast<const ModelProto_SentencePiece&>(msg);
 2753|  2.07M|  if (!this_._impl_._extensions_.IsInitialized(this_.GetArena(),
  ------------------
  |  Branch (2753:7): [True: 0, False: 2.07M]
  ------------------
 2754|  2.07M|                                        &default_instance())) {
 2755|      0|    return false;
 2756|      0|  }
 2757|  2.07M|  return true;
 2758|  2.07M|}
_ZN13sentencepiece10ModelProtoC2EPN6google8protobuf5ArenaE:
 2782|  12.3k|    : Super_(arena) {
 2783|  12.3k|#endif  // PROTOBUF_CUSTOM_VTABLE
 2784|  12.3k|  SharedCtor(arena);
 2785|       |  // @@protoc_insertion_point(arena_constructor:sentencepiece.ModelProto)
 2786|  12.3k|}
_ZN13sentencepiece10ModelProtoD2Ev:
 2851|  12.3k|ModelProto::~ModelProto() {
 2852|       |  // @@protoc_insertion_point(destructor:sentencepiece.ModelProto)
 2853|  12.3k|  SharedDtor(*this);
 2854|  12.3k|}
_ZNK13sentencepiece10ModelProto12GetClassDataEv:
 2875|  20.1k|ModelProto::GetClassData() const {
 2876|  20.1k|  return ModelProto_class_data_.base();
 2877|  20.1k|}
_ZN13sentencepiece10ModelProto5ClearEv:
 2890|  12.3k|PROTOBUF_NOINLINE void ModelProto::Clear() {
 2891|  12.3k|  auto& this_ [[maybe_unused]] = *this;
 2892|       |  // @@protoc_insertion_point(message_clear_start:sentencepiece.ModelProto)
 2893|  12.3k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 2894|  12.3k|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
 2895|       |
 2896|  12.3k|  _impl_._extensions_.Clear();
 2897|  12.3k|  cached_has_bits = this_._impl_._has_bits_[0];
 2898|  12.3k|  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
  ------------------
  |  Branch (2898:7): [True: 0, False: 12.3k]
  ------------------
 2899|      0|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (2899:9): [True: 0, False: 0]
  ------------------
 2900|      0|      _impl_.pieces_.Clear();
 2901|      0|    }
 2902|      0|    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (2902:9): [True: 0, False: 0]
  ------------------
 2903|      0|      ABSL_DCHECK(this_._impl_.trainer_spec_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2904|      0|      this_._impl_.trainer_spec_->Clear();
 2905|      0|    }
 2906|      0|    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (2906:9): [True: 0, False: 0]
  ------------------
 2907|      0|      ABSL_DCHECK(this_._impl_.normalizer_spec_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2908|      0|      this_._impl_.normalizer_spec_->Clear();
 2909|      0|    }
 2910|      0|    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (2910:9): [True: 0, False: 0]
  ------------------
 2911|      0|      ABSL_DCHECK(this_._impl_.denormalizer_spec_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2912|      0|      this_._impl_.denormalizer_spec_->Clear();
 2913|      0|    }
 2914|      0|  }
 2915|  12.3k|  _impl_._has_bits_.Clear();
 2916|  12.3k|  _internal_metadata_.Clear<::std::string>();
 2917|  12.3k|}
_ZNK13sentencepiece10ModelProto18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE:
 2927|  6.81k|    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
 2928|  6.81k|  const ModelProto& this_ = *this;
 2929|  6.81k|#endif  // PROTOBUF_CUSTOM_VTABLE
 2930|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 2931|       |    this_.CheckHasBitConsistency();
 2932|       |  }
 2933|       |  // @@protoc_insertion_point(serialize_to_array_start:sentencepiece.ModelProto)
 2934|  6.81k|  ::uint32_t cached_has_bits = 0;
 2935|  6.81k|  (void)cached_has_bits;
 2936|       |
 2937|  6.81k|  cached_has_bits = this_._impl_._has_bits_[0];
 2938|       |  // repeated .sentencepiece.ModelProto.SentencePiece pieces = 1;
 2939|  6.81k|  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (2939:7): [True: 6.81k, False: 0]
  ------------------
 2940|  6.81k|    for (unsigned i = 0, n = static_cast<unsigned>(
 2941|  6.81k|                             this_._internal_pieces_size());
 2942|   119k|         i < n; i++) {
  ------------------
  |  Branch (2942:10): [True: 112k, False: 6.81k]
  ------------------
 2943|   112k|      const auto& repfield = this_._internal_pieces().Get(i);
 2944|   112k|      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 2945|   112k|          1, repfield, repfield.GetCachedSize(), target,
 2946|   112k|          stream);
 2947|   112k|    }
 2948|  6.81k|  }
 2949|       |
 2950|       |  // optional .sentencepiece.TrainerSpec trainer_spec = 2;
 2951|  6.81k|  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (2951:7): [True: 3.92k, False: 2.88k]
  ------------------
 2952|  3.92k|    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 2953|  3.92k|        2, *this_._impl_.trainer_spec_, this_._impl_.trainer_spec_->GetCachedSize(), target,
 2954|  3.92k|        stream);
 2955|  3.92k|  }
 2956|       |
 2957|       |  // optional .sentencepiece.NormalizerSpec normalizer_spec = 3;
 2958|  6.81k|  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (2958:7): [True: 223, False: 6.58k]
  ------------------
 2959|    223|    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 2960|    223|        3, *this_._impl_.normalizer_spec_, this_._impl_.normalizer_spec_->GetCachedSize(), target,
 2961|    223|        stream);
 2962|    223|  }
 2963|       |
 2964|       |  // optional .sentencepiece.NormalizerSpec denormalizer_spec = 5;
 2965|  6.81k|  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (2965:7): [True: 172, False: 6.63k]
  ------------------
 2966|    172|    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 2967|    172|        5, *this_._impl_.denormalizer_spec_, this_._impl_.denormalizer_spec_->GetCachedSize(), target,
 2968|    172|        stream);
 2969|    172|  }
 2970|       |
 2971|       |  // All extensions.
 2972|  6.81k|  target = this_._impl_._extensions_._InternalSerializeAll(&default_instance(),
 2973|  6.81k|                                                    target, stream);
 2974|  6.81k|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|  6.81k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.62k, False: 4.18k]
  |  |  |  Branch (190:49): [Folded, False: 6.81k]
  |  |  |  Branch (190:58): [True: 2.62k, False: 4.18k]
  |  |  ------------------
  ------------------
 2975|  2.62k|    target = stream->WriteRaw(
 2976|  2.62k|        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
 2977|  2.62k|        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
 2978|  2.62k|  }
 2979|       |  // @@protoc_insertion_point(serialize_to_array_end:sentencepiece.ModelProto)
 2980|  6.81k|  return target;
 2981|  6.81k|}
_ZNK13sentencepiece10ModelProto12ByteSizeLongEv:
 2987|  6.81k|::size_t ModelProto::ByteSizeLong() const {
 2988|  6.81k|  const ModelProto& this_ = *this;
 2989|  6.81k|#endif  // PROTOBUF_CUSTOM_VTABLE
 2990|       |  // @@protoc_insertion_point(message_byte_size_start:sentencepiece.ModelProto)
 2991|  6.81k|  ::size_t total_size = 0;
 2992|  6.81k|  total_size += this_._impl_._extensions_.ByteSize();
 2993|       |
 2994|  6.81k|  ::uint32_t cached_has_bits [[maybe_unused]] = 0;
 2995|       |
 2996|  6.81k|  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 2997|  6.81k|  cached_has_bits = this_._impl_._has_bits_[0];
 2998|  6.81k|  if (BatchCheckHasBit(cached_has_bits, 0x0000000fU)) {
  ------------------
  |  Branch (2998:7): [True: 6.81k, False: 0]
  ------------------
 2999|       |    // repeated .sentencepiece.ModelProto.SentencePiece pieces = 1;
 3000|  6.81k|    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
  ------------------
  |  Branch (3000:9): [True: 6.81k, False: 0]
  ------------------
 3001|  6.81k|      total_size += 1UL * this_._internal_pieces_size();
 3002|   112k|      for (const auto& msg : this_._internal_pieces()) {
  ------------------
  |  Branch (3002:28): [True: 112k, False: 6.81k]
  ------------------
 3003|   112k|        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
 3004|   112k|      }
 3005|  6.81k|    }
 3006|       |    // optional .sentencepiece.TrainerSpec trainer_spec = 2;
 3007|  6.81k|    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
  ------------------
  |  Branch (3007:9): [True: 3.92k, False: 2.88k]
  ------------------
 3008|  3.92k|      total_size += 1 +
 3009|  3.92k|                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.trainer_spec_);
 3010|  3.92k|    }
 3011|       |    // optional .sentencepiece.NormalizerSpec normalizer_spec = 3;
 3012|  6.81k|    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
  ------------------
  |  Branch (3012:9): [True: 223, False: 6.58k]
  ------------------
 3013|    223|      total_size += 1 +
 3014|    223|                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.normalizer_spec_);
 3015|    223|    }
 3016|       |    // optional .sentencepiece.NormalizerSpec denormalizer_spec = 5;
 3017|  6.81k|    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
  ------------------
  |  Branch (3017:9): [True: 172, False: 6.63k]
  ------------------
 3018|    172|      total_size += 1 +
 3019|    172|                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.denormalizer_spec_);
 3020|    172|    }
 3021|  6.81k|  }
 3022|  6.81k|  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  190|  6.81k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (190:31): [True: 2.62k, False: 4.18k]
  |  |  |  Branch (190:49): [Folded, False: 6.81k]
  |  |  |  Branch (190:58): [True: 2.62k, False: 4.18k]
  |  |  ------------------
  ------------------
 3023|  2.62k|    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
 3024|  2.62k|  }
 3025|  6.81k|  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
 3026|  6.81k|  return total_size;
 3027|  6.81k|}
_ZN13sentencepiece10ModelProto17IsInitializedImplERKN6google8protobuf11MessageLiteE:
 3089|  7.73k|    const MessageLite& msg) {
 3090|  7.73k|  auto& this_ = static_cast<const ModelProto&>(msg);
 3091|  7.73k|  if (!this_._impl_._extensions_.IsInitialized(this_.GetArena(),
  ------------------
  |  Branch (3091:7): [True: 0, False: 7.73k]
  ------------------
 3092|  7.73k|                                        &default_instance())) {
 3093|      0|    return false;
 3094|      0|  }
 3095|  7.73k|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_pieces()))
  ------------------
  |  Branch (3095:7): [True: 0, False: 7.73k]
  ------------------
 3096|      0|    return false;
 3097|  7.73k|  if (CheckHasBit(this_._impl_._has_bits_[0], 0x00000002U)) {
  ------------------
  |  Branch (3097:7): [True: 4.28k, False: 3.45k]
  ------------------
 3098|  4.28k|    if (!this_._impl_.trainer_spec_->IsInitialized()) return false;
  ------------------
  |  Branch (3098:9): [True: 0, False: 4.28k]
  ------------------
 3099|  4.28k|  }
 3100|  7.73k|  if (CheckHasBit(this_._impl_._has_bits_[0], 0x00000004U)) {
  ------------------
  |  Branch (3100:7): [True: 323, False: 7.41k]
  ------------------
 3101|    323|    if (!this_._impl_.normalizer_spec_->IsInitialized()) return false;
  ------------------
  |  Branch (3101:9): [True: 0, False: 323]
  ------------------
 3102|    323|  }
 3103|  7.73k|  if (CheckHasBit(this_._impl_._has_bits_[0], 0x00000008U)) {
  ------------------
  |  Branch (3103:7): [True: 262, False: 7.47k]
  ------------------
 3104|    262|    if (!this_._impl_.denormalizer_spec_->IsInitialized()) return false;
  ------------------
  |  Branch (3104:9): [True: 0, False: 262]
  ------------------
 3105|    262|  }
 3106|  7.73k|  return true;
 3107|  7.73k|}
_ZN13sentencepiece11TrainerSpec10SharedDtorERN6google8protobuf11MessageLiteE:
 1253|  6.98k|inline void TrainerSpec::SharedDtor(MessageLite& self) {
 1254|  6.98k|  TrainerSpec& this_ = static_cast<TrainerSpec&>(self);
 1255|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 1256|       |    this_.CheckHasBitConsistency();
 1257|       |  }
 1258|  6.98k|  this_._internal_metadata_.Delete<::std::string>();
 1259|  6.98k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  6.98k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  6.98k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  13.9k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  6.98k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  13.9k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  13.9k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.98k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.98k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.98k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.98k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.98k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  13.9k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  13.9k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1260|  6.98k|  this_._impl_.model_prefix_.Destroy();
 1261|  6.98k|  this_._impl_.input_format_.Destroy();
 1262|  6.98k|  this_._impl_.unk_surface_.Destroy();
 1263|  6.98k|  this_._impl_.unk_piece_.Destroy();
 1264|  6.98k|  this_._impl_.required_chars_.Destroy();
 1265|  6.98k|  this_._impl_.bos_piece_.Destroy();
 1266|  6.98k|  this_._impl_.eos_piece_.Destroy();
 1267|  6.98k|  this_._impl_.pad_piece_.Destroy();
 1268|  6.98k|  this_._impl_.pretokenization_delimiter_.Destroy();
 1269|  6.98k|  this_._impl_.seed_sentencepieces_file_.Destroy();
 1270|  6.98k|  this_._impl_.~Impl_();
 1271|  6.98k|}
_ZN13sentencepiece14NormalizerSpec10SharedDtorERN6google8protobuf11MessageLiteE:
 2264|  1.14k|inline void NormalizerSpec::SharedDtor(MessageLite& self) {
 2265|  1.14k|  NormalizerSpec& this_ = static_cast<NormalizerSpec&>(self);
 2266|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 2267|       |    this_.CheckHasBitConsistency();
 2268|       |  }
 2269|  1.14k|  this_._internal_metadata_.Delete<::std::string>();
 2270|  1.14k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  1.14k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  1.14k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  2.28k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  1.14k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  2.28k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  2.28k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1.14k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  1.14k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1.14k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  1.14k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1.14k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  2.28k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  2.28k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2271|  1.14k|  this_._impl_.name_.Destroy();
 2272|  1.14k|  this_._impl_.precompiled_charsmap_.Destroy();
 2273|  1.14k|  this_._impl_.normalization_rule_tsv_.Destroy();
 2274|  1.14k|  this_._impl_.~Impl_();
 2275|  1.14k|}
_ZN13sentencepiece24ModelProto_SentencePiece10SharedDtorERN6google8protobuf11MessageLiteE:
 2573|  2.32M|inline void ModelProto_SentencePiece::SharedDtor(MessageLite& self) {
 2574|  2.32M|  ModelProto_SentencePiece& this_ = static_cast<ModelProto_SentencePiece&>(self);
 2575|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 2576|       |    this_.CheckHasBitConsistency();
 2577|       |  }
 2578|  2.32M|  this_._internal_metadata_.Delete<::std::string>();
 2579|  2.32M|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  2.32M|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  2.32M|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.65M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  2.32M|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  4.65M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  4.65M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.32M, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.32M|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.32M]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.32M|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.32M, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  4.65M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  4.65M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2580|  2.32M|  this_._impl_.piece_.Destroy();
 2581|  2.32M|  this_._impl_.~Impl_();
 2582|  2.32M|}
_ZN13sentencepiece10ModelProto10SharedCtorEPN6google8protobuf5ArenaE:
 2842|  12.3k|inline void ModelProto::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
 2843|  12.3k|  new (&_impl_) Impl_(internal_visibility(), arena);
 2844|  12.3k|  ::memset(reinterpret_cast<char*>(&_impl_) +
 2845|  12.3k|               offsetof(Impl_, trainer_spec_),
 2846|  12.3k|           0,
 2847|  12.3k|           offsetof(Impl_, denormalizer_spec_) -
 2848|       |               offsetof(Impl_, trainer_spec_) +
 2849|  12.3k|               sizeof(Impl_::denormalizer_spec_));
 2850|  12.3k|}
_ZN13sentencepiece10ModelProto5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS3_5ArenaE:
 2834|  12.3k|      : _extensions_ {}
 2835|       |        ,
 2836|  12.3k|        pieces_ { visibility, ::_pbi::InternalMetadataOffset::Build<
 2837|  12.3k|            ::sentencepiece::ModelProto,
 2838|  12.3k|            PROTOBUF_FIELD_OFFSET(::sentencepiece::ModelProto, _impl_.pieces_)>()
 2839|  12.3k|         }
 2840|  12.3k|     {}
_ZN13sentencepiece10ModelProto10SharedDtorERN6google8protobuf11MessageLiteE:
 2855|  12.3k|inline void ModelProto::SharedDtor(MessageLite& self) {
 2856|  12.3k|  ModelProto& this_ = static_cast<ModelProto&>(self);
 2857|       |  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
 2858|       |    this_.CheckHasBitConsistency();
 2859|       |  }
 2860|  12.3k|  this_._internal_metadata_.Delete<::std::string>();
 2861|  12.3k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  12.3k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   44|  12.3k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  24.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  180|  12.3k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  24.7k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  24.7k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 12.3k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  12.3k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 12.3k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  12.3k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 12.3k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|  24.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   29|  24.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2862|  12.3k|  delete this_._impl_.trainer_spec_;
 2863|  12.3k|  delete this_._impl_.normalizer_spec_;
 2864|  12.3k|  delete this_._impl_.denormalizer_spec_;
 2865|  12.3k|  this_._impl_.~Impl_();
 2866|  12.3k|}

_ZNK13sentencepiece10ModelProto12trainer_specEv:
 5007|   125M|inline const ::sentencepiece::TrainerSpec& ModelProto::trainer_spec() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5008|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.trainer_spec)
 5009|   125M|  return _internal_trainer_spec();
 5010|   125M|}
_ZNK13sentencepiece10ModelProto22_internal_trainer_specEv:
 5002|   125M|inline const ::sentencepiece::TrainerSpec& ModelProto::_internal_trainer_spec() const {
 5003|   125M|  ::google::protobuf::internal::TSanRead(&_impl_);
 5004|   125M|  const ::sentencepiece::TrainerSpec* p = _impl_.trainer_spec_;
 5005|   125M|  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::sentencepiece::TrainerSpec>(&::sentencepiece::TrainerSpec_globals_);
  ------------------
  |  Branch (5005:10): [True: 83.9M, False: 41.6M]
  ------------------
 5006|   125M|}
_ZNK13sentencepiece11TrainerSpec13byte_fallbackEv:
 3611|   125M|inline bool TrainerSpec::byte_fallback() const {
 3612|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.byte_fallback)
 3613|   125M|  return _internal_byte_fallback();
 3614|   125M|}
_ZNK13sentencepiece11TrainerSpec23_internal_byte_fallbackEv:
 3620|   125M|inline bool TrainerSpec::_internal_byte_fallback() const {
 3621|   125M|  ::google::protobuf::internal::TSanRead(&_impl_);
 3622|   125M|  return _impl_.byte_fallback_;
 3623|   125M|}
_ZNK13sentencepiece10ModelProto11pieces_sizeEv:
 4940|   602M|inline int ModelProto::pieces_size() const {
 4941|   602M|  return _internal_pieces_size();
 4942|   602M|}
_ZNK13sentencepiece10ModelProto21_internal_pieces_sizeEv:
 4937|   602M|inline int ModelProto::_internal_pieces_size() const {
 4938|   602M|  return _internal_pieces().size();
 4939|   602M|}
_ZNK13sentencepiece10ModelProto16_internal_piecesEv:
 4981|  1.49G|ModelProto::_internal_pieces() const {
 4982|  1.49G|  ::google::protobuf::internal::TSanRead(&_impl_);
 4983|  1.49G|  return _impl_.pieces_;
 4984|  1.49G|}
_ZN13sentencepiece10ModelProto14mutable_piecesEi:
 4954|   125k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4955|       |  // @@protoc_insertion_point(field_mutable:sentencepiece.ModelProto.pieces)
 4956|   125k|  return _internal_mutable_pieces()->Mutable(index);
 4957|   125k|}
_ZN13sentencepiece10ModelProto24_internal_mutable_piecesEv:
 4986|   125k|ModelProto::_internal_mutable_pieces() {
 4987|   125k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4988|   125k|  return &_impl_.pieces_;
 4989|   125k|}
_ZNK13sentencepiece24ModelProto_SentencePiece5pieceEv:
 4816|  54.5M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4817|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.SentencePiece.piece)
 4818|  54.5M|  return _internal_piece();
 4819|  54.5M|}
_ZNK13sentencepiece24ModelProto_SentencePiece15_internal_pieceEv:
 4834|  54.8M|inline const ::std::string& ModelProto_SentencePiece::_internal_piece() const {
 4835|  54.8M|  ::google::protobuf::internal::TSanRead(&_impl_);
 4836|  54.8M|  return _impl_.piece_.Get();
 4837|  54.8M|}
_ZN13sentencepiece24ModelProto_SentencePiece8set_typeENS_29ModelProto_SentencePiece_TypeE:
 4915|  2.92k|inline void ModelProto_SentencePiece::set_type(::sentencepiece::ModelProto_SentencePiece_Type value) {
 4916|  2.92k|  _internal_set_type(value);
 4917|  2.92k|  SetHasBit(_impl_._has_bits_[0], 0x00000004U);
 4918|       |  // @@protoc_insertion_point(field_set:sentencepiece.ModelProto.SentencePiece.type)
 4919|  2.92k|}
_ZN13sentencepiece24ModelProto_SentencePiece18_internal_set_typeENS_29ModelProto_SentencePiece_TypeE:
 4924|  2.92k|inline void ModelProto_SentencePiece::_internal_set_type(::sentencepiece::ModelProto_SentencePiece_Type value) {
 4925|  2.92k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 4926|       |
 4927|       |                                          assert(::google::protobuf::internal::ValidateEnum(
 4928|  2.92k|                                              value, ::sentencepiece::ModelProto_SentencePiece_Type_internal_data_));
 4929|  2.92k|                                          _impl_.type_ = value;
 4930|  2.92k|}
_ZNK13sentencepiece10ModelProto15normalizer_specEv:
 5105|  37.1k|inline const ::sentencepiece::NormalizerSpec& ModelProto::normalizer_spec() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5106|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.normalizer_spec)
 5107|  37.1k|  return _internal_normalizer_spec();
 5108|  37.1k|}
_ZNK13sentencepiece10ModelProto25_internal_normalizer_specEv:
 5100|  37.1k|inline const ::sentencepiece::NormalizerSpec& ModelProto::_internal_normalizer_spec() const {
 5101|  37.1k|  ::google::protobuf::internal::TSanRead(&_impl_);
 5102|  37.1k|  const ::sentencepiece::NormalizerSpec* p = _impl_.normalizer_spec_;
 5103|  37.1k|  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::sentencepiece::NormalizerSpec>(&::sentencepiece::NormalizerSpec_globals_);
  ------------------
  |  Branch (5103:10): [True: 5.81k, False: 31.3k]
  ------------------
 5104|  37.1k|}
_ZNK13sentencepiece10ModelProto21has_denormalizer_specEv:
 5188|  7.73k|inline bool ModelProto::has_denormalizer_spec() const {
 5189|  7.73k|  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000008U);
 5190|  7.73k|  PROTOBUF_ASSUME(!value || _impl_.denormalizer_spec_ != nullptr);
  ------------------
  |  |  733|  8.00k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (733:48): [True: 7.47k, False: 262]
  |  |  |  Branch (733:48): [True: 262, False: 0]
  |  |  ------------------
  ------------------
 5191|  7.73k|  return value;
 5192|  7.73k|}
_ZNK13sentencepiece10ModelProto17denormalizer_specEv:
 5203|    296|inline const ::sentencepiece::NormalizerSpec& ModelProto::denormalizer_spec() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 5204|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.denormalizer_spec)
 5205|    296|  return _internal_denormalizer_spec();
 5206|    296|}
_ZNK13sentencepiece10ModelProto27_internal_denormalizer_specEv:
 5198|    296|inline const ::sentencepiece::NormalizerSpec& ModelProto::_internal_denormalizer_spec() const {
 5199|    296|  ::google::protobuf::internal::TSanRead(&_impl_);
 5200|    296|  const ::sentencepiece::NormalizerSpec* p = _impl_.denormalizer_spec_;
 5201|    296|  return p != nullptr ? *p : *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<::sentencepiece::NormalizerSpec>(&::sentencepiece::NormalizerSpec_globals_);
  ------------------
  |  Branch (5201:10): [True: 296, False: 0]
  ------------------
 5202|    296|}
_ZNK13sentencepiece14NormalizerSpec20precompiled_charsmapEv:
 4592|  8.03k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4593|       |  // @@protoc_insertion_point(field_get:sentencepiece.NormalizerSpec.precompiled_charsmap)
 4594|  8.03k|  return _internal_precompiled_charsmap();
 4595|  8.03k|}
_ZNK13sentencepiece14NormalizerSpec30_internal_precompiled_charsmapEv:
 4610|  8.06k|inline const ::std::string& NormalizerSpec::_internal_precompiled_charsmap() const {
 4611|  8.06k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4612|  8.06k|  return _impl_.precompiled_charsmap_.Get();
 4613|  8.06k|}
_ZNK13sentencepiece11TrainerSpec15has_unk_surfaceEv:
 4082|  10.6k|inline bool TrainerSpec::has_unk_surface() const {
 4083|  10.6k|  bool value = CheckHasBit(_impl_._has_bits_[0], 0x00000040U);
 4084|  10.6k|  return value;
 4085|  10.6k|}
_ZNK13sentencepiece11TrainerSpec11unk_surfaceEv:
 4092|    106|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4093|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.unk_surface)
 4094|    106|  if (_impl_.unk_surface_.IsDefault()) {
  ------------------
  |  Branch (4094:7): [True: 0, False: 106]
  ------------------
 4095|      0|    return Impl_::_i_give_permission_to_break_this_code_default_unk_surface_.get();
 4096|      0|  }
 4097|    106|  return _internal_unk_surface();
 4098|    106|}
_ZNK13sentencepiece11TrainerSpec21_internal_unk_surfaceEv:
 4113|    224|inline const ::std::string& TrainerSpec::_internal_unk_surface() const {
 4114|    224|  ::google::protobuf::internal::TSanRead(&_impl_);
 4115|    224|  return _impl_.unk_surface_.Get();
 4116|    224|}
_ZNK13sentencepiece14NormalizerSpec16add_dummy_prefixEv:
 4659|  51.5k|inline bool NormalizerSpec::add_dummy_prefix() const {
 4660|       |  // @@protoc_insertion_point(field_get:sentencepiece.NormalizerSpec.add_dummy_prefix)
 4661|  51.5k|  return _internal_add_dummy_prefix();
 4662|  51.5k|}
_ZNK13sentencepiece14NormalizerSpec26_internal_add_dummy_prefixEv:
 4668|  51.6k|inline bool NormalizerSpec::_internal_add_dummy_prefix() const {
 4669|  51.6k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4670|  51.6k|  return _impl_.add_dummy_prefix_;
 4671|  51.6k|}
_ZNK13sentencepiece14NormalizerSpec24remove_extra_whitespacesEv:
 4687|   586M|inline bool NormalizerSpec::remove_extra_whitespaces() const {
 4688|       |  // @@protoc_insertion_point(field_get:sentencepiece.NormalizerSpec.remove_extra_whitespaces)
 4689|   586M|  return _internal_remove_extra_whitespaces();
 4690|   586M|}
_ZNK13sentencepiece14NormalizerSpec34_internal_remove_extra_whitespacesEv:
 4696|   586M|inline bool NormalizerSpec::_internal_remove_extra_whitespaces() const {
 4697|   586M|  ::google::protobuf::internal::TSanRead(&_impl_);
 4698|   586M|  return _impl_.remove_extra_whitespaces_;
 4699|   586M|}
_ZNK13sentencepiece11TrainerSpec34_internal_max_sentencepiece_lengthEv:
 3144|    108|inline ::int32_t TrainerSpec::_internal_max_sentencepiece_length() const {
 3145|    108|  ::google::protobuf::internal::TSanRead(&_impl_);
 3146|    108|  return _impl_.max_sentencepiece_length_;
 3147|    108|}
_ZN13sentencepiece10ModelProtoC2Ev:
 2178|  12.3k|  inline ModelProto() : ModelProto(nullptr) {}
_ZN13sentencepiece11TrainerSpec16default_instanceEv:
  199|  8.21k|  [[nodiscard]] static const TrainerSpec& default_instance() {
  200|  8.21k|    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<TrainerSpec>(&TrainerSpec_globals_);
  201|  8.21k|  }
_ZNK13sentencepiece11TrainerSpec13IsInitializedEv:
  232|  4.28k|  [[nodiscard]] bool IsInitialized() const {
  233|  4.28k|    return IsInitializedImpl(*this);
  234|  4.28k|  }
_ZNK13sentencepiece11TrainerSpec13GetCachedSizeEv:
  261|  3.92k|  [[nodiscard]] int GetCachedSize() const {
  262|  3.92k|    return _impl_._cached_size_.Get();
  263|  3.92k|  }
_ZN13sentencepiece14NormalizerSpec16default_instanceEv:
 1316|    980|  [[nodiscard]] static const NormalizerSpec& default_instance() {
 1317|    980|    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<NormalizerSpec>(&NormalizerSpec_globals_);
 1318|    980|  }
_ZNK13sentencepiece14NormalizerSpec13IsInitializedEv:
 1349|    585|  [[nodiscard]] bool IsInitialized() const {
 1350|    585|    return IsInitializedImpl(*this);
 1351|    585|  }
_ZNK13sentencepiece14NormalizerSpec13GetCachedSizeEv:
 1378|    395|  [[nodiscard]] int GetCachedSize() const {
 1379|    395|    return _impl_._cached_size_.Get();
 1380|    395|  }
_ZN13sentencepiece24ModelProto_SentencePiece16default_instanceEv:
 1781|  2.18M|  [[nodiscard]] static const ModelProto_SentencePiece& default_instance() {
 1782|  2.18M|    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ModelProto_SentencePiece>(&ModelProto_SentencePiece_globals_);
 1783|  2.18M|  }
_ZNK13sentencepiece24ModelProto_SentencePiece13IsInitializedEv:
 1814|  2.07M|  [[nodiscard]] bool IsInitialized() const {
 1815|  2.07M|    return IsInitializedImpl(*this);
 1816|  2.07M|  }
_ZNK13sentencepiece24ModelProto_SentencePiece13GetCachedSizeEv:
 1843|   112k|  [[nodiscard]] int GetCachedSize() const {
 1844|   112k|    return _impl_._cached_size_.Get();
 1845|   112k|  }
_ZN13sentencepiece10ModelProto16default_instanceEv:
 2218|  14.5k|  [[nodiscard]] static const ModelProto& default_instance() {
 2219|  14.5k|    return *::google::protobuf::internal::MessageGlobalsBase::ToDefaultInstance<ModelProto>(&ModelProto_globals_);
 2220|  14.5k|  }
_ZNK13sentencepiece11TrainerSpec20_internal_input_sizeEv:
 2635|  2.25k|inline int TrainerSpec::_internal_input_size() const {
 2636|  2.25k|  return _internal_input().size();
 2637|  2.25k|}
_ZNK13sentencepiece11TrainerSpec15_internal_inputEv:
 2696|  14.5k|TrainerSpec::_internal_input() const {
 2697|  14.5k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2698|  14.5k|  return _impl_.input_;
 2699|  14.5k|}
_ZNK13sentencepiece11TrainerSpec22_internal_input_formatEv:
 2735|    160|inline const ::std::string& TrainerSpec::_internal_input_format() const {
 2736|    160|  ::google::protobuf::internal::TSanRead(&_impl_);
 2737|    160|  return _impl_.input_format_.Get();
 2738|    160|}
_ZNK13sentencepiece11TrainerSpec22_internal_model_prefixEv:
 2803|     62|inline const ::std::string& TrainerSpec::_internal_model_prefix() const {
 2804|     62|  ::google::protobuf::internal::TSanRead(&_impl_);
 2805|     62|  return _impl_.model_prefix_.Get();
 2806|     62|}
_ZNK13sentencepiece11TrainerSpec10model_typeEv:
 2852|  7.73k|inline ::sentencepiece::TrainerSpec_ModelType TrainerSpec::model_type() const {
 2853|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.model_type)
 2854|  7.73k|  return _internal_model_type();
 2855|  7.73k|}
_ZNK13sentencepiece11TrainerSpec20_internal_model_typeEv:
 2861|  14.4k|inline ::sentencepiece::TrainerSpec_ModelType TrainerSpec::_internal_model_type() const {
 2862|  14.4k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2863|  14.4k|  return static_cast<::sentencepiece::TrainerSpec_ModelType>(_impl_.model_type_);
 2864|  14.4k|}
_ZNK13sentencepiece11TrainerSpec20_internal_vocab_sizeEv:
 2892|  1.00k|inline ::int32_t TrainerSpec::_internal_vocab_size() const {
 2893|  1.00k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2894|  1.00k|  return _impl_.vocab_size_;
 2895|  1.00k|}
_ZNK13sentencepiece11TrainerSpec28_internal_character_coverageEv:
 2920|     15|inline float TrainerSpec::_internal_character_coverage() const {
 2921|     15|  ::google::protobuf::internal::TSanRead(&_impl_);
 2922|     15|  return _impl_.character_coverage_;
 2923|     15|}
_ZNK13sentencepiece11TrainerSpec29_internal_input_sentence_sizeEv:
 2948|    298|inline ::uint64_t TrainerSpec::_internal_input_sentence_size() const {
 2949|    298|  ::google::protobuf::internal::TSanRead(&_impl_);
 2950|    298|  return _impl_.input_sentence_size_;
 2951|    298|}
_ZNK13sentencepiece11TrainerSpec32_internal_shuffle_input_sentenceEv:
 2976|      2|inline bool TrainerSpec::_internal_shuffle_input_sentence() const {
 2977|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
 2978|      2|  return _impl_.shuffle_input_sentence_;
 2979|      2|}
_ZNK13sentencepiece11TrainerSpec33_internal_seed_sentencepiece_sizeEv:
 3004|    126|inline ::int32_t TrainerSpec::_internal_seed_sentencepiece_size() const {
 3005|    126|  ::google::protobuf::internal::TSanRead(&_impl_);
 3006|    126|  return _impl_.seed_sentencepiece_size_;
 3007|    126|}
_ZNK13sentencepiece11TrainerSpec26_internal_shrinking_factorEv:
 3032|      2|inline float TrainerSpec::_internal_shrinking_factor() const {
 3033|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
 3034|      2|  return _impl_.shrinking_factor_;
 3035|      2|}
_ZNK13sentencepiece11TrainerSpec29_internal_max_sentence_lengthEv:
 3060|     84|inline ::int32_t TrainerSpec::_internal_max_sentence_length() const {
 3061|     84|  ::google::protobuf::internal::TSanRead(&_impl_);
 3062|     84|  return _impl_.max_sentence_length_;
 3063|     84|}
_ZNK13sentencepiece11TrainerSpec21_internal_num_threadsEv:
 3088|     84|inline ::int32_t TrainerSpec::_internal_num_threads() const {
 3089|     84|  ::google::protobuf::internal::TSanRead(&_impl_);
 3090|     84|  return _impl_.num_threads_;
 3091|     84|}
_ZNK13sentencepiece11TrainerSpec28_internal_num_sub_iterationsEv:
 3116|     82|inline ::int32_t TrainerSpec::_internal_num_sub_iterations() const {
 3117|     82|  ::google::protobuf::internal::TSanRead(&_impl_);
 3118|     82|  return _impl_.num_sub_iterations_;
 3119|     82|}
_ZNK13sentencepiece11TrainerSpec33_internal_split_by_unicode_scriptEv:
 3172|     15|inline bool TrainerSpec::_internal_split_by_unicode_script() const {
 3173|     15|  ::google::protobuf::internal::TSanRead(&_impl_);
 3174|     15|  return _impl_.split_by_unicode_script_;
 3175|     15|}
_ZNK13sentencepiece11TrainerSpec25_internal_split_by_numberEv:
 3200|     45|inline bool TrainerSpec::_internal_split_by_number() const {
 3201|     45|  ::google::protobuf::internal::TSanRead(&_impl_);
 3202|     45|  return _impl_.split_by_number_;
 3203|     45|}
_ZNK13sentencepiece11TrainerSpec29_internal_split_by_whitespaceEv:
 3228|     50|inline bool TrainerSpec::_internal_split_by_whitespace() const {
 3229|     50|  ::google::protobuf::internal::TSanRead(&_impl_);
 3230|     50|  return _impl_.split_by_whitespace_;
 3231|     50|}
_ZNK13sentencepiece11TrainerSpec26treat_whitespace_as_suffixEv:
 3247|  7.73k|inline bool TrainerSpec::treat_whitespace_as_suffix() const {
 3248|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.treat_whitespace_as_suffix)
 3249|  7.73k|  return _internal_treat_whitespace_as_suffix();
 3250|  7.73k|}
_ZNK13sentencepiece11TrainerSpec36_internal_treat_whitespace_as_suffixEv:
 3256|  7.75k|inline bool TrainerSpec::_internal_treat_whitespace_as_suffix() const {
 3257|  7.75k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3258|  7.75k|  return _impl_.treat_whitespace_as_suffix_;
 3259|  7.75k|}
_ZNK13sentencepiece11TrainerSpec38_internal_allow_whitespace_only_piecesEv:
 3284|      2|inline bool TrainerSpec::_internal_allow_whitespace_only_pieces() const {
 3285|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
 3286|      2|  return _impl_.allow_whitespace_only_pieces_;
 3287|      2|}
_ZNK13sentencepiece11TrainerSpec22_internal_split_digitsEv:
 3312|      2|inline bool TrainerSpec::_internal_split_digits() const {
 3313|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
 3314|      2|  return _impl_.split_digits_;
 3315|      2|}
_ZNK13sentencepiece11TrainerSpec35_internal_pretokenization_delimiterEv:
 3350|     38|inline const ::std::string& TrainerSpec::_internal_pretokenization_delimiter() const {
 3351|     38|  ::google::protobuf::internal::TSanRead(&_impl_);
 3352|     38|  return _impl_.pretokenization_delimiter_.Get();
 3353|     38|}
_ZNK13sentencepiece11TrainerSpec30_internal_control_symbols_sizeEv:
 3390|     45|inline int TrainerSpec::_internal_control_symbols_size() const {
 3391|     45|  return _internal_control_symbols().size();
 3392|     45|}
_ZNK13sentencepiece11TrainerSpec25_internal_control_symbolsEv:
 3451|    409|TrainerSpec::_internal_control_symbols() const {
 3452|    409|  ::google::protobuf::internal::TSanRead(&_impl_);
 3453|    409|  return _impl_.control_symbols_;
 3454|    409|}
_ZNK13sentencepiece11TrainerSpec35_internal_user_defined_symbols_sizeEv:
 3462|     86|inline int TrainerSpec::_internal_user_defined_symbols_size() const {
 3463|     86|  return _internal_user_defined_symbols().size();
 3464|     86|}
_ZNK13sentencepiece11TrainerSpec30_internal_user_defined_symbolsEv:
 3523|  1.41k|TrainerSpec::_internal_user_defined_symbols() const {
 3524|  1.41k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3525|  1.41k|  return _impl_.user_defined_symbols_;
 3526|  1.41k|}
_ZNK13sentencepiece11TrainerSpec24_internal_required_charsEv:
 3562|     12|inline const ::std::string& TrainerSpec::_internal_required_chars() const {
 3563|     12|  ::google::protobuf::internal::TSanRead(&_impl_);
 3564|     12|  return _impl_.required_chars_.Get();
 3565|     12|}
_ZNK13sentencepiece11TrainerSpec39_internal_vocabulary_output_piece_scoreEv:
 3648|      1|inline bool TrainerSpec::_internal_vocabulary_output_piece_score() const {
 3649|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 3650|      1|  return _impl_.vocabulary_output_piece_score_;
 3651|      1|}
_ZNK13sentencepiece11TrainerSpec26_internal_hard_vocab_limitEv:
 3676|      1|inline bool TrainerSpec::_internal_hard_vocab_limit() const {
 3677|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 3678|      1|  return _impl_.hard_vocab_limit_;
 3679|      1|}
_ZNK13sentencepiece11TrainerSpec23_internal_use_all_vocabEv:
 3704|      2|inline bool TrainerSpec::_internal_use_all_vocab() const {
 3705|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
 3706|      2|  return _impl_.use_all_vocab_;
 3707|      2|}
_ZNK13sentencepiece11TrainerSpec16_internal_unk_idEv:
 3732|     96|inline ::int32_t TrainerSpec::_internal_unk_id() const {
 3733|     96|  ::google::protobuf::internal::TSanRead(&_impl_);
 3734|     96|  return _impl_.unk_id_;
 3735|     96|}
_ZNK13sentencepiece11TrainerSpec16_internal_bos_idEv:
 3760|     88|inline ::int32_t TrainerSpec::_internal_bos_id() const {
 3761|     88|  ::google::protobuf::internal::TSanRead(&_impl_);
 3762|     88|  return _impl_.bos_id_;
 3763|     88|}
_ZNK13sentencepiece11TrainerSpec16_internal_eos_idEv:
 3788|     84|inline ::int32_t TrainerSpec::_internal_eos_id() const {
 3789|     84|  ::google::protobuf::internal::TSanRead(&_impl_);
 3790|     84|  return _impl_.eos_id_;
 3791|     84|}
_ZNK13sentencepiece11TrainerSpec16_internal_pad_idEv:
 3816|     84|inline ::int32_t TrainerSpec::_internal_pad_id() const {
 3817|     84|  ::google::protobuf::internal::TSanRead(&_impl_);
 3818|     84|  return _impl_.pad_id_;
 3819|     84|}
_ZNK13sentencepiece11TrainerSpec9unk_pieceEv:
 3836|  13.6k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3837|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.unk_piece)
 3838|  13.6k|  if (_impl_.unk_piece_.IsDefault()) {
  ------------------
  |  Branch (3838:7): [True: 13.5k, False: 25]
  ------------------
 3839|  13.5k|    return Impl_::_i_give_permission_to_break_this_code_default_unk_piece_.get();
 3840|  13.5k|  }
 3841|     25|  return _internal_unk_piece();
 3842|  13.6k|}
_ZNK13sentencepiece11TrainerSpec19_internal_unk_pieceEv:
 3857|     53|inline const ::std::string& TrainerSpec::_internal_unk_piece() const {
 3858|     53|  ::google::protobuf::internal::TSanRead(&_impl_);
 3859|     53|  return _impl_.unk_piece_.Get();
 3860|     53|}
_ZNK13sentencepiece11TrainerSpec9bos_pieceEv:
 3900|  13.6k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3901|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.bos_piece)
 3902|  13.6k|  if (_impl_.bos_piece_.IsDefault()) {
  ------------------
  |  Branch (3902:7): [True: 13.5k, False: 44]
  ------------------
 3903|  13.5k|    return Impl_::_i_give_permission_to_break_this_code_default_bos_piece_.get();
 3904|  13.5k|  }
 3905|     44|  return _internal_bos_piece();
 3906|  13.6k|}
_ZNK13sentencepiece11TrainerSpec19_internal_bos_pieceEv:
 3921|    104|inline const ::std::string& TrainerSpec::_internal_bos_piece() const {
 3922|    104|  ::google::protobuf::internal::TSanRead(&_impl_);
 3923|    104|  return _impl_.bos_piece_.Get();
 3924|    104|}
_ZNK13sentencepiece11TrainerSpec9eos_pieceEv:
 3964|  13.6k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3965|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.eos_piece)
 3966|  13.6k|  if (_impl_.eos_piece_.IsDefault()) {
  ------------------
  |  Branch (3966:7): [True: 13.5k, False: 40]
  ------------------
 3967|  13.5k|    return Impl_::_i_give_permission_to_break_this_code_default_eos_piece_.get();
 3968|  13.5k|  }
 3969|     40|  return _internal_eos_piece();
 3970|  13.6k|}
_ZNK13sentencepiece11TrainerSpec19_internal_eos_pieceEv:
 3985|     98|inline const ::std::string& TrainerSpec::_internal_eos_piece() const {
 3986|     98|  ::google::protobuf::internal::TSanRead(&_impl_);
 3987|     98|  return _impl_.eos_piece_.Get();
 3988|     98|}
_ZNK13sentencepiece11TrainerSpec9pad_pieceEv:
 4028|  13.6k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4029|       |  // @@protoc_insertion_point(field_get:sentencepiece.TrainerSpec.pad_piece)
 4030|  13.6k|  if (_impl_.pad_piece_.IsDefault()) {
  ------------------
  |  Branch (4030:7): [True: 13.5k, False: 24]
  ------------------
 4031|  13.5k|    return Impl_::_i_give_permission_to_break_this_code_default_pad_piece_.get();
 4032|  13.5k|  }
 4033|     24|  return _internal_pad_piece();
 4034|  13.6k|}
_ZNK13sentencepiece11TrainerSpec19_internal_pad_pieceEv:
 4049|     64|inline const ::std::string& TrainerSpec::_internal_pad_piece() const {
 4050|     64|  ::google::protobuf::internal::TSanRead(&_impl_);
 4051|     64|  return _impl_.pad_piece_.Get();
 4052|     64|}
_ZNK13sentencepiece11TrainerSpec34_internal_seed_sentencepieces_fileEv:
 4174|     10|inline const ::std::string& TrainerSpec::_internal_seed_sentencepieces_file() const {
 4175|     10|  ::google::protobuf::internal::TSanRead(&_impl_);
 4176|     10|  return _impl_.seed_sentencepieces_file_.Get();
 4177|     10|}
_ZNK13sentencepiece11TrainerSpec33_internal_auto_character_coverageEv:
 4232|      1|inline bool TrainerSpec::_internal_auto_character_coverage() const {
 4233|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 4234|      1|  return _impl_.auto_character_coverage_;
 4235|      1|}
_ZNK13sentencepiece11TrainerSpec30_internal_accept_language_sizeEv:
 4242|    100|inline int TrainerSpec::_internal_accept_language_size() const {
 4243|    100|  return _internal_accept_language().size();
 4244|    100|}
_ZNK13sentencepiece11TrainerSpec25_internal_accept_languageEv:
 4303|  3.31k|TrainerSpec::_internal_accept_language() const {
 4304|  3.31k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4305|  3.31k|  return _impl_.accept_language_;
 4306|  3.31k|}
_ZNK13sentencepiece11TrainerSpec31_internal_self_test_sample_sizeEv:
 4332|    238|inline ::int32_t TrainerSpec::_internal_self_test_sample_size() const {
 4333|    238|  ::google::protobuf::internal::TSanRead(&_impl_);
 4334|    238|  return _impl_.self_test_sample_size_;
 4335|    238|}
_ZNK13sentencepiece11TrainerSpec30_internal_mining_sentence_sizeEv:
 4360|    852|inline ::int32_t TrainerSpec::_internal_mining_sentence_size() const {
 4361|    852|  ::google::protobuf::internal::TSanRead(&_impl_);
 4362|    852|  return _impl_.mining_sentence_size_;
 4363|    852|}
_ZNK13sentencepiece11TrainerSpec32_internal_training_sentence_sizeEv:
 4388|    140|inline ::int32_t TrainerSpec::_internal_training_sentence_size() const {
 4389|    140|  ::google::protobuf::internal::TSanRead(&_impl_);
 4390|    140|  return _impl_.training_sentence_size_;
 4391|    140|}
_ZNK13sentencepiece11TrainerSpec38_internal_train_extremely_large_corpusEv:
 4416|      1|inline bool TrainerSpec::_internal_train_extremely_large_corpus() const {
 4417|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 4418|      1|  return _impl_.train_extremely_large_corpus_;
 4419|      1|}
_ZNK13sentencepiece11TrainerSpec37_internal_enable_differential_privacyEv:
 4444|      1|inline bool TrainerSpec::_internal_enable_differential_privacy() const {
 4445|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 4446|      1|  return _impl_.enable_differential_privacy_;
 4447|      1|}
_ZNK13sentencepiece11TrainerSpec42_internal_differential_privacy_noise_levelEv:
 4472|      1|inline float TrainerSpec::_internal_differential_privacy_noise_level() const {
 4473|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 4474|      1|  return _impl_.differential_privacy_noise_level_;
 4475|      1|}
_ZNK13sentencepiece11TrainerSpec49_internal_differential_privacy_clipping_thresholdEv:
 4500|    186|inline ::uint64_t TrainerSpec::_internal_differential_privacy_clipping_threshold() const {
 4501|    186|  ::google::protobuf::internal::TSanRead(&_impl_);
 4502|    186|  return _impl_.differential_privacy_clipping_threshold_;
 4503|    186|}
_ZNK13sentencepiece14NormalizerSpec14_internal_nameEv:
 4542|    572|inline const ::std::string& NormalizerSpec::_internal_name() const {
 4543|    572|  ::google::protobuf::internal::TSanRead(&_impl_);
 4544|    572|  return _impl_.name_.Get();
 4545|    572|}
_ZNK13sentencepiece14NormalizerSpec18escape_whitespacesEv:
 4715|  37.1k|inline bool NormalizerSpec::escape_whitespaces() const {
 4716|       |  // @@protoc_insertion_point(field_get:sentencepiece.NormalizerSpec.escape_whitespaces)
 4717|  37.1k|  return _internal_escape_whitespaces();
 4718|  37.1k|}
_ZNK13sentencepiece14NormalizerSpec28_internal_escape_whitespacesEv:
 4724|  37.1k|inline bool NormalizerSpec::_internal_escape_whitespaces() const {
 4725|  37.1k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4726|  37.1k|  return _impl_.escape_whitespaces_;
 4727|  37.1k|}
_ZNK13sentencepiece14NormalizerSpec32_internal_normalization_rule_tsvEv:
 4762|     28|inline const ::std::string& NormalizerSpec::_internal_normalization_rule_tsv() const {
 4763|     28|  ::google::protobuf::internal::TSanRead(&_impl_);
 4764|     28|  return _impl_.normalization_rule_tsv_.Get();
 4765|     28|}
_ZNK13sentencepiece24ModelProto_SentencePiece5scoreEv:
 4883|  65.4M|inline float ModelProto_SentencePiece::score() const {
 4884|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.SentencePiece.score)
 4885|  65.4M|  return _internal_score();
 4886|  65.4M|}
_ZNK13sentencepiece24ModelProto_SentencePiece15_internal_scoreEv:
 4892|  65.5M|inline float ModelProto_SentencePiece::_internal_score() const {
 4893|  65.5M|  ::google::protobuf::internal::TSanRead(&_impl_);
 4894|  65.5M|  return _impl_.score_;
 4895|  65.5M|}
_ZNK13sentencepiece24ModelProto_SentencePiece4typeEv:
 4911|   817M|inline ::sentencepiece::ModelProto_SentencePiece_Type ModelProto_SentencePiece::type() const {
 4912|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.SentencePiece.type)
 4913|   817M|  return _internal_type();
 4914|   817M|}
_ZNK13sentencepiece24ModelProto_SentencePiece14_internal_typeEv:
 4920|   817M|inline ::sentencepiece::ModelProto_SentencePiece_Type ModelProto_SentencePiece::_internal_type() const {
 4921|   817M|  ::google::protobuf::internal::TSanRead(&_impl_);
 4922|   817M|  return static_cast<::sentencepiece::ModelProto_SentencePiece_Type>(_impl_.type_);
 4923|   817M|}
_ZNK13sentencepiece10ModelProto6piecesEi:
 4949|   893M|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4950|       |  // @@protoc_insertion_point(field_get:sentencepiece.ModelProto.pieces)
 4951|   893M|  return _internal_pieces().Get(index);
 4952|   893M|}
_ZNK13sentencepiece10ModelProto6piecesEv:
 4969|  4.24k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4970|       |  // @@protoc_insertion_point(field_list:sentencepiece.ModelProto.pieces)
 4971|  4.24k|  return _internal_pieces();
 4972|  4.24k|}

_ZN13sentencepiece3bpe5ModelC2ERKNS_10ModelProtoE:
  100|  2.19k|Model::Model(const ModelProto& model_proto) {
  101|  2.19k|  model_proto_ = &model_proto;
  102|       |  // BPE model prevents control symbols from being merged by placing them in
  103|       |  // reserved_id_map_ (which BPE merge ignores).
  104|       |  // We use PieceToIdNoReserved() during inference to bypass reserved_id_map_
  105|       |  // for performance.
  106|  2.19k|  InitializePieces(/* use_reserved_id_map= */ false);
  107|  2.19k|}
_ZN13sentencepiece3bpe5ModelD2Ev:
  109|  2.19k|Model::~Model() {}
_ZNK13sentencepiece3bpe5Model12SampleEncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEf:
  112|  10.3k|    absl::string_view normalized, float alpha) const {
  113|  10.3k|  if (!status().ok() || normalized.empty()) {
  ------------------
  |  Branch (113:7): [True: 0, False: 10.3k]
  |  Branch (113:7): [True: 214, False: 10.1k]
  |  Branch (113:25): [True: 214, False: 10.1k]
  ------------------
  114|    214|    return {};
  115|    214|  }
  116|       |
  117|  10.1k|  std::vector<Symbol> symbols;
  118|  10.1k|  symbols.reserve(normalized.size());
  119|       |
  120|       |  // Splits the input into Symbols doing longest prefix match of the input
  121|       |  // from pieces(type:UNUSED) in the vocabulary.
  122|       |  // Does character splitting as a fallback of longest prefix match.
  123|  10.1k|  int index = 0;
  124|   161M|  while (!normalized.empty()) {
  ------------------
  |  Branch (124:10): [True: 161M, False: 10.1k]
  ------------------
  125|   161M|    Symbol s;
  126|   161M|    const int mblen = matcher_->PrefixMatch(normalized, &s.freeze);
  127|   161M|    s.piece = absl::string_view(normalized.data(), mblen);
  128|   161M|    s.prev = index == 0 ? -1 : index - 1;
  ------------------
  |  Branch (128:14): [True: 10.1k, False: 161M]
  ------------------
  129|   161M|    normalized.remove_prefix(mblen);
  130|   161M|    s.next = normalized.empty() ? -1 : index + 1;
  ------------------
  |  Branch (130:14): [True: 10.1k, False: 161M]
  ------------------
  131|   161M|    ++index;
  132|   161M|    symbols.emplace_back(s);
  133|   161M|  }
  134|       |
  135|  10.1k|  if (symbols.empty()) {
  ------------------
  |  Branch (135:7): [True: 0, False: 10.1k]
  ------------------
  136|      0|    return {};
  137|      0|  }
  138|       |
  139|  10.1k|  std::vector<SymbolPair> agenda_vec;
  140|  10.1k|  agenda_vec.reserve(symbols.size());
  141|       |
  142|       |  // Reverse merge rules.
  143|       |  // key: merged symbol, value: pair of original symbols.
  144|  10.1k|  absl::flat_hash_map<absl::string_view,
  145|  10.1k|                      std::pair<absl::string_view, absl::string_view>>
  146|  10.1k|      rev_merge;
  147|       |
  148|       |  // Lookup all bigrams.
  149|  10.1k|  if (symbols.size() > 1) {
  ------------------
  |  Branch (149:7): [True: 10.1k, False: 5]
  ------------------
  150|  10.1k|    size_t left = 0;
  151|  10.1k|    size_t right = 1;
  152|  10.1k|    Symbol* symbol_left = &symbols[left];
  153|  10.1k|    Symbol* symbol_right = &symbols[right];
  154|   161M|    for (; right < symbols.size();
  ------------------
  |  Branch (154:12): [True: 161M, False: 10.1k]
  ------------------
  155|   161M|         left = right, symbol_left = symbol_right, ++right, ++symbol_right) {
  156|   161M|      if (symbol_left->freeze || symbol_right->freeze) continue;
  ------------------
  |  Branch (156:11): [True: 30.9M, False: 130M]
  |  Branch (156:34): [True: 30.1M, False: 100M]
  ------------------
  157|   100M|      const absl::string_view piece(
  158|   100M|          symbol_left->piece.data(),
  159|   100M|          symbol_left->piece.size() + symbol_right->piece.size());
  160|       |      // Use PieceToIdNoReserved() instead of PieceToId() to bypass
  161|       |      // reserved_id_map_ lookup. This is both an optimization and a design
  162|       |      // constraint to prevent CONTROL symbols (which are in reserved_id_map_)
  163|       |      // from being merged.
  164|   100M|      const int id = PieceToIdNoReserved(piece);
  165|       |      // PieceToIdNoReserved() returns unk_id_ on lookup failure (not found in
  166|       |      // pieces_). Comparing directly with unk_id_ is a fast way to check if the
  167|       |      // piece is not a mergeable normal piece, avoiding memory access overhead
  168|       |      // of IsUnknown().
  169|   100M|      if (id == unk_id_ || IsReservedId(id)) continue;
  ------------------
  |  Branch (169:11): [True: 76.2M, False: 24.1M]
  |  Branch (169:28): [True: 2.55k, False: 24.1M]
  ------------------
  170|  24.1M|      SymbolPair& h = agenda_vec.emplace_back();
  171|  24.1M|      h.left = left;
  172|  24.1M|      h.right = right;
  173|  24.1M|      h.score = GetScoreInlined(id);
  174|  24.1M|      h.size = piece.size();
  175|       |
  176|       |      // Makes `rev_merge` for resegmentation.
  177|  24.1M|      if (IsUnusedInlined(id))
  ------------------
  |  Branch (177:11): [True: 30.0k, False: 24.0M]
  ------------------
  178|  30.0k|        rev_merge[piece] =
  179|  30.0k|            std::make_pair(symbol_left->piece, symbol_right->piece);
  180|  24.1M|    }
  181|  10.1k|  }
  182|       |
  183|       |  // If alpha is >= 1.0, all merges are dropped so we can skip the entire
  184|       |  // pair agenda creation and merging process.
  185|  10.1k|  if (alpha < 1.0) {
  ------------------
  |  Branch (185:7): [True: 10.1k, False: 0]
  ------------------
  186|  10.1k|    using Agenda = std::priority_queue<SymbolPair, std::vector<SymbolPair>,
  187|  10.1k|                                       SymbolPairComparator>;
  188|  10.1k|    Agenda agenda(SymbolPairComparator(), std::move(agenda_vec));
  189|       |    // Lookup new symbol pair at [left, right] and inserts it to agenda.
  190|  10.1k|    auto MaybeAddNewSymbolPair = [this, &symbols, &agenda, &rev_merge](
  191|  10.1k|                                     int left, int right) {
  192|  10.1k|      if (left == -1 || right == -1) return;
  193|  10.1k|      const Symbol& left_symbol = symbols[left];
  194|  10.1k|      const Symbol& right_symbol = symbols[right];
  195|  10.1k|      if (left_symbol.freeze || right_symbol.freeze) return;
  196|  10.1k|      const absl::string_view piece(
  197|  10.1k|          left_symbol.piece.data(),
  198|  10.1k|          left_symbol.piece.size() + right_symbol.piece.size());
  199|       |      // Use PieceToIdNoReserved() instead of PieceToId() to bypass
  200|       |      // reserved_id_map_ lookup. This is both an optimization and a design
  201|       |      // constraint to prevent CONTROL symbols (which are in reserved_id_map_)
  202|       |      // from being merged.
  203|  10.1k|      const int id = PieceToIdNoReserved(piece);
  204|       |      // PieceToIdNoReserved() returns unk_id_ on lookup failure.
  205|       |      // See explanation above for why we compare directly with unk_id_.
  206|  10.1k|      if (id == unk_id_ || IsReservedId(id)) {
  207|  10.1k|        return;
  208|  10.1k|      }
  209|  10.1k|      SymbolPair h;
  210|  10.1k|      h.left = left;
  211|  10.1k|      h.right = right;
  212|  10.1k|      h.score = GetScoreInlined(id);
  213|  10.1k|      h.size = piece.size();
  214|  10.1k|      agenda.push(h);
  215|       |
  216|       |      // Makes `rev_merge` for resegmentation.
  217|  10.1k|      if (IsUnusedInlined(id))
  218|  10.1k|        rev_merge[piece] =
  219|  10.1k|            std::make_pair(left_symbol.piece, right_symbol.piece);
  220|  10.1k|    };
  221|       |
  222|  10.1k|    const bool use_dropout = alpha > 0.0;
  223|  10.1k|    absl::BitGen* rand_gen =
  224|  10.1k|        use_dropout ? random::GetRandomGenerator() : nullptr;
  ------------------
  |  Branch (224:9): [True: 4.05k, False: 6.07k]
  ------------------
  225|       |
  226|       |    // Main loop.
  227|  24.9M|    while (!agenda.empty()) {
  ------------------
  |  Branch (227:12): [True: 24.9M, False: 10.1k]
  ------------------
  228|       |      // Pop the top pair if it is stale.
  229|  24.9M|      const SymbolPair& top_ref = agenda.top();
  230|  24.9M|      if (symbols[top_ref.left].piece.empty() ||
  ------------------
  |  Branch (230:11): [True: 10.4M, False: 14.5M]
  ------------------
  231|  14.5M|          symbols[top_ref.right].piece.empty() ||
  ------------------
  |  Branch (231:11): [True: 731, False: 14.5M]
  ------------------
  232|  14.5M|          (symbols[top_ref.left].piece.size() +
  ------------------
  |  Branch (232:11): [True: 42.1k, False: 14.4M]
  ------------------
  233|  14.5M|               symbols[top_ref.right].piece.size() !=
  234|  14.5M|           top_ref.size)) {
  235|  10.5M|        agenda.pop();
  236|  10.5M|        continue;
  237|  10.5M|      }
  238|       |
  239|  14.4M|      SymbolPair top = agenda.top();
  240|  14.4M|      agenda.pop();
  241|       |
  242|       |      // Note that original BPE-dropout paper assumes that all merged symbols
  243|       |      // are pre computed, but here we randomly skip merge operation inside this
  244|       |      // loop. This implementation is theoretically equivalent to the original
  245|       |      // one. BPE-dropout: https://arxiv.org/pdf/1910.13267.pdf
  246|  14.4M|      if (use_dropout && absl::Bernoulli(*rand_gen, alpha)) continue;
  ------------------
  |  Branch (246:11): [True: 6.79M, False: 7.67M]
  |  Branch (246:26): [True: 3.39M, False: 3.39M]
  ------------------
  247|       |
  248|  11.0M|      Symbol& left_symbol = symbols[top.left];
  249|  11.0M|      Symbol& right_symbol = symbols[top.right];
  250|       |
  251|       |      // Replaces symbols with `top` rule.
  252|  11.0M|      left_symbol.piece = absl::string_view(
  253|  11.0M|          left_symbol.piece.data(),
  254|  11.0M|          left_symbol.piece.size() + right_symbol.piece.size());
  255|       |
  256|       |      // Updates prev/next pointers.
  257|  11.0M|      left_symbol.next = right_symbol.next;
  258|  11.0M|      if (right_symbol.next >= 0) {
  ------------------
  |  Branch (258:11): [True: 11.0M, False: 1.27k]
  ------------------
  259|  11.0M|        symbols[right_symbol.next].prev = top.left;
  260|  11.0M|      }
  261|  11.0M|      right_symbol.piece = absl::string_view("");
  262|       |
  263|       |      // Adds new symbol pairs which are newly added after symbol replacement.
  264|  11.0M|      MaybeAddNewSymbolPair(left_symbol.prev, top.left);
  265|  11.0M|      MaybeAddNewSymbolPair(top.left, left_symbol.next);
  266|  11.0M|    }
  267|  10.1k|  }
  268|       |
  269|       |  // Limit recursion depth to prevent stack overflow on malicious models
  270|       |  // with extremely deep BPE merge chains.
  271|       |
  272|  10.1k|  auto resegment = [this, &rev_merge](auto& self, absl::string_view w,
  273|  10.1k|                                      EncodeResult* output, int depth) -> void {
  274|  10.1k|    const int id = PieceToIdNoReserved(w);
  275|  10.1k|    if (depth > kMaxBpeResegmentDepth) {
  276|       |      // Gracefully stop recursion and output the merged piece as-is to avoid
  277|       |      // stack overflow.
  278|  10.1k|      output->emplace_back(w, id);
  279|  10.1k|      return;
  280|  10.1k|    }
  281|  10.1k|    if (id == unk_id_ || IsReservedId(id)) {
  282|  10.1k|      output->emplace_back(w, unk_id_);
  283|  10.1k|      return;
  284|  10.1k|    }
  285|  10.1k|    if (!IsUnusedInlined(id)) {
  286|  10.1k|      output->emplace_back(w, id);
  287|  10.1k|      return;
  288|  10.1k|    }
  289|  10.1k|    const auto p = rev_merge.find(w);
  290|  10.1k|    if (p == rev_merge.end()) {
  291|  10.1k|      output->emplace_back(w, unk_id_);
  292|  10.1k|      return;
  293|  10.1k|    }
  294|       |    // Direct recursive calls
  295|  10.1k|    self(self, p->second.first, output, depth + 1);
  296|  10.1k|    self(self, p->second.second, output, depth + 1);
  297|  10.1k|  };
  298|       |
  299|  10.1k|  EncodeResult output;
  300|  10.1k|  output.reserve(symbols.size());
  301|   150M|  for (int index = 0; index != -1; index = symbols[index].next) {
  ------------------
  |  Branch (301:23): [True: 150M, False: 10.1k]
  ------------------
  302|   150M|    if (index >= 0 && index < static_cast<int>(symbols.size())) {
  ------------------
  |  Branch (302:9): [True: 150M, False: 0]
  |  Branch (302:23): [True: 150M, False: 0]
  ------------------
  303|   150M|      resegment(resegment, symbols[index].piece, &output, 0);
  304|   150M|    }
  305|   150M|  }
  306|       |
  307|  10.1k|  return output;
  308|  10.1k|}
bpe_model.cc:_ZZNK13sentencepiece3bpe5Model12SampleEncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEfENK3$_0clEii:
  191|  22.1M|                                     int left, int right) {
  192|  22.1M|      if (left == -1 || right == -1) return;
  ------------------
  |  Branch (192:11): [True: 14, False: 22.1M]
  |  Branch (192:25): [True: 1.27k, False: 22.1M]
  ------------------
  193|  22.1M|      const Symbol& left_symbol = symbols[left];
  194|  22.1M|      const Symbol& right_symbol = symbols[right];
  195|  22.1M|      if (left_symbol.freeze || right_symbol.freeze) return;
  ------------------
  |  Branch (195:11): [True: 949, False: 22.1M]
  |  Branch (195:33): [True: 1.52k, False: 22.1M]
  ------------------
  196|  22.1M|      const absl::string_view piece(
  197|  22.1M|          left_symbol.piece.data(),
  198|  22.1M|          left_symbol.piece.size() + right_symbol.piece.size());
  199|       |      // Use PieceToIdNoReserved() instead of PieceToId() to bypass
  200|       |      // reserved_id_map_ lookup. This is both an optimization and a design
  201|       |      // constraint to prevent CONTROL symbols (which are in reserved_id_map_)
  202|       |      // from being merged.
  203|  22.1M|      const int id = PieceToIdNoReserved(piece);
  204|       |      // PieceToIdNoReserved() returns unk_id_ on lookup failure.
  205|       |      // See explanation above for why we compare directly with unk_id_.
  206|  22.1M|      if (id == unk_id_ || IsReservedId(id)) {
  ------------------
  |  Branch (206:11): [True: 21.2M, False: 861k]
  |  Branch (206:28): [True: 390, False: 860k]
  ------------------
  207|  21.2M|        return;
  208|  21.2M|      }
  209|   860k|      SymbolPair h;
  210|   860k|      h.left = left;
  211|   860k|      h.right = right;
  212|   860k|      h.score = GetScoreInlined(id);
  213|   860k|      h.size = piece.size();
  214|   860k|      agenda.push(h);
  215|       |
  216|       |      // Makes `rev_merge` for resegmentation.
  217|   860k|      if (IsUnusedInlined(id))
  ------------------
  |  Branch (217:11): [True: 17.6k, False: 843k]
  ------------------
  218|  17.6k|        rev_merge[piece] =
  219|  17.6k|            std::make_pair(left_symbol.piece, right_symbol.piece);
  220|   860k|    };
bpe_model.cc:_ZN13sentencepiece3bpe12_GLOBAL__N_120SymbolPairComparatorclERKNS1_10SymbolPairES5_:
   55|   429M|                                                      const SymbolPair& h2) {
   56|   429M|    const int32_t i1 = h1.int_score;
   57|   429M|    const int32_t i2 = h2.int_score;
   58|       |
   59|       |    // Fast path for the common case where both scores are negative because
   60|       |    // they are log-probabilities.
   61|       |    // Note: we use the fact that IEEE 754 floating point format enables
   62|       |    // to compare the integer representation of negative floats which is
   63|       |    // cheaper than using float comparison. And it works the same way for
   64|       |    // little endian and big endian machines because the IEEE 754 format is
   65|       |    // aligned with the endianness.
   66|       |    // `(i1 & i2) < 0` is an efficient way to check `i1 < 0 && i2 < 0`.
   67|   429M|    if ((i1 & i2) < 0) {
  ------------------
  |  Branch (67:9): [True: 243M, False: 185M]
  ------------------
   68|       |      // For negative floats, their integer representation order is the
   69|       |      // reverse of the float order. That is, for two negative floats f1, f2,
   70|       |      // f1 < f2 iff i1 > i2.
   71|   243M|      return (i1 > i2) || (i1 == i2 && h1.left > h2.left);
  ------------------
  |  Branch (71:14): [True: 538k, False: 243M]
  |  Branch (71:28): [True: 242M, False: 692k]
  |  Branch (71:40): [True: 111M, False: 130M]
  ------------------
   72|   243M|    }
   73|       |
   74|       |    // Slow path for uncommon cases (mixed signs or both positive).
   75|       |    // Note: the comparison between NaN and +0 and +1 can be different than
   76|       |    // if we used float numbers but it should not influence the result.
   77|   185M|    bool score_less;
   78|       |    // If signs are different ((i1 ^ i2) < 0), the negative score is smaller.
   79|   185M|    if ((i1 ^ i2) < 0) {
  ------------------
  |  Branch (79:9): [True: 14.0M, False: 171M]
  ------------------
   80|  14.0M|      score_less = i1 < 0;
   81|   171M|    } else {
   82|       |      // If signs are the same (and not both negative), they must both be
   83|       |      // non-negative. For non-negative floats, integer order is the same as
   84|       |      // float order.
   85|   171M|      score_less = i1 < i2;
   86|   171M|    }
   87|       |
   88|   185M|    return score_less || (i1 == i2 && h1.left > h2.left);
  ------------------
  |  Branch (88:12): [True: 13.5M, False: 171M]
  |  Branch (88:27): [True: 170M, False: 1.31M]
  |  Branch (88:39): [True: 78.3M, False: 92.2M]
  ------------------
   89|   429M|  }
bpe_model.cc:_ZZNK13sentencepiece3bpe5Model12SampleEncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEfENK3$_1clIS7_EEvRT_S6_PNS2_6vectorINS2_4pairIS6_iEENS2_9allocatorISD_EEEEi:
  273|   150M|                                      EncodeResult* output, int depth) -> void {
  274|   150M|    const int id = PieceToIdNoReserved(w);
  275|   150M|    if (depth > kMaxBpeResegmentDepth) {
  ------------------
  |  Branch (275:9): [True: 0, False: 150M]
  ------------------
  276|       |      // Gracefully stop recursion and output the merged piece as-is to avoid
  277|       |      // stack overflow.
  278|      0|      output->emplace_back(w, id);
  279|      0|      return;
  280|      0|    }
  281|   150M|    if (id == unk_id_ || IsReservedId(id)) {
  ------------------
  |  Branch (281:9): [True: 108M, False: 42.1M]
  |  Branch (281:26): [True: 428k, False: 41.6M]
  ------------------
  282|   108M|      output->emplace_back(w, unk_id_);
  283|   108M|      return;
  284|   108M|    }
  285|  41.6M|    if (!IsUnusedInlined(id)) {
  ------------------
  |  Branch (285:9): [True: 41.6M, False: 62.6k]
  ------------------
  286|  41.6M|      output->emplace_back(w, id);
  287|  41.6M|      return;
  288|  41.6M|    }
  289|  62.6k|    const auto p = rev_merge.find(w);
  290|  62.6k|    if (p == rev_merge.end()) {
  ------------------
  |  Branch (290:9): [True: 24.0k, False: 38.6k]
  ------------------
  291|  24.0k|      output->emplace_back(w, unk_id_);
  292|  24.0k|      return;
  293|  24.0k|    }
  294|       |    // Direct recursive calls
  295|  38.6k|    self(self, p->second.first, output, depth + 1);
  296|  38.6k|    self(self, p->second.second, output, depth + 1);
  297|  38.6k|  };

_ZNK13sentencepiece3bpe5Model6EncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
   36|  6.08k|  EncodeResult Encode(absl::string_view normalized) const override {
   37|  6.08k|    return SampleEncode(normalized, 0.0);
   38|  6.08k|  }
_ZNK13sentencepiece3bpe5Model23IsSampleEncodeAvailableEv:
   47|  4.25k|  bool IsSampleEncodeAvailable() const override { return true; }
_ZNK13sentencepiece3bpe5Model22IsNBestEncodeAvailableEv:
   49|  6.37k|  bool IsNBestEncodeAvailable() const override { return false; }

_ZN13sentencepiece9character5ModelC2ERKNS_10ModelProtoE:
   22|    365|Model::Model(const ModelProto& model_proto) {
   23|    365|  model_proto_ = &model_proto;
   24|    365|  InitializePieces(/* use_reserved_id_map= */ true);
   25|    365|}
_ZN13sentencepiece9character5ModelD2Ev:
   27|    365|Model::~Model() = default;
_ZNK13sentencepiece9character5Model6EncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
   29|    903|EncodeResult Model::Encode(absl::string_view normalized) const {
   30|    903|  if (!status().ok() || normalized.empty()) {
  ------------------
  |  Branch (30:7): [True: 0, False: 903]
  |  Branch (30:7): [True: 9, False: 894]
  |  Branch (30:25): [True: 9, False: 894]
  ------------------
   31|      9|    return {};
   32|      9|  }
   33|       |
   34|       |  // Splits the input into character sequence
   35|    894|  EncodeResult output;
   36|  32.7M|  while (!normalized.empty()) {
  ------------------
  |  Branch (36:10): [True: 32.7M, False: 894]
  ------------------
   37|  32.7M|    const int mblen = matcher_->PrefixMatch(normalized);
   38|  32.7M|    absl::string_view w(normalized.data(), mblen);
   39|  32.7M|    const int id = PieceToIdNoReserved(w);
   40|  32.7M|    output.emplace_back(w,
   41|  32.7M|                        (id != unk_id_ && IsUnusedInlined(id)) ? unk_id_ : id);
  ------------------
  |  Branch (41:26): [True: 4.06M, False: 28.6M]
  |  Branch (41:43): [True: 1.10k, False: 4.06M]
  ------------------
   42|  32.7M|    normalized.remove_prefix(mblen);
   43|  32.7M|  }
   44|       |
   45|    894|  return output;
   46|    903|}

_ZN13sentencepiece5model8FreeListINS_7unigram7Lattice4NodeEED2Ev:
   39|  2.53k|  virtual ~FreeList() = default;
unigram_model.cc:_ZN13sentencepiece5model8FreeListINS_7unigram12_GLOBAL__N_110HypothesisEEaSEOS5_:
   44|  2.51k|  FreeList& operator=(FreeList&& other) noexcept = default;
unigram_model.cc:_ZN13sentencepiece5model8FreeListINS_7unigram12_GLOBAL__N_110HypothesisEED2Ev:
   39|  5.05k|  virtual ~FreeList() = default;
_ZN13sentencepiece5model8FreeListINS_7unigram7Lattice4NodeEEC2Em:
   38|  2.53k|  explicit FreeList(size_t chunk_size) : chunk_size_(chunk_size) {}
_ZN13sentencepiece5model8FreeListINS_7unigram7Lattice4NodeEE8AllocateEv:
   59|  30.5M|  T* Allocate() {
   60|  30.5M|    if (element_index_ >= chunk_size_) {
  ------------------
  |  Branch (60:9): [True: 29.4k, False: 30.5M]
  ------------------
   61|  29.4k|      ++chunk_index_;
   62|  29.4k|      element_index_ = 0;
   63|  29.4k|    }
   64|       |
   65|  30.5M|    if (chunk_index_ == freelist_.size()) {
  ------------------
  |  Branch (65:9): [True: 31.9k, False: 30.5M]
  ------------------
   66|  31.9k|      auto chunk = std::make_unique<T[]>(chunk_size_);
   67|  31.9k|      std::memset(static_cast<void*>(chunk.get()), 0, sizeof(T) * chunk_size_);
   68|  31.9k|      freelist_.push_back(std::move(chunk));
   69|  31.9k|    }
   70|       |
   71|  30.5M|    T* result = freelist_[chunk_index_].get() + element_index_;
   72|  30.5M|    ++element_index_;
   73|       |
   74|  30.5M|    return result;
   75|  30.5M|  }
_ZNK13sentencepiece5model8FreeListINS_7unigram7Lattice4NodeEE4sizeEv:
   56|  30.5M|  size_t size() const { return chunk_size_ * chunk_index_ + element_index_; }
_ZN13sentencepiece5model8FreeListINS_7unigram7Lattice4NodeEE4FreeEv:
   47|  2.53k|  void Free() {
   48|  2.53k|    for (auto& chunk : freelist_) {
  ------------------
  |  Branch (48:22): [True: 0, False: 2.53k]
  ------------------
   49|      0|      std::memset(static_cast<void*>(chunk.get()), 0, sizeof(T) * chunk_size_);
   50|      0|    }
   51|  2.53k|    chunk_index_ = 0;
   52|  2.53k|    element_index_ = 0;
   53|  2.53k|  }
unigram_model.cc:_ZN13sentencepiece5model8FreeListINS_7unigram12_GLOBAL__N_110HypothesisEE8AllocateEv:
   59|   181M|  T* Allocate() {
   60|   181M|    if (element_index_ >= chunk_size_) {
  ------------------
  |  Branch (60:9): [True: 353k, False: 181M]
  ------------------
   61|   353k|      ++chunk_index_;
   62|   353k|      element_index_ = 0;
   63|   353k|    }
   64|       |
   65|   181M|    if (chunk_index_ == freelist_.size()) {
  ------------------
  |  Branch (65:9): [True: 358k, False: 181M]
  ------------------
   66|   358k|      auto chunk = std::make_unique<T[]>(chunk_size_);
   67|   358k|      std::memset(static_cast<void*>(chunk.get()), 0, sizeof(T) * chunk_size_);
   68|   358k|      freelist_.push_back(std::move(chunk));
   69|   358k|    }
   70|       |
   71|   181M|    T* result = freelist_[chunk_index_].get() + element_index_;
   72|   181M|    ++element_index_;
   73|       |
   74|   181M|    return result;
   75|   181M|  }
unigram_model.cc:_ZN13sentencepiece5model8FreeListINS_7unigram12_GLOBAL__N_110HypothesisEEC2Em:
   38|  5.05k|  explicit FreeList(size_t chunk_size) : chunk_size_(chunk_size) {}
unigram_model.cc:_ZNK13sentencepiece5model8FreeListINS_7unigram12_GLOBAL__N_110HypothesisEE4sizeEv:
   56|   156M|  size_t size() const { return chunk_size_ * chunk_index_ + element_index_; }

_ZN13sentencepiece12ModelFactory6CreateERKNS_10ModelProtoE:
   29|  7.73k|    const ModelProto& model_proto) {
   30|  7.73k|  const auto& trainer_spec = model_proto.trainer_spec();
   31|       |
   32|  7.73k|  switch (trainer_spec.model_type()) {
   33|  4.24k|    case TrainerSpec::UNIGRAM:
  ------------------
  |  Branch (33:5): [True: 4.24k, False: 3.49k]
  ------------------
   34|  4.24k|      return std::make_unique<unigram::Model>(model_proto);
   35|  2.19k|    case TrainerSpec::BPE:
  ------------------
  |  Branch (35:5): [True: 2.19k, False: 5.54k]
  ------------------
   36|  2.19k|      return std::make_unique<bpe::Model>(model_proto);
   37|    935|    case TrainerSpec::WORD:
  ------------------
  |  Branch (37:5): [True: 935, False: 6.80k]
  ------------------
   38|    935|      return std::make_unique<word::Model>(model_proto);
   39|    365|    case TrainerSpec::CHAR:
  ------------------
  |  Branch (39:5): [True: 365, False: 7.37k]
  ------------------
   40|    365|      return std::make_unique<character::Model>(model_proto);
   41|      0|    default:
  ------------------
  |  Branch (41:5): [True: 0, False: 7.73k]
  ------------------
   42|      0|      LOG(ERROR) << "Unknown model_type: " << trainer_spec.model_type();
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   43|      0|      return nullptr;
   44|  7.73k|  }
   45|  7.73k|}

_ZN13sentencepiece14ModelInterfaceD2Ev:
   46|  7.73k|ModelInterface::~ModelInterface() = default;
_ZNK13sentencepiece14ModelInterface9unk_pieceEv:
   52|  6.81k|absl::string_view ModelInterface::unk_piece() const {
   53|  6.81k|  RETURN_PIECE(unk_piece, "<unk>");
  ------------------
  |  |   49|  6.81k|  if (model_proto_->trainer_spec().name().empty()) return default_value; \
  |  |  ------------------
  |  |  |  Branch (49:7): [True: 3, False: 6.80k]
  |  |  ------------------
  |  |   50|  6.80k|  return model_proto_->trainer_spec().name();
  ------------------
   54|      0|}
_ZNK13sentencepiece14ModelInterface9bos_pieceEv:
   56|  6.81k|absl::string_view ModelInterface::bos_piece() const {
   57|  6.81k|  RETURN_PIECE(bos_piece, "<s>");
  ------------------
  |  |   49|  6.81k|  if (model_proto_->trainer_spec().name().empty()) return default_value; \
  |  |  ------------------
  |  |  |  Branch (49:7): [True: 16, False: 6.79k]
  |  |  ------------------
  |  |   50|  6.79k|  return model_proto_->trainer_spec().name();
  ------------------
   58|      0|}
_ZNK13sentencepiece14ModelInterface9eos_pieceEv:
   60|  6.81k|absl::string_view ModelInterface::eos_piece() const {
   61|  6.81k|  RETURN_PIECE(eos_piece, "</s>");
  ------------------
  |  |   49|  6.81k|  if (model_proto_->trainer_spec().name().empty()) return default_value; \
  |  |  ------------------
  |  |  |  Branch (49:7): [True: 18, False: 6.79k]
  |  |  ------------------
  |  |   50|  6.79k|  return model_proto_->trainer_spec().name();
  ------------------
   62|      0|}
_ZNK13sentencepiece14ModelInterface9pad_pieceEv:
   64|  6.81k|absl::string_view ModelInterface::pad_piece() const {
   65|  6.81k|  RETURN_PIECE(pad_piece, "<pad>");
  ------------------
  |  |   49|  6.81k|  if (model_proto_->trainer_spec().name().empty()) return default_value; \
  |  |  ------------------
  |  |  |  Branch (49:7): [True: 16, False: 6.79k]
  |  |  ------------------
  |  |   50|  6.79k|  return model_proto_->trainer_spec().name();
  ------------------
   66|      0|}
_ZNK13sentencepiece14ModelInterface9PieceToIdENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   70|  17.6M|int ModelInterface::PieceToId(absl::string_view piece) const {
   71|  17.6M|  if (auto it = reserved_id_map_.find(piece); it != reserved_id_map_.end()) {
  ------------------
  |  Branch (71:47): [True: 49.8k, False: 17.5M]
  ------------------
   72|  49.8k|    return it->second;
   73|  49.8k|  }
   74|  17.5M|  return PieceToIdNoReserved(piece);
   75|  17.6M|}
_ZNK13sentencepiece14ModelInterface19PieceToIdNoReservedENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   77|   323M|int ModelInterface::PieceToIdNoReserved(absl::string_view piece) const {
   78|   323M|  if (auto it = pieces_.find(piece); it != pieces_.end()) {
  ------------------
  |  Branch (78:38): [True: 81.2M, False: 242M]
  ------------------
   79|  81.2M|    return it->second;
   80|  81.2M|  }
   81|   242M|  return unk_id_;
   82|   323M|}
_ZN13sentencepiece14ModelInterface16InitializePiecesEb:
   84|  7.73k|void ModelInterface::InitializePieces(bool use_reserved_id_map) {
   85|  7.73k|  pieces_.clear();
   86|  7.73k|  reserved_id_map_.clear();
   87|  7.73k|  unk_id_ = -1;
   88|  7.73k|  has_internal_space_symbol_ = false;
   89|  7.73k|  constexpr absl::string_view kSpaceSymbol = "\xe2\x96\x81";
   90|       |
   91|  7.73k|  std::set<absl::string_view> user_defined_symbols;
   92|  7.73k|  std::vector<bool> byte_found(256, false);
   93|       |
   94|  7.73k|  int pieces_size = 0;
   95|  7.73k|  int reserved_id_map_size = 0;
   96|  2.08M|  for (int i = 0; i < model_proto_->pieces_size(); ++i) {
  ------------------
  |  Branch (96:19): [True: 2.07M, False: 7.73k]
  ------------------
   97|  2.07M|    const auto& sp = model_proto_->pieces(i);
   98|  2.07M|    static constexpr size_t kMaxPieceSize = 8000;
   99|  2.07M|    if (sp.piece().size() >= kMaxPieceSize) {
  ------------------
  |  Branch (99:9): [True: 0, False: 2.07M]
  ------------------
  100|      0|      status_ = absl::InternalError("piece is too long.");
  101|      0|      return;
  102|      0|    }
  103|  2.07M|    const bool is_normal_piece =
  104|  2.07M|        (sp.type() == ModelProto::SentencePiece::NORMAL ||
  ------------------
  |  Branch (104:10): [True: 1.97M, False: 97.9k]
  ------------------
  105|  97.9k|         sp.type() == ModelProto::SentencePiece::USER_DEFINED ||
  ------------------
  |  Branch (105:10): [True: 5.40k, False: 92.5k]
  ------------------
  106|  92.5k|         sp.type() == ModelProto::SentencePiece::UNUSED);
  ------------------
  |  Branch (106:10): [True: 3.76k, False: 88.7k]
  ------------------
  107|  2.07M|    if (is_normal_piece || !use_reserved_id_map) {
  ------------------
  |  Branch (107:9): [True: 1.98M, False: 88.7k]
  |  Branch (107:28): [True: 6.77k, False: 81.9k]
  ------------------
  108|  1.99M|      ++pieces_size;
  109|  1.99M|    } else {
  110|  81.9k|      ++reserved_id_map_size;
  111|  81.9k|    }
  112|  2.07M|  }
  113|  7.73k|  pieces_.reserve(pieces_size);
  114|  7.73k|  reserved_id_map_.reserve(reserved_id_map_size);
  115|       |
  116|   138k|  for (int i = 0; i < model_proto_->pieces_size(); ++i) {
  ------------------
  |  Branch (116:19): [True: 131k, False: 7.37k]
  ------------------
  117|   131k|    const auto& sp = model_proto_->pieces(i);
  118|   131k|    if (sp.piece().empty()) {
  ------------------
  |  Branch (118:9): [True: 210, False: 131k]
  ------------------
  119|    210|      status_ = absl::InternalError("piece must not be empty.");
  120|    210|      return;
  121|    210|    }
  122|   131k|    if (sp.piece() == kNullPiece &&
  ------------------
  |  Branch (122:9): [True: 2.75k, False: 128k]
  ------------------
  123|  2.75k|        sp.type() == ModelProto::SentencePiece::UNUSED) {
  ------------------
  |  Branch (123:9): [True: 2.75k, False: 2]
  ------------------
  124|  2.75k|      continue;
  125|  2.75k|    }
  126|   128k|    if (sp.piece().find('\0') != absl::string_view::npos) {
  ------------------
  |  Branch (126:9): [True: 37, False: 128k]
  ------------------
  127|     37|      status_ = absl::InternalError("piece must not include null character.");
  128|     37|      return;
  129|     37|    }
  130|   128k|    if (use_reserved_id_map) {
  ------------------
  |  Branch (130:9): [True: 113k, False: 14.7k]
  ------------------
  131|   113k|      const bool is_normal_piece =
  132|   113k|          (sp.type() == ModelProto::SentencePiece::NORMAL ||
  ------------------
  |  Branch (132:12): [True: 27.8k, False: 85.6k]
  ------------------
  133|  85.6k|           sp.type() == ModelProto::SentencePiece::USER_DEFINED ||
  ------------------
  |  Branch (133:12): [True: 4.55k, False: 81.1k]
  ------------------
  134|  81.1k|           sp.type() == ModelProto::SentencePiece::UNUSED);
  ------------------
  |  Branch (134:12): [True: 167, False: 80.9k]
  ------------------
  135|   113k|      auto* target_map = is_normal_piece ? &pieces_ : &reserved_id_map_;
  ------------------
  |  Branch (135:26): [True: 32.5k, False: 80.9k]
  ------------------
  136|   113k|      if (!target_map->emplace(sp.piece(), i).second) {
  ------------------
  |  Branch (136:11): [True: 46, False: 113k]
  ------------------
  137|     46|        status_ = absl::InternalError(
  138|     46|            absl::StrCat(sp.piece(), " is already defined."));
  139|     46|        return;
  140|     46|      }
  141|   113k|    } else if (!pieces_.emplace(sp.piece(), i).second) {
  ------------------
  |  Branch (141:16): [True: 17, False: 14.7k]
  ------------------
  142|     17|      status_ =
  143|     17|          absl::InternalError(absl::StrCat(sp.piece(), " is already defined."));
  144|     17|      return;
  145|     17|    }
  146|       |
  147|   128k|    if (!has_internal_space_symbol_ &&
  ------------------
  |  Branch (147:9): [True: 125k, False: 2.29k]
  ------------------
  148|   125k|        sp.type() != ModelProto::SentencePiece::CONTROL &&
  ------------------
  |  Branch (148:9): [True: 124k, False: 1.74k]
  ------------------
  149|   124k|        sp.type() != ModelProto::SentencePiece::UNKNOWN &&
  ------------------
  |  Branch (149:9): [True: 117k, False: 6.91k]
  ------------------
  150|   117k|        sp.type() != ModelProto::SentencePiece::BYTE) {
  ------------------
  |  Branch (150:9): [True: 40.0k, False: 77.2k]
  ------------------
  151|  40.0k|      absl::string_view rem = sp.piece();
  152|  40.0k|      if (absl::StartsWith(rem, kSpaceSymbol)) {
  ------------------
  |  Branch (152:11): [True: 4.68k, False: 35.3k]
  ------------------
  153|  4.68k|        rem.remove_prefix(kSpaceSymbol.size());
  154|  4.68k|      }
  155|  40.0k|      if (absl::StrContains(rem, kSpaceSymbol)) {
  ------------------
  |  Branch (155:11): [True: 176, False: 39.8k]
  ------------------
  156|    176|        has_internal_space_symbol_ = true;
  157|    176|      }
  158|  40.0k|    }
  159|       |
  160|   128k|    if (sp.type() == ModelProto::SentencePiece::USER_DEFINED) {
  ------------------
  |  Branch (160:9): [True: 4.98k, False: 123k]
  ------------------
  161|  4.98k|      user_defined_symbols.insert(sp.piece());
  162|  4.98k|    }
  163|       |
  164|   128k|    if (sp.type() == ModelProto::SentencePiece::UNKNOWN) {
  ------------------
  |  Branch (164:9): [True: 6.92k, False: 121k]
  ------------------
  165|  6.92k|      if (unk_id_ >= 0) {
  ------------------
  |  Branch (165:11): [True: 9, False: 6.91k]
  ------------------
  166|      9|        status_ = absl::InternalError("unk is already defined.");
  167|      9|        return;
  168|      9|      }
  169|  6.91k|      unk_id_ = i;
  170|  6.91k|    }
  171|       |
  172|   128k|    if (sp.type() == ModelProto::SentencePiece::BYTE) {
  ------------------
  |  Branch (172:9): [True: 78.6k, False: 49.5k]
  ------------------
  173|  78.6k|      if (!model_proto_->trainer_spec().byte_fallback()) {
  ------------------
  |  Branch (173:11): [True: 18, False: 78.6k]
  ------------------
  174|     18|        status_ = absl::InternalError(
  175|     18|            absl::StrCat("byte piece ", sp.piece(),
  176|     18|                         " is found although `byte_fallback` is false."));
  177|     18|        return;
  178|     18|      }
  179|  78.6k|      const int byte = PieceToByte(sp.piece());
  180|  78.6k|      if (0 <= byte && byte < 256) {
  ------------------
  |  Branch (180:11): [True: 78.6k, False: 27]
  |  Branch (180:24): [True: 78.6k, False: 0]
  ------------------
  181|  78.6k|        byte_found[byte] = true;
  182|  78.6k|      } else {
  183|     27|        status_ = absl::InternalError(
  184|     27|            absl::StrCat("byte piece ", sp.piece(), " is invalid."));
  185|     27|        return;
  186|     27|      }
  187|  78.6k|    }
  188|   128k|  }
  189|       |
  190|  7.37k|  if (unk_id_ == -1 && !model_proto_->trainer_spec().byte_fallback()) {
  ------------------
  |  Branch (190:7): [True: 535, False: 6.84k]
  |  Branch (190:24): [True: 348, False: 187]
  ------------------
  191|    348|    status_ = absl::InternalError("unk is not defined.");
  192|    348|    return;
  193|    348|  }
  194|       |
  195|  7.02k|  if (model_proto_->trainer_spec().byte_fallback()) {
  ------------------
  |  Branch (195:7): [True: 435, False: 6.59k]
  ------------------
  196|       |    // Checks that there are 256 byte pieces.
  197|    435|    if (std::find(byte_found.begin(), byte_found.end(), false) !=
  ------------------
  |  Branch (197:9): [True: 173, False: 262]
  ------------------
  198|    435|        byte_found.end()) {
  199|    173|      status_ = absl::InternalError(
  200|    173|          "there are not 256 byte pieces although `byte_fallback` is true.");
  201|    173|      return;
  202|    173|    }
  203|    435|  }
  204|       |
  205|  6.85k|  matcher_ = std::make_unique<normalizer::PrefixMatcher>(user_defined_symbols);
  206|  6.85k|}
_ZN13sentencepiece14SplitIntoWordsENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEbb:
  210|  1.35k|                                              bool allow_ws_only_pieces) {
  211|  1.35k|  const char* begin = text.data();
  212|  1.35k|  const char* end = text.data() + text.size();
  213|       |
  214|       |  // Space symbol (U+2581)
  215|  1.35k|  constexpr absl::string_view kSpaceSymbol = "\xe2\x96\x81";
  216|  1.35k|  bool in_ws_sequence = false;
  217|       |
  218|  1.35k|  std::vector<absl::string_view> result;
  219|  1.35k|  if (treat_ws_as_suffix) {  // put ws tokens at the end of non-ws sequences.
  ------------------
  |  Branch (219:7): [True: 0, False: 1.35k]
  ------------------
  220|      0|    if (begin < end) {
  ------------------
  |  Branch (220:9): [True: 0, False: 0]
  ------------------
  221|      0|      result.emplace_back(begin, 0);
  222|      0|    }
  223|      0|    while (begin < end) {
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|      const int mblen =
  225|      0|          std::min<int>(string_util::OneCharLen(begin), end - begin);
  226|      0|      const bool is_ws = absl::string_view(begin, mblen) == kSpaceSymbol;
  227|       |
  228|      0|      if (is_ws) {  // keep track of sequences consecutive ws tokens.
  ------------------
  |  Branch (228:11): [True: 0, False: 0]
  ------------------
  229|      0|        in_ws_sequence = true;
  230|      0|      } else if (in_ws_sequence) {
  ------------------
  |  Branch (230:18): [True: 0, False: 0]
  ------------------
  231|      0|        if (allow_ws_only_pieces) {
  ------------------
  |  Branch (231:13): [True: 0, False: 0]
  ------------------
  232|      0|          result.emplace_back(begin, 0);
  233|      0|        }
  234|       |
  235|      0|        in_ws_sequence = false;
  236|      0|      }
  237|       |
  238|      0|      result.back() =
  239|      0|          absl::string_view(result.back().data(), result.back().size() + mblen);
  240|      0|      begin += mblen;
  241|       |
  242|      0|      if (begin < end && is_ws && !allow_ws_only_pieces) {
  ------------------
  |  Branch (242:11): [True: 0, False: 0]
  |  Branch (242:26): [True: 0, False: 0]
  |  Branch (242:35): [True: 0, False: 0]
  ------------------
  243|      0|        result.emplace_back(begin, 0);
  244|      0|      }
  245|      0|    }
  246|  1.35k|  } else {
  247|  62.7M|    while (begin < end) {
  ------------------
  |  Branch (247:12): [True: 62.7M, False: 1.35k]
  ------------------
  248|  62.7M|      const int mblen =
  249|  62.7M|          std::min<int>(string_util::OneCharLen(begin), end - begin);
  250|  62.7M|      bool is_ws = absl::string_view(begin, mblen) == kSpaceSymbol;
  251|       |
  252|       |      // if is whitespace (and not in sequence if allow_ws_only_pieces is True)
  253|  62.7M|      if (begin == text.data() ||
  ------------------
  |  Branch (253:11): [True: 1.35k, False: 62.7M]
  ------------------
  254|  62.7M|          (is_ws && (!in_ws_sequence || !allow_ws_only_pieces))) {
  ------------------
  |  Branch (254:12): [True: 456k, False: 62.3M]
  |  Branch (254:22): [True: 449k, False: 7.07k]
  |  Branch (254:41): [True: 7.07k, False: 0]
  ------------------
  255|   458k|        result.emplace_back(begin, 0);  // add empty string piece.
  256|   458k|        in_ws_sequence = true;
  257|   458k|      }
  258|       |
  259|  62.7M|      if (in_ws_sequence && !is_ws) {
  ------------------
  |  Branch (259:11): [True: 909k, False: 61.8M]
  |  Branch (259:29): [True: 451k, False: 458k]
  ------------------
  260|   451k|        in_ws_sequence = false;
  261|   451k|      }
  262|       |
  263|  62.7M|      result.back() =
  264|  62.7M|          absl::string_view(result.back().data(), result.back().size() + mblen);
  265|  62.7M|      begin += mblen;
  266|  62.7M|    }
  267|  1.35k|  }
  268|       |
  269|  1.35k|  return result;
  270|  1.35k|}
_ZN13sentencepiece11ByteToPieceEh:
  272|  94.6M|const std::string& ByteToPiece(unsigned char c) {
  273|  94.6M|  static const absl::NoDestructor<std::vector<std::string>> kBytePieces([] {
  274|  94.6M|    std::vector<std::string> v(256);
  275|  94.6M|    for (int i = 0; i < 256; ++i) {
  276|  94.6M|      v[i] = absl::StrFormat("<0x%02X>", i);
  277|  94.6M|    }
  278|  94.6M|    return v;
  279|  94.6M|  }());
  280|  94.6M|  return (*kBytePieces)[c];
  281|  94.6M|}
_ZN13sentencepiece11PieceToByteENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  283|  29.2M|int PieceToByte(absl::string_view piece) {
  284|  29.2M|  using PieceToByteMap = absl::flat_hash_map<absl::string_view, unsigned char>;
  285|  29.2M|  static const absl::NoDestructor<PieceToByteMap> kMap([] {
  286|  29.2M|    PieceToByteMap m;
  287|  29.2M|    for (int i = 0; i < 256; ++i) {
  288|  29.2M|      m[ByteToPiece(i)] = i;
  289|  29.2M|    }
  290|  29.2M|    return m;
  291|  29.2M|  }());
  292|       |
  293|  29.2M|  if (const auto it = kMap->find(piece); it != kMap->end()) {
  ------------------
  |  Branch (293:42): [True: 29.2M, False: 27]
  ------------------
  294|  29.2M|    return it->second;
  295|  29.2M|  }
  296|       |
  297|     27|  return -1;
  298|  29.2M|}
model_interface.cc:_ZZN13sentencepiece11ByteToPieceEhENK3$_0clEv:
  273|      1|  static const absl::NoDestructor<std::vector<std::string>> kBytePieces([] {
  274|      1|    std::vector<std::string> v(256);
  275|    257|    for (int i = 0; i < 256; ++i) {
  ------------------
  |  Branch (275:21): [True: 256, False: 1]
  ------------------
  276|    256|      v[i] = absl::StrFormat("<0x%02X>", i);
  277|    256|    }
  278|      1|    return v;
  279|      1|  }());
model_interface.cc:_ZZN13sentencepiece11PieceToByteENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEENK3$_0clEv:
  285|      1|  static const absl::NoDestructor<PieceToByteMap> kMap([] {
  286|      1|    PieceToByteMap m;
  287|    257|    for (int i = 0; i < 256; ++i) {
  ------------------
  |  Branch (287:21): [True: 256, False: 1]
  ------------------
  288|    256|      m[ByteToPiece(i)] = i;
  289|    256|    }
  290|      1|    return m;
  291|      1|  }());

_ZNK13sentencepiece14ModelInterface6statusEv:
   71|   372k|  virtual absl::Status status() const { return status_; }
_ZNK13sentencepiece14ModelInterface14prefix_matcherEv:
   78|  7.73k|      const {
   79|  7.73k|    return matcher_.get();
   80|  7.73k|  }
_ZNK13sentencepiece14ModelInterface23IsSampleEncodeAvailableEv:
  101|  2.50k|  [[nodiscard]] virtual bool IsSampleEncodeAvailable() const { return false; }
_ZNK13sentencepiece14ModelInterface22IsNBestEncodeAvailableEv:
  104|  3.75k|  [[nodiscard]] virtual bool IsNBestEncodeAvailable() const { return false; }
_ZNK13sentencepiece14ModelInterface9IdToPieceEi:
  119|  51.7M|  [[nodiscard]] virtual const std::string& IdToPiece(int id) const {
  120|  51.7M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|  51.7M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  51.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  51.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 51.7M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  51.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|  51.7M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|  51.7M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  51.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  51.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 51.7M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  51.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|  51.7M|    return model_proto_->pieces(id).piece();
  123|  51.7M|  }
_ZNK13sentencepiece14ModelInterface12GetPieceSizeEv:
  127|   600M|  [[nodiscard]] virtual int GetPieceSize() const {
  128|   600M|    if (model_proto_ == nullptr) {
  ------------------
  |  Branch (128:9): [True: 0, False: 600M]
  ------------------
  129|      0|      return 0;
  130|      0|    }
  131|   600M|    return model_proto_->pieces_size();
  132|   600M|  }
_ZNK13sentencepiece14ModelInterface8GetScoreEi:
  137|  28.1k|  [[nodiscard]] virtual float GetScore(int id) const {
  138|  28.1k|    return GetScoreInlined(id);
  139|  28.1k|  }
_ZNK13sentencepiece14ModelInterface9IsUnknownEi:
  142|  95.7M|  [[nodiscard]] virtual bool IsUnknown(int id) const {
  143|  95.7M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|  95.7M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  95.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  95.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 95.7M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  95.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|  95.7M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|  95.7M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  95.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  95.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 95.7M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  95.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|  95.7M|    return (model_proto_->pieces(id).type() ==
  146|  95.7M|            ModelProto::SentencePiece::UNKNOWN);
  147|  95.7M|  }
_ZNK13sentencepiece14ModelInterface9IsControlEi:
  150|   402M|  [[nodiscard]] virtual bool IsControl(int id) const {
  151|   402M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|   402M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|   402M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   402M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 402M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   402M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|   402M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|   402M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|   402M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   402M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 402M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   402M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|   402M|    return (model_proto_->pieces(id).type() ==
  154|   402M|            ModelProto::SentencePiece::CONTROL);
  155|   402M|  }
_ZNK13sentencepiece14ModelInterface8IsUnusedEi:
  158|  28.1k|  [[nodiscard]] virtual bool IsUnused(int id) const {
  159|  28.1k|    return IsUnusedInlined(id);
  160|  28.1k|  }
_ZNK13sentencepiece14ModelInterface6IsByteEi:
  168|  72.0M|  [[nodiscard]] virtual bool IsByte(int id) const {
  169|  72.0M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|  72.0M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  72.0M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  72.0M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 72.0M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  72.0M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|  72.0M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|  72.0M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  72.0M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  72.0M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 72.0M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  72.0M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|  72.0M|    return (model_proto_->pieces(id).type() == ModelProto::SentencePiece::BYTE);
  172|  72.0M|  }
_ZNK13sentencepiece14ModelInterface19ByteFallbackEnabledEv:
  174|   125M|  [[nodiscard]] virtual bool ByteFallbackEnabled() const {
  175|   125M|    return (model_proto_ != nullptr) &&
  ------------------
  |  Branch (175:12): [True: 125M, False: 0]
  ------------------
  176|   125M|           model_proto_->trainer_spec().byte_fallback();
  ------------------
  |  Branch (176:12): [True: 26.3M, False: 99.0M]
  ------------------
  177|   125M|  }
_ZNK13sentencepiece14ModelInterface15GetScoreInlinedEi:
  192|  59.4M|  [[nodiscard]] float GetScoreInlined(int id) const {
  193|  59.4M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|  59.4M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  59.4M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  59.4M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 59.4M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  59.4M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|  59.4M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|  59.4M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  59.4M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  59.4M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 59.4M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  59.4M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|  59.4M|    return model_proto_->pieces(id).score();
  196|  59.4M|  }
_ZNK13sentencepiece14ModelInterface15IsUnusedInlinedEi:
  198|   106M|  [[nodiscard]] bool IsUnusedInlined(int id) const {
  199|   106M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|   106M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|   106M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   106M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 106M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   106M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|   106M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|   106M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|   106M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   106M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 106M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|   106M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|   106M|    return (model_proto_->pieces(id).type() ==
  202|   106M|            ModelProto::SentencePiece::UNUSED);
  203|   106M|  }
_ZNK13sentencepiece14ModelInterface20IsUserDefinedInlinedEi:
  205|  35.7M|  [[nodiscard]] bool IsUserDefinedInlined(int id) const {
  206|  35.7M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|  35.7M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  35.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  35.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 35.7M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  35.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|  35.7M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|  35.7M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  35.7M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  35.7M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 35.7M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  35.7M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|  35.7M|    return (model_proto_->pieces(id).type() ==
  209|  35.7M|            ModelProto::SentencePiece::USER_DEFINED);
  210|  35.7M|  }
_ZNK13sentencepiece14ModelInterface12IsReservedIdEi:
  212|  67.1M|  [[nodiscard]] bool IsReservedId(int id) const {
  213|  67.1M|    DCHECK_GE(id, 0);
  ------------------
  |  |  150|  67.1M|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   95|  67.1M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  67.1M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 67.1M]
  |  |  |  |  |  |  |  Branch (63:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  67.1M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|  67.1M|    DCHECK_LT(id, model_proto_->pieces_size());
  ------------------
  |  |  148|  67.1M|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   93|  67.1M|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  67.1M|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (63:10): [Folded, False: 67.1M]
  |  |  |  |  |  |  |  Branch (63:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  67.1M|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  215|  67.1M|    const auto& piece = model_proto_->pieces(id);
  216|  67.1M|    return (piece.type() != ModelProto::SentencePiece::NORMAL &&
  ------------------
  |  Branch (216:13): [True: 31.5M, False: 35.5M]
  ------------------
  217|  31.5M|            piece.type() != ModelProto::SentencePiece::USER_DEFINED &&
  ------------------
  |  Branch (217:13): [True: 541k, False: 30.9M]
  ------------------
  218|   541k|            piece.type() != ModelProto::SentencePiece::UNUSED);
  ------------------
  |  Branch (218:13): [True: 431k, False: 110k]
  ------------------
  219|  67.1M|  }
_ZN13sentencepiece14ModelInterfaceC2Ev:
   65|  7.73k|  ModelInterface() = default;

_ZN13sentencepiece10normalizer10NormalizerC2ERKNS_14NormalizerSpecERKNS_11TrainerSpecE:
   42|  7.73k|    : spec_(&spec),
   43|  7.73k|      treat_whitespace_as_suffix_(trainer_spec.treat_whitespace_as_suffix()),
   44|  7.73k|      status_(absl::OkStatus()) {
   45|  7.73k|  Init();
   46|  7.73k|}
_ZN13sentencepiece10normalizer10NormalizerC2ERKNS_14NormalizerSpecE:
   49|     34|    : spec_(&spec), status_(absl::OkStatus()) {
   50|     34|  Init();
   51|     34|}
_ZN13sentencepiece10normalizer10NormalizerD2Ev:
   53|  7.77k|Normalizer::~Normalizer() = default;
_ZN13sentencepiece10normalizer10Normalizer4InitEv:
   55|  7.77k|void Normalizer::Init() {
   56|  7.77k|  absl::string_view index = spec_->precompiled_charsmap();
   57|       |
   58|  7.77k|  if (!index.empty()) {
  ------------------
  |  Branch (58:7): [True: 71, False: 7.70k]
  ------------------
   59|     71|    absl::string_view trie_blob;
   60|     71|    status_ = DecodePrecompiledCharsMap(index, &trie_blob, &normalized_,
   61|     71|                                        &precompiled_charsmap_buffer_);
   62|       |
   63|     71|    if (!status_.ok()) return;
  ------------------
  |  Branch (63:9): [True: 71, False: 0]
  ------------------
   64|       |
   65|       |    // Reads the body of double array.
   66|      0|    trie_ = std::make_unique<Darts::DoubleArray>();
   67|       |
   68|       |    // copy_array ensures correct alignment even if the trie_blob is
   69|       |    // mis-aligned. Although standard proto parsing copies data to the heap
   70|       |    // (guaranteeing alignment), zero-copy parsing or custom buffers might
   71|       |    // pass misaligned data.
   72|      0|    if (reinterpret_cast<uintptr_t>(trie_blob.data()) % 4 == 0) {
  ------------------
  |  Branch (72:9): [True: 0, False: 0]
  ------------------
   73|      0|      trie_->set_array(const_cast<char*>(trie_blob.data()),
   74|      0|                       trie_blob.size() / trie_->unit_size());
   75|      0|    } else {
   76|      0|      trie_->copy_array(reinterpret_cast<const char*>(trie_blob.data()),
   77|      0|                        trie_blob.size());
   78|      0|    }
   79|       |
   80|      0|    if (!trie_->validate(normalized_.size())) {
  ------------------
  |  Branch (80:9): [True: 0, False: 0]
  ------------------
   81|      0|      status_ = absl::InternalError("precompiled_charsmap is invalid.");
   82|      0|      trie_.reset();
   83|      0|      return;
   84|      0|    }
   85|      0|  }
   86|  7.77k|}
_ZNK13sentencepiece10normalizer10Normalizer9NormalizeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS2_12basic_stringIcS5_NS2_9allocatorIcEEEEPNS2_6vectorImNS8_ImEEEE:
   90|  43.2k|                                   std::vector<size_t>* norm_to_orig) const {
   91|  43.2k|  if (norm_to_orig) norm_to_orig->clear();
  ------------------
  |  Branch (91:7): [True: 20.4k, False: 22.8k]
  ------------------
   92|  43.2k|  normalized->clear();
   93|       |
   94|  43.2k|  if (input.empty()) {
  ------------------
  |  Branch (94:7): [True: 5.92k, False: 37.3k]
  ------------------
   95|  5.92k|    return absl::OkStatus();
   96|  5.92k|  }
   97|       |
   98|  37.3k|  ABSL_RETURN_IF_ERROR(status());
  ------------------
  |  |   90|  43.2k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|   111k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  74.6k|  switch (0)                                           \
  |  |  |  |  |  |  350|  74.6k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 37.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  37.3k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 37.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|   111k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 37.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|   111k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|   111k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  37.3k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|   111k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
   99|       |
  100|  37.3k|  size_t consumed = 0;
  101|       |
  102|       |  // Ignores heading space.
  103|  37.3k|  if (spec_->remove_extra_whitespaces()) {
  ------------------
  |  Branch (103:7): [True: 37.0k, False: 280]
  ------------------
  104|  41.5k|    while (!input.empty()) {
  ------------------
  |  Branch (104:12): [True: 41.3k, False: 147]
  ------------------
  105|  41.3k|      const auto p = NormalizePrefix(input);
  106|  41.3k|      if (p.first != " ") {
  ------------------
  |  Branch (106:11): [True: 36.8k, False: 4.50k]
  ------------------
  107|  36.8k|        break;
  108|  36.8k|      }
  109|  4.50k|      input.remove_prefix(p.second);
  110|  4.50k|      consumed += p.second;
  111|  4.50k|    }
  112|  37.0k|  }
  113|       |
  114|       |  // all chars are whitespace.
  115|  37.3k|  if (input.empty()) {
  ------------------
  |  Branch (115:7): [True: 147, False: 37.1k]
  ------------------
  116|    147|    return absl::OkStatus();
  117|    147|  }
  118|       |
  119|       |  // Reserves the output buffer to avoid re-allocations.
  120|  37.1k|  const size_t kReservedSize = input.size() * 1.5;
  121|  37.1k|  normalized->reserve(kReservedSize);
  122|  37.1k|  if (norm_to_orig) norm_to_orig->reserve(kReservedSize);
  ------------------
  |  Branch (122:7): [True: 15.9k, False: 21.2k]
  ------------------
  123|       |
  124|       |  // Replaces white space with U+2581 (LOWER ONE EIGHT BLOCK)
  125|       |  // if escape_whitespaces() is set (default = true).
  126|  37.1k|  const absl::string_view kSpaceSymbol =
  127|  37.1k|      spec_->escape_whitespaces() ? "\xe2\x96\x81" : " ";
  ------------------
  |  Branch (127:7): [True: 37.1k, False: 42]
  ------------------
  128|       |
  129|       |  // adds kSpaceSymbol to the current context.
  130|  37.1k|  auto add_ws = [&consumed, &normalized, &norm_to_orig, &kSpaceSymbol]() {
  131|  37.1k|    normalized->append(kSpaceSymbol.data(), kSpaceSymbol.size());
  132|  37.1k|    if (norm_to_orig) {
  133|  37.1k|      norm_to_orig->insert(norm_to_orig->end(), kSpaceSymbol.size(), consumed);
  134|  37.1k|    }
  135|  37.1k|  };
  136|       |
  137|       |  // Adds a space symbol as a prefix (default is true)
  138|       |  // With this prefix, "world" and "hello world" are converted into
  139|       |  // "_world" and "_hello_world", which help the trainer to extract
  140|       |  // "_world" as one symbol.
  141|  37.1k|  if (!treat_whitespace_as_suffix_ && spec_->add_dummy_prefix()) add_ws();
  ------------------
  |  Branch (141:7): [True: 37.1k, False: 70]
  |  Branch (141:39): [True: 36.9k, False: 182]
  ------------------
  142|       |
  143|  37.1k|  bool is_prev_space = spec_->remove_extra_whitespaces();
  144|   586M|  while (!input.empty()) {
  ------------------
  |  Branch (144:10): [True: 586M, False: 37.1k]
  ------------------
  145|   586M|    auto p = NormalizePrefix(input);
  146|   586M|    absl::string_view sp = p.first;
  147|       |
  148|       |    // Removes heading spaces in sentence piece,
  149|       |    // if the previous sentence piece ends with whitespace.
  150|   589M|    while (is_prev_space && absl::ConsumePrefix(&sp, " ")) {
  ------------------
  |  Branch (150:12): [True: 6.54M, False: 582M]
  |  Branch (150:29): [True: 2.41M, False: 4.13M]
  ------------------
  151|  2.41M|    }
  152|       |
  153|   586M|    if (!sp.empty()) {
  ------------------
  |  Branch (153:9): [True: 584M, False: 2.40M]
  ------------------
  154|   584M|      const char* data = sp.data();
  155|  1.58G|      for (size_t n = 0; n < sp.size(); ++n) {
  ------------------
  |  Branch (155:26): [True: 999M, False: 584M]
  ------------------
  156|   999M|        if (data[n] == ' ') {
  ------------------
  |  Branch (156:13): [True: 3.49M, False: 995M]
  ------------------
  157|  3.49M|          add_ws();
  158|   995M|        } else {
  159|   995M|          *normalized += data[n];
  160|   995M|          if (norm_to_orig) norm_to_orig->push_back(consumed);
  ------------------
  |  Branch (160:15): [True: 426M, False: 568M]
  ------------------
  161|   995M|        }
  162|   999M|      }
  163|       |      // Checks whether the last character of sp is whitespace.
  164|   584M|      is_prev_space = absl::EndsWith(sp, " ");
  165|   584M|    }
  166|       |
  167|   586M|    consumed += p.second;
  168|   586M|    input.remove_prefix(p.second);
  169|   586M|    if (!spec_->remove_extra_whitespaces()) {
  ------------------
  |  Branch (169:9): [True: 6.54M, False: 580M]
  ------------------
  170|  6.54M|      is_prev_space = false;
  171|  6.54M|    }
  172|   586M|  }
  173|       |
  174|       |  // Ignores trailing space.
  175|  37.1k|  if (spec_->remove_extra_whitespaces()) {
  ------------------
  |  Branch (175:7): [True: 36.8k, False: 280]
  ------------------
  176|  44.4k|    while (absl::EndsWith(*normalized, kSpaceSymbol)) {
  ------------------
  |  Branch (176:12): [True: 7.53k, False: 36.8k]
  ------------------
  177|  7.53k|      const int length = normalized->size() - kSpaceSymbol.size();
  178|  7.53k|      RET_CHECK_GE(length, 0);
  ------------------
  |  |   30|  7.53k|#define RET_CHECK_GE(a, b) RET_CHECK((a) >= (b))
  |  |  ------------------
  |  |  |  |   23|  7.53k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 7.53k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  7.53k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  7.53k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  179|  7.53k|      normalized->resize(length);
  180|  7.53k|      if (norm_to_orig) {
  ------------------
  |  Branch (180:11): [True: 3.22k, False: 4.30k]
  ------------------
  181|  3.22k|        consumed = (*norm_to_orig)[length];
  182|  3.22k|        norm_to_orig->resize(length);
  183|  3.22k|      }
  184|  7.53k|    }
  185|  36.8k|  }
  186|       |
  187|       |  // Adds a space symbol as a suffix (default is false)
  188|  37.1k|  if (treat_whitespace_as_suffix_ && spec_->add_dummy_prefix()) add_ws();
  ------------------
  |  Branch (188:7): [True: 70, False: 37.1k]
  |  Branch (188:38): [True: 63, False: 7]
  ------------------
  189|       |
  190|  37.1k|  if (norm_to_orig) {
  ------------------
  |  Branch (190:7): [True: 15.9k, False: 21.2k]
  ------------------
  191|  15.9k|    norm_to_orig->push_back(consumed);
  192|  15.9k|    RET_CHECK_EQ(norm_to_orig->size(), normalized->size() + 1);
  ------------------
  |  |   28|  15.9k|#define RET_CHECK_EQ(a, b) RET_CHECK((a) == (b))
  |  |  ------------------
  |  |  |  |   23|  15.9k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 15.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  15.9k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  15.9k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  193|  15.9k|  }
  194|       |
  195|  37.1k|  return absl::OkStatus();
  196|  37.1k|}
_ZNK13sentencepiece10normalizer10Normalizer15NormalizePrefixENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  205|   586M|    absl::string_view input) const {
  206|   586M|  if (input.empty()) return {};
  ------------------
  |  Branch (206:7): [True: 0, False: 586M]
  ------------------
  207|       |
  208|   586M|  if (matcher_ != nullptr) {
  ------------------
  |  Branch (208:7): [True: 586M, False: 0]
  ------------------
  209|   586M|    bool found = false;
  210|   586M|    const int mblen = matcher_->PrefixMatch(input, &found);
  211|   586M|    if (found) return {input.substr(0, mblen), mblen};
  ------------------
  |  Branch (211:9): [True: 542k, False: 586M]
  ------------------
  212|   586M|  }
  213|       |
  214|   586M|  size_t longest_length = 0;
  215|   586M|  size_t longest_value = 0;
  216|       |
  217|   586M|  if (trie_ != nullptr) {
  ------------------
  |  Branch (217:7): [True: 0, False: 586M]
  ------------------
  218|       |    // Allocates trie_results in stack, which makes the encoding speed 36%
  219|       |    // faster. (38k sentences/sec => 60k sentences/sec). Builder checks that the
  220|       |    // result size never exceeds kMaxTrieResultsSize. This array consumes
  221|       |    // 0.5kByte in stack, which is less than default stack frames (16kByte).
  222|      0|    Darts::DoubleArray::result_pair_type
  223|      0|        trie_results[Normalizer::kMaxTrieResultsSize];
  224|       |
  225|       |    // commonPrefixSearch returns the total number of matches, which can be
  226|       |    // larger than the buffer size (see darts.h). A precompiled charsmap loaded
  227|       |    // from an untrusted model is not subject to the build-time
  228|       |    // kMaxTrieResultsSize check, so cap the count to the buffer capacity before
  229|       |    // indexing trie_results.
  230|      0|    const size_t num_nodes =
  231|      0|        std::min<size_t>(trie_->commonPrefixSearch(
  232|      0|                             input.data(), trie_results,
  233|      0|                             Normalizer::kMaxTrieResultsSize, input.size()),
  234|      0|                         Normalizer::kMaxTrieResultsSize);
  235|       |
  236|       |    // Finds the longest rule.
  237|      0|    for (size_t k = 0; k < num_nodes; ++k) {
  ------------------
  |  Branch (237:24): [True: 0, False: 0]
  ------------------
  238|      0|      if (longest_length == 0 || trie_results[k].length > longest_length) {
  ------------------
  |  Branch (238:11): [True: 0, False: 0]
  |  Branch (238:34): [True: 0, False: 0]
  ------------------
  239|      0|        longest_length = trie_results[k].length;  // length of prefix
  240|      0|        longest_value = trie_results[k].value;    // pointer to |normalized_|.
  241|      0|      }
  242|      0|    }
  243|      0|  }
  244|       |
  245|   586M|  std::pair<absl::string_view, int> result;
  246|   586M|  if (longest_length == 0 || longest_length > input.size() ||
  ------------------
  |  Branch (246:7): [True: 586M, False: 0]
  |  Branch (246:30): [True: 0, False: 0]
  ------------------
  247|   586M|      longest_value >= normalized_.size()) {
  ------------------
  |  Branch (247:7): [True: 0, False: 0]
  ------------------
  248|   586M|    size_t length = 0;
  249|   586M|    if (!string_util::IsValidDecodeUTF8(input, &length)) {
  ------------------
  |  Branch (249:9): [True: 202M, False: 383M]
  ------------------
  250|       |      // Found a malformed utf8.
  251|       |      // The rune is set to be 0xFFFD (REPLACEMENT CHARACTER),
  252|       |      // which is a valid Unicode of three bytes in utf8,
  253|       |      // but here we only consume one byte.
  254|   202M|      result.second = 1;
  255|   202M|      static constexpr absl::string_view kReplacementChar = "\xEF\xBF\xBD";
  256|   202M|      result.first = kReplacementChar;
  257|   383M|    } else {
  258|   383M|      result.second = length;
  259|   383M|      result.first = absl::string_view(input.data(), result.second);
  260|   383M|    }
  261|   586M|  } else {
  262|      0|    result.second = longest_length;
  263|       |    // No need to pass the size of normalized sentence,
  264|       |    // since |normalized| is delimitered by "\0".
  265|      0|    result.first = normalized_.data() + longest_value;
  266|      0|  }
  267|       |
  268|   586M|  return result;
  269|   586M|}
_ZN13sentencepiece10normalizer10Normalizer25DecodePrecompiledCharsMapENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPS6_S7_PNS2_12basic_stringIcS5_NS2_9allocatorIcEEEE:
  293|     71|    absl::string_view* normalized, std::string* buffer) {
  294|     71|  uint32_t trie_blob_size = 0;
  295|     71|  if (blob.size() <= sizeof(trie_blob_size) ||
  ------------------
  |  Branch (295:7): [True: 25, False: 46]
  ------------------
  296|     46|      !string_util::DecodePOD<uint32_t>(
  ------------------
  |  Branch (296:7): [True: 0, False: 46]
  ------------------
  297|     46|          absl::string_view(blob.data(), sizeof(trie_blob_size)),
  298|     46|          &trie_blob_size)) {
  299|     25|    return absl::InternalError("Blob for normalization rule is broken.");
  300|     25|  }
  301|       |
  302|       |  if constexpr (absl::endian::native == absl::endian::big) {
  303|       |    trie_blob_size = absl::gbswap_32(trie_blob_size);
  304|       |  }
  305|       |
  306|     46|  if (trie_blob_size >= blob.size() - sizeof(trie_blob_size)) {
  ------------------
  |  Branch (306:7): [True: 35, False: 11]
  ------------------
  307|     35|    return absl::InternalError("Trie data size exceeds the input blob size.");
  308|     35|  }
  309|       |
  310|       |  // Dart unit_size is 4 and blob size in units must be a multiple of 256.
  311|     11|  if (trie_blob_size < 1024 || (trie_blob_size & 0x3FF) != 0) {
  ------------------
  |  Branch (311:7): [True: 11, False: 0]
  |  Branch (311:32): [True: 0, False: 0]
  ------------------
  312|     11|    return absl::InternalError("Trie data size is not divisible by 1024.");
  313|     11|  }
  314|       |
  315|      0|  blob.remove_prefix(sizeof(trie_blob_size));
  316|       |
  317|       |  if constexpr (absl::endian::native == absl::endian::big) {
  318|       |    RET_CHECK(buffer);
  319|       |    buffer->assign(blob.data(), trie_blob_size);
  320|       |    uint32_t* data =
  321|       |        reinterpret_cast<uint32_t*>(const_cast<char*>(buffer->data()));
  322|       |    for (int i = 0; i < buffer->size() / 4; ++i)
  323|       |      data[i] = absl::gbswap_32(data[i]);
  324|       |    *trie_blob = absl::string_view(buffer->data(), trie_blob_size);
  325|      0|  } else {
  326|      0|    *trie_blob = absl::string_view(blob.data(), trie_blob_size);
  327|      0|  }
  328|       |
  329|      0|  blob.remove_prefix(trie_blob_size);
  330|      0|  *normalized = absl::string_view(blob.data(), blob.size());
  331|       |
  332|      0|  if (normalized->empty() || normalized->back() != '\0') {
  ------------------
  |  Branch (332:7): [True: 0, False: 0]
  |  Branch (332:30): [True: 0, False: 0]
  ------------------
  333|      0|    return absl::InternalError("normalized block must be null terminated.");
  334|      0|  }
  335|       |
  336|      0|  return absl::OkStatus();
  337|      0|}
_ZN13sentencepiece10normalizer13PrefixMatcherC2ERKNSt3__13setINS2_17basic_string_viewIcNS2_11char_traitsIcEEEENS2_4lessIS7_EENS2_9allocatorIS7_EEEE:
  339|  6.85k|PrefixMatcher::PrefixMatcher(const std::set<absl::string_view>& dic) {
  340|  6.85k|  if (dic.empty()) return;
  ------------------
  |  Branch (340:7): [True: 5.32k, False: 1.53k]
  ------------------
  341|  1.53k|  std::vector<const char*> key;
  342|  1.53k|  std::vector<size_t> lengths;
  343|  1.53k|  key.reserve(dic.size());
  344|  1.53k|  lengths.reserve(dic.size());
  345|  4.29k|  for (const auto& it : dic) {
  ------------------
  |  Branch (345:23): [True: 4.29k, False: 1.53k]
  ------------------
  346|  4.29k|    key.push_back(it.data());
  347|  4.29k|    lengths.push_back(it.size());
  348|  4.29k|  }
  349|  1.53k|  trie_ = std::make_unique<Darts::DoubleArray>();
  350|  1.53k|  if (trie_->build(key.size(), const_cast<char**>(key.data()),
  ------------------
  |  Branch (350:7): [True: 0, False: 1.53k]
  ------------------
  351|  1.53k|                   const_cast<size_t*>(lengths.data()), nullptr) != 0) {
  352|      0|    LOG(ERROR) << "Failed to build the TRIE for PrefixMatcher";
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      0|    trie_.reset();
  354|      0|  }
  355|  1.53k|}
_ZNK13sentencepiece10normalizer13PrefixMatcher11PrefixMatchENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPb:
  357|   781M|int PrefixMatcher::PrefixMatch(absl::string_view w, bool* found) const {
  358|   781M|  if (w.empty()) {
  ------------------
  |  Branch (358:7): [True: 0, False: 781M]
  ------------------
  359|      0|    if (found) *found = false;
  ------------------
  |  Branch (359:9): [True: 0, False: 0]
  ------------------
  360|      0|    return 0;
  361|      0|  }
  362|       |
  363|   781M|  if (trie_ == nullptr) {
  ------------------
  |  Branch (363:7): [True: 554M, False: 226M]
  ------------------
  364|   554M|    if (found) *found = false;
  ------------------
  |  Branch (364:9): [True: 534M, False: 20.3M]
  ------------------
  365|   554M|    return std::min<int>(w.size(), string_util::OneCharLen(w.data()));
  366|   554M|  }
  367|       |
  368|   226M|  constexpr int kResultSize = 64;
  369|   226M|  Darts::DoubleArray::result_pair_type trie_results[kResultSize];
  370|   226M|  const int num_nodes = std::min<int>(
  371|   226M|      trie_->commonPrefixSearch(w.data(), trie_results, kResultSize, w.size()),
  372|   226M|      kResultSize);
  373|       |
  374|   226M|  if (found) *found = (num_nodes > 0);
  ------------------
  |  Branch (374:7): [True: 214M, False: 12.3M]
  ------------------
  375|   226M|  if (num_nodes == 0) {
  ------------------
  |  Branch (375:7): [True: 191M, False: 35.5M]
  ------------------
  376|   191M|    return std::min<int>(w.size(), string_util::OneCharLen(w.data()));
  377|   191M|  }
  378|       |
  379|  35.5M|  int mblen = 0;
  380|  71.1M|  for (int i = 0; i < num_nodes; ++i) {
  ------------------
  |  Branch (380:19): [True: 35.5M, False: 35.5M]
  ------------------
  381|  35.5M|    mblen = std::max<int>(trie_results[i].length, mblen);
  382|  35.5M|  }
  383|       |
  384|  35.5M|  return mblen;
  385|   226M|}
normalizer.cc:_ZZNK13sentencepiece10normalizer10Normalizer9NormalizeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS2_12basic_stringIcS5_NS2_9allocatorIcEEEEPNS2_6vectorImNS8_ImEEEEENK3$_0clEv:
  130|  3.53M|  auto add_ws = [&consumed, &normalized, &norm_to_orig, &kSpaceSymbol]() {
  131|  3.53M|    normalized->append(kSpaceSymbol.data(), kSpaceSymbol.size());
  132|  3.53M|    if (norm_to_orig) {
  ------------------
  |  Branch (132:9): [True: 1.51M, False: 2.01M]
  ------------------
  133|  1.51M|      norm_to_orig->insert(norm_to_orig->end(), kSpaceSymbol.size(), consumed);
  134|  1.51M|    }
  135|  3.53M|  };

_ZN13sentencepiece10normalizer10Normalizer16SetPrefixMatcherEPKNS0_13PrefixMatcherE:
   72|  7.73k|  virtual void SetPrefixMatcher(const PrefixMatcher* matcher) {
   73|  7.73k|    matcher_ = matcher;
   74|  7.73k|  }
_ZNK13sentencepiece10normalizer10Normalizer6statusEv:
   78|   374k|  virtual absl::Status status() const { return status_; }

_ZN13sentencepiece22SentencePieceProcessorC2Ev:
   87|  12.3k|SentencePieceProcessor::SentencePieceProcessor() {}
_ZN13sentencepiece22SentencePieceProcessorD2Ev:
   88|  12.3k|SentencePieceProcessor::~SentencePieceProcessor() {}
_ZN13sentencepiece22SentencePieceProcessor23LoadFromSerializedProtoENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
  107|  12.3k|    absl::string_view serialized) {
  108|  12.3k|  auto model_proto = std::make_unique<ModelProto>();
  109|  12.3k|  RET_CHECK(model_proto->ParseFromArray(serialized.data(), serialized.size()));
  ------------------
  |  |   23|  12.3k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 7.73k, False: 4.65k]
  |  |  ------------------
  |  |   24|  7.73k|  } else /* NOLINT */                                         \
  |  |   25|  12.3k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|  4.65k|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  110|  7.73k|  return Load(std::move(model_proto));
  111|  12.3k|}
_ZN13sentencepiece22SentencePieceProcessor4LoadENSt3__110unique_ptrINS_10ModelProtoENS1_14default_deleteIS3_EEEE:
  114|  7.73k|    std::unique_ptr<ModelProto> model_proto) {
  115|  7.73k|  RET_CHECK(model_proto != nullptr);
  ------------------
  |  |   23|  7.73k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 7.73k, False: 0]
  |  |  ------------------
  |  |   24|  7.73k|  } else /* NOLINT */                                         \
  |  |   25|  7.73k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  116|  7.73k|  model_.reset();
  117|  7.73k|  normalizer_.reset();
  118|  7.73k|  denormalizer_.reset();
  119|  7.73k|  model_proto_ = std::move(model_proto);
  120|       |  // Workaround for https://github.com/google/sentencepiece/issues/1308
  121|       |  // Third-party conversion scripts may erroneously insert a raw null-byte
  122|       |  // piece ("\0") even when byte_fallback is enabled (where "<0x00>" is
  123|       |  // already defined). Mark it as UNUSED so it is excluded from trie building
  124|       |  // and encoding.
  125|  7.73k|  if (model_proto_->trainer_spec().byte_fallback()) {
  ------------------
  |  Branch (125:7): [True: 522, False: 7.21k]
  ------------------
  126|   125k|    for (int i = 0; i < model_proto_->pieces_size(); ++i) {
  ------------------
  |  Branch (126:21): [True: 125k, False: 522]
  ------------------
  127|   125k|      auto* sp = model_proto_->mutable_pieces(i);
  128|   125k|      if (sp->piece() == kNullPiece) {
  ------------------
  |  Branch (128:11): [True: 2.92k, False: 122k]
  ------------------
  129|  8.77k|        LOG(WARNING)
  ------------------
  |  |  218|  2.92k|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|  2.92k|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  2.92k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|  5.85k|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|  5.85k|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.92k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|  2.92k|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.92k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  2.92k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 2.92k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|  2.92k|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  14.6k|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|  14.6k|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|  8.77k|            << "Piece at index " << i
  131|  8.77k|            << " is a null character (\\0) and byte_fallback is enabled. "
  132|  8.77k|            << "Treating it as an UNUSED piece.";
  133|  2.92k|        sp->set_type(ModelProto::SentencePiece::UNUSED);
  134|  2.92k|      }
  135|   125k|    }
  136|    522|  }
  137|  7.73k|  model_ = ModelFactory::Create(*model_proto_);
  138|  7.73k|  normalizer_ = std::make_unique<normalizer::Normalizer>(
  139|  7.73k|      model_proto_->normalizer_spec(), model_proto_->trainer_spec());
  140|  7.73k|  if (model_proto_->has_denormalizer_spec() &&
  ------------------
  |  Branch (140:7): [True: 262, False: 7.47k]
  ------------------
  141|    262|      !model_proto_->denormalizer_spec().precompiled_charsmap().empty()) {
  ------------------
  |  Branch (141:7): [True: 34, False: 228]
  ------------------
  142|     34|    denormalizer_ = std::make_unique<normalizer::Normalizer>(
  143|     34|        model_proto_->denormalizer_spec());
  144|     34|  }
  145|       |
  146|       |  // Escapes user-defined-symbols in normalizer.
  147|  7.73k|  if (model_) {
  ------------------
  |  Branch (147:7): [True: 7.73k, False: 0]
  ------------------
  148|  7.73k|    normalizer_->SetPrefixMatcher(model_->prefix_matcher());
  149|  7.73k|  }
  150|       |
  151|  7.73k|  ABSL_RETURN_IF_ERROR(status());
  ------------------
  |  |   90|  7.73k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  15.4k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  15.4k|  switch (0)                                           \
  |  |  |  |  |  |  350|  15.4k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 7.73k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  7.73k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 7.73k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  15.4k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 6.81k, False: 928]
  |  |  |  |  ------------------
  |  |  |  |  164|  15.4k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  15.4k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  6.81k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  15.4k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  152|       |
  153|       |  // Precomputes and caches special token IDs.
  154|       |  // Note that these IDs are not always the same as the IDs in TrainerSpec.
  155|  6.81k|  unk_id_ = PieceToId(model_->unk_piece());
  156|  6.81k|  if (unk_id_ >= 0 && !model_->IsUnknown(unk_id_)) unk_id_ = -1;
  ------------------
  |  Branch (156:7): [True: 6.75k, False: 59]
  |  Branch (156:23): [True: 60, False: 6.69k]
  ------------------
  157|       |
  158|  6.81k|  bos_id_ = PieceToId(model_->bos_piece());
  159|  6.81k|  if (bos_id_ >= 0 && !IsControl(bos_id_)) bos_id_ = -1;
  ------------------
  |  Branch (159:7): [True: 6.78k, False: 30]
  |  Branch (159:23): [True: 6.38k, False: 394]
  ------------------
  160|       |
  161|  6.81k|  eos_id_ = PieceToId(model_->eos_piece());
  162|  6.81k|  if (eos_id_ >= 0 && !IsControl(eos_id_)) eos_id_ = -1;
  ------------------
  |  Branch (162:7): [True: 6.75k, False: 54]
  |  Branch (162:23): [True: 6.19k, False: 559]
  ------------------
  163|       |
  164|  6.81k|  pad_id_ = PieceToId(model_->pad_piece());
  165|  6.81k|  if (pad_id_ >= 0 && !IsControl(pad_id_)) pad_id_ = -1;
  ------------------
  |  Branch (165:7): [True: 6.73k, False: 75]
  |  Branch (165:23): [True: 6.73k, False: 2]
  ------------------
  166|       |
  167|  6.81k|  return absl::OkStatus();
  168|  7.73k|}
_ZNK13sentencepiece22SentencePieceProcessor6statusEv:
  180|   337k|absl::Status SentencePieceProcessor::status() const {
  181|   337k|  if (!model_) {
  ------------------
  |  Branch (181:7): [True: 0, False: 337k]
  ------------------
  182|      0|    return absl::InternalError("Model is not initialized.");
  183|      0|  }
  184|   337k|  if (!normalizer_) {
  ------------------
  |  Branch (184:7): [True: 0, False: 337k]
  ------------------
  185|      0|    return absl::InternalError("Normalizer is not initialized.");
  186|      0|  }
  187|   337k|  ABSL_RETURN_IF_ERROR(model_->status());
  ------------------
  |  |   90|   337k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  1.01M|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|   675k|  switch (0)                                           \
  |  |  |  |  |  |  350|   675k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 337k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|   337k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 337k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  1.01M|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 336k, False: 907]
  |  |  |  |  ------------------
  |  |  |  |  164|  1.01M|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  1.01M|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|   336k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  1.01M|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  188|   336k|  ABSL_RETURN_IF_ERROR(normalizer_->status());
  ------------------
  |  |   90|   337k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  1.01M|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|   673k|  switch (0)                                           \
  |  |  |  |  |  |  350|   673k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 336k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|   336k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 336k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  1.01M|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 336k, False: 9]
  |  |  |  |  ------------------
  |  |  |  |  164|  1.01M|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  1.01M|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|   336k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  1.01M|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  189|   336k|  if (denormalizer_) {
  ------------------
  |  Branch (189:7): [True: 12, False: 336k]
  ------------------
  190|     12|    ABSL_RETURN_IF_ERROR(denormalizer_->status());
  ------------------
  |  |   90|     12|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|     24|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|     24|  switch (0)                                           \
  |  |  |  |  |  |  350|     24|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 12, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|     12|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|     24|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  164|     24|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|     24|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|      0|  } else /* NOLINT */                                                     \
  |  |  |  |  167|     24|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  191|     12|  }
  192|   336k|  return absl::OkStatus();
  193|   336k|}
_ZNK13sentencepiece22SentencePieceProcessor6EncodeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEPNS1_6vectorINS1_12basic_stringIcS4_NS1_9allocatorIcEEEENS8_ISA_EEEE:
  208|  13.6k|    absl::string_view input, std::vector<std::string>* pieces) const {
  209|  13.6k|  return EncodeOptimized(input, pieces);
  210|  13.6k|}
_ZNK13sentencepiece22SentencePieceProcessor6EncodeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEPNS1_6vectorIiNS1_9allocatorIiEEEE:
  213|  6.81k|                                            std::vector<int>* ids) const {
  214|  6.81k|  return EncodeOptimized(input, ids);
  215|  6.81k|}
_ZNK13sentencepiece22SentencePieceProcessor6DecodeEN4absl12lts_202608174SpanIKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEPSA_:
  218|  5.30k|    absl::Span<const std::string> pieces, std::string* detokenized) const {
  219|  5.30k|  absl::FixedArray<absl::string_view, 128> views(pieces.begin(), pieces.end());
  220|  5.30k|  return DecodeOptimized<absl::string_view>(views, detokenized);
  221|  5.30k|}
_ZNK13sentencepiece22SentencePieceProcessor6DecodeEN4absl12lts_202608174SpanIKiEEPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE:
  230|  5.30k|                                            std::string* detokenized) const {
  231|  5.30k|  return DecodeOptimized(ids, detokenized);
  232|  5.30k|}
_ZNK13sentencepiece22SentencePieceProcessor11NBestEncodeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEiPNS1_6vectorINS6_INS1_12basic_stringIcS4_NS1_9allocatorIcEEEENS8_ISA_EEEENS8_ISC_EEEE:
  236|  6.81k|    std::vector<std::vector<std::string>>* pieces) const {
  237|  13.6k|  RET_CHECK_STATUS_STL(pieces);
  ------------------
  |  |  196|  6.81k|  ABSL_RETURN_IF_ERROR(status());                     \
  |  |  ------------------
  |  |  |  |   90|  6.81k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  13.6k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  13.6k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  6.81k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  13.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 6.81k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  13.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  13.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  6.81k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  13.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  6.81k|  RET_CHECK(container) << "output container is null"; \
  |  |  ------------------
  |  |  |  |   23|  6.81k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 6.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  6.81k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  6.81k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  198|  6.81k|  container->clear();
  ------------------
  238|       |
  239|  13.6k|  Arena arena;
  240|  13.6k|  auto* spt = Arena::Create<NBestSentencePieceText>(&arena);
  241|  13.6k|  ABSL_RETURN_IF_ERROR(NBestEncode(input, nbest_size, spt));
  ------------------
  |  |   90|  6.81k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  13.6k|  switch (0)                                           \
  |  |  |  |  |  |  350|  13.6k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  6.81k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  13.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 3.43k, False: 3.37k]
  |  |  |  |  ------------------
  |  |  |  |  164|  13.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  13.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  3.43k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  13.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  242|  3.43k|  pieces->reserve(spt->nbests().size());
  243|  4.55k|  for (const auto& nbest : spt->nbests()) {
  ------------------
  |  Branch (243:26): [True: 4.55k, False: 3.43k]
  ------------------
  244|  4.55k|    std::vector<std::string>& result = pieces->emplace_back();
  245|  4.55k|    result.reserve(nbest.pieces().size());
  246|  26.3M|    for (const auto& sp : nbest.pieces()) {
  ------------------
  |  Branch (246:25): [True: 26.3M, False: 4.55k]
  ------------------
  247|  26.3M|      result.emplace_back(sp.piece());
  248|  26.3M|    }
  249|  4.55k|  }
  250|       |
  251|  3.43k|  return absl::OkStatus();
  252|  13.6k|}
_ZNK13sentencepiece22SentencePieceProcessor12SampleEncodeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEifPNS1_6vectorINS1_12basic_stringIcS4_NS1_9allocatorIcEEEENS8_ISA_EEEE:
  276|  13.6k|    std::vector<std::string>* pieces) const {
  277|  27.2k|  RET_CHECK_STATUS_STL(pieces);
  ------------------
  |  |  196|  13.6k|  ABSL_RETURN_IF_ERROR(status());                     \
  |  |  ------------------
  |  |  |  |   90|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  27.2k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  27.2k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  27.2k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 13.6k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  13.6k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 13.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  27.2k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 13.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  27.2k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  27.2k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  13.6k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  27.2k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.6k|  RET_CHECK(container) << "output container is null"; \
  |  |  ------------------
  |  |  |  |   23|  13.6k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 13.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  13.6k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  13.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  198|  13.6k|  container->clear();
  ------------------
  278|       |
  279|  27.2k|  Arena arena;
  280|  27.2k|  auto* spt = Arena::Create<SentencePieceText>(&arena);
  281|  27.2k|  ABSL_RETURN_IF_ERROR(SampleEncode(input, nbest_size, alpha, spt));
  ------------------
  |  |   90|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  27.2k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  27.2k|  switch (0)                                           \
  |  |  |  |  |  |  350|  27.2k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 13.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  13.6k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 13.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  27.2k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 11.1k, False: 2.50k]
  |  |  |  |  ------------------
  |  |  |  |  164|  27.2k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  27.2k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  11.1k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  27.2k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  282|  11.1k|  pieces->reserve(spt->pieces().size());
  283|  66.3M|  for (const auto& sp : spt->pieces()) {
  ------------------
  |  Branch (283:23): [True: 66.3M, False: 11.1k]
  ------------------
  284|  66.3M|    pieces->emplace_back(sp.piece());
  285|  66.3M|  }
  286|       |
  287|  11.1k|  return absl::OkStatus();
  288|  27.2k|}
_ZNK13sentencepiece22SentencePieceProcessor25PopulateSentencePieceTextENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_N4absl12lts_202608174SpanIKmEERKNS1_6vectorINS1_4pairIS5_iEENS1_9allocatorISD_EEEEPNS_17SentencePieceTextEbmb:
  309|  15.6k|    bool apply_extra_options) const {
  310|  15.6k|  size_t consumed = 0;
  311|  15.6k|  bool is_prev_unk = false;
  312|   152M|  for (const auto& p : result) {
  ------------------
  |  Branch (312:22): [True: 152M, False: 15.6k]
  ------------------
  313|   152M|    const absl::string_view w = p.first;  // piece
  314|   152M|    const int id = p.second;              // id
  315|       |
  316|   152M|    RET_CHECK(!w.empty()) << "Empty piece is not allowed.";
  ------------------
  |  |   23|   152M|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  ------------------
  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  317|       |
  318|   152M|    const bool is_unk = IsUnknownId(*model_, unk_id_, id);
  319|       |
  320|   152M|    if (IsControlId(*model_, id)) {
  ------------------
  |  Branch (320:9): [True: 0, False: 152M]
  ------------------
  321|       |      // Control symbol has no corresponding source surface, so begin == end.
  322|      0|      auto* sp = spt->add_pieces();
  323|      0|      sp->set_piece(w.data(), w.size());
  324|      0|      sp->set_id(id);
  325|      0|      RET_CHECK_GE(norm_to_orig[consumed], input_start_offset);
  ------------------
  |  |   30|      0|#define RET_CHECK_GE(a, b) RET_CHECK((a) >= (b))
  |  |  ------------------
  |  |  |  |   23|      0|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|      0|  } else /* NOLINT */                                         \
  |  |  |  |   25|      0|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  326|      0|      const size_t orig_offset = norm_to_orig[consumed] - input_start_offset;
  327|      0|      sp->set_begin(orig_offset);
  328|      0|      sp->set_end(orig_offset);
  329|   152M|    } else {
  330|   152M|      const size_t begin = consumed;
  331|   152M|      const size_t end = consumed + w.size();
  332|   152M|      RET_CHECK_LT(begin, norm_to_orig.size());
  ------------------
  |  |   33|   152M|#define RET_CHECK_LT(a, b) RET_CHECK((a) < (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  333|   152M|      RET_CHECK_LT(end, norm_to_orig.size());
  ------------------
  |  |   33|   152M|#define RET_CHECK_LT(a, b) RET_CHECK((a) < (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  334|   152M|      RET_CHECK_GE(norm_to_orig[begin], input_start_offset);
  ------------------
  |  |   30|   152M|#define RET_CHECK_GE(a, b) RET_CHECK((a) >= (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  335|   152M|      RET_CHECK_GE(norm_to_orig[end], input_start_offset);
  ------------------
  |  |   30|   152M|#define RET_CHECK_GE(a, b) RET_CHECK((a) >= (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  336|   152M|      const size_t orig_begin = norm_to_orig[begin] - input_start_offset;
  337|   152M|      const size_t orig_end = norm_to_orig[end] - input_start_offset;
  338|   152M|      RET_CHECK_LE(orig_begin, input.size());
  ------------------
  |  |   31|   152M|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  339|   152M|      RET_CHECK_LE(orig_end, input.size());
  ------------------
  |  |   31|   152M|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  340|   152M|      RET_CHECK_LE(orig_begin, orig_end);
  ------------------
  |  |   31|   152M|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|   152M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 152M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|   152M|  } else /* NOLINT */                                         \
  |  |  |  |   25|   152M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  341|   152M|      const auto surface =
  342|   152M|          absl::ClippedSubstr(input, orig_begin, orig_end - orig_begin);
  343|       |
  344|   152M|      if (is_unk && model_->ByteFallbackEnabled()) {
  ------------------
  |  Branch (344:11): [True: 125M, False: 27.4M]
  |  Branch (344:21): [True: 26.3M, False: 98.9M]
  ------------------
  345|       |        // Decomposes an unknown piece into UTF-8 bytes
  346|  77.2M|        for (size_t i = 0; i < w.size(); ++i) {
  ------------------
  |  Branch (346:28): [True: 50.8M, False: 26.3M]
  ------------------
  347|       |          // Create a byte piece
  348|  50.8M|          const uint8_t b = static_cast<uint8_t>(w[i]);
  349|  50.8M|          SentencePieceText::SentencePiece* sp = spt->add_pieces();
  350|  50.8M|          std::string& piece = *sp->mutable_piece();
  351|  50.8M|          piece = ByteToPiece(b);
  352|  50.8M|          int sp_id = model_->PieceToId(piece);
  353|  50.8M|          sp->set_id(sp_id);
  354|       |
  355|       |          // The last byte piece holds the surface of the original unknown
  356|       |          // character. The other byte pieces have no surface.
  357|  50.8M|          if (i == w.size() - 1) {
  ------------------
  |  Branch (357:15): [True: 26.3M, False: 24.5M]
  ------------------
  358|  26.3M|            if (!skip_surface) sp->set_surface(surface.data(), surface.size());
  ------------------
  |  Branch (358:17): [True: 26.3M, False: 0]
  ------------------
  359|  26.3M|            sp->set_begin(orig_begin);
  360|  26.3M|            sp->set_end(orig_end);
  361|  26.3M|          } else {
  362|       |            // begin == end
  363|  24.5M|            sp->set_begin(orig_begin);
  364|  24.5M|            sp->set_end(orig_begin);
  365|  24.5M|          }
  366|  50.8M|        }
  367|   126M|      } else {
  368|       |        // Merges continuous run of unknown pieces so that decoder
  369|       |        // can copy or generate unknown tokens easily.
  370|       |        // Note that merged tokens are still unknown,
  371|       |        // since known pieces never consist of unknown characters.
  372|   126M|        if (is_prev_unk && is_unk) {
  ------------------
  |  Branch (372:13): [True: 99.7M, False: 26.6M]
  |  Branch (372:28): [True: 84.5M, False: 15.2M]
  ------------------
  373|  84.5M|          auto* sp = spt->mutable_pieces(spt->pieces_size() - 1);
  374|  84.5M|          sp->mutable_piece()->append(w);
  375|  84.5M|          if (!skip_surface) sp->mutable_surface()->append(surface);
  ------------------
  |  Branch (375:15): [True: 84.5M, False: 0]
  ------------------
  376|  84.5M|          sp->set_end(orig_end);
  377|  84.5M|        } else {
  378|  41.9M|          auto* sp = spt->add_pieces();
  379|  41.9M|          sp->set_piece(w.data(), w.size());
  380|  41.9M|          sp->set_id(id);
  381|  41.9M|          if (!skip_surface) sp->set_surface(surface.data(), surface.size());
  ------------------
  |  Branch (381:15): [True: 41.9M, False: 0]
  ------------------
  382|  41.9M|          sp->set_begin(orig_begin);
  383|  41.9M|          sp->set_end(orig_end);
  384|  41.9M|        }
  385|   126M|      }
  386|   152M|      consumed += w.size();
  387|   152M|    }
  388|   152M|    is_prev_unk = is_unk;
  389|   152M|  }
  390|       |
  391|  15.6k|  RET_CHECK_EQ(consumed, normalized.size())
  ------------------
  |  |   28|  15.6k|#define RET_CHECK_EQ(a, b) RET_CHECK((a) == (b))
  |  |  ------------------
  |  |  |  |   23|  15.6k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 15.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  15.6k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  15.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  392|      0|      << "all normalized characters are not consumed.";
  393|       |
  394|  15.6k|  spt->set_text(input.data(), input.size());
  395|       |
  396|  15.6k|  if (apply_extra_options) {
  ------------------
  |  Branch (396:7): [True: 15.6k, False: 0]
  ------------------
  397|  15.6k|    ABSL_RETURN_IF_ERROR(ApplyExtraOptions(encode_extra_options_, spt));
  ------------------
  |  |   90|  15.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  31.3k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  31.3k|  switch (0)                                           \
  |  |  |  |  |  |  350|  31.3k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 15.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  15.6k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 15.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  31.3k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 15.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  31.3k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  31.3k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  15.6k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  31.3k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  398|  15.6k|  }
  399|       |
  400|  15.6k|  return absl::OkStatus();
  401|  15.6k|}  // namespace sentencepiece
_ZNK13sentencepiece22SentencePieceProcessor11NBestEncodeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEiPNS_22NBestSentencePieceTextE:
  421|  6.81k|    NBestSentencePieceText* nbest_spt) const {
  422|  13.6k|  RET_CHECK_STATUS_PROTO(nbest_spt);
  ------------------
  |  |  201|  6.81k|  ABSL_RETURN_IF_ERROR(status());             \
  |  |  ------------------
  |  |  |  |   90|  6.81k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  13.6k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  13.6k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  6.81k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  13.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 6.81k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  13.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  13.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  6.81k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  13.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  202|  6.81k|  RET_CHECK(proto) << "output proto is null"; \
  |  |  ------------------
  |  |  |  |   23|  6.81k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 6.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  6.81k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  6.81k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  203|  6.81k|  proto->Clear();
  ------------------
  423|       |
  424|  13.6k|  RET_CHECK_LE(nbest_size, kMaxNBestSize)
  ------------------
  |  |   31|  6.81k|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|  6.81k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 6.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  6.81k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  6.81k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  425|      0|      << "nbest_size must be nbest_size <= " << kMaxNBestSize;
  426|       |
  427|  6.81k|  std::string normalized;
  428|  6.81k|  std::vector<size_t> norm_to_orig;
  429|  6.81k|  ABSL_RETURN_IF_ERROR(
  ------------------
  |  |   90|  6.81k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  13.6k|  switch (0)                                           \
  |  |  |  |  |  |  350|  13.6k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  6.81k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  13.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 6.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  13.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  13.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  6.81k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  13.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  430|  6.81k|      normalizer_->Normalize(input, &normalized, &norm_to_orig));
  431|       |
  432|  6.81k|  RET_CHECK(model_->IsNBestEncodeAvailable())
  ------------------
  |  |   23|  10.1k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 3.43k, False: 3.37k]
  |  |  ------------------
  |  |   24|  3.43k|  } else /* NOLINT */                                         \
  |  |   25|  10.1k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|  3.37k|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  433|  3.37k|      << "NBestEncode is not available for the current model.";
  434|       |
  435|  3.43k|  const auto nbests = model_->NBestEncode(normalized, nbest_size);
  436|  3.43k|  RET_CHECK(!nbests.empty()) << "NBestEncode returns empty result.";
  ------------------
  |  |   23|  3.43k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 3.43k, False: 0]
  |  |  ------------------
  |  |   24|  3.43k|  } else /* NOLINT */                                         \
  |  |   25|  3.43k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  437|       |
  438|  4.55k|  for (const auto& result : nbests) {
  ------------------
  |  Branch (438:27): [True: 4.55k, False: 3.43k]
  ------------------
  439|  4.55k|    auto* spt = nbest_spt->add_nbests();
  440|  4.55k|    spt->set_score(result.second);
  441|  4.55k|    ABSL_RETURN_IF_ERROR(PopulateSentencePieceText(
  ------------------
  |  |   90|  4.55k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  9.10k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  9.10k|  switch (0)                                           \
  |  |  |  |  |  |  350|  9.10k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 4.55k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  4.55k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 4.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  9.10k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 4.55k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  9.10k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  9.10k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  4.55k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  9.10k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  442|  4.55k|        input, normalized, norm_to_orig, result.first, spt));
  443|  4.55k|  }
  444|       |
  445|  3.43k|  return absl::OkStatus();
  446|  3.43k|}
_ZNK13sentencepiece22SentencePieceProcessor12SampleEncodeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEifPNS_17SentencePieceTextE:
  450|  13.6k|    SentencePieceText* spt) const {
  451|  27.2k|  RET_CHECK_STATUS_PROTO(spt);
  ------------------
  |  |  201|  13.6k|  ABSL_RETURN_IF_ERROR(status());             \
  |  |  ------------------
  |  |  |  |   90|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  27.2k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  27.2k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  27.2k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 13.6k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  13.6k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 13.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  27.2k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 13.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  27.2k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  27.2k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  13.6k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  27.2k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  202|  13.6k|  RET_CHECK(proto) << "output proto is null"; \
  |  |  ------------------
  |  |  |  |   23|  13.6k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 13.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  13.6k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  13.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  203|  13.6k|  proto->Clear();
  ------------------
  452|       |
  453|  27.2k|  RET_CHECK(std::isfinite(alpha));
  ------------------
  |  |   23|  13.6k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 13.6k, False: 0]
  |  |  ------------------
  |  |   24|  13.6k|  } else /* NOLINT */                                         \
  |  |   25|  13.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  454|  13.6k|  RET_CHECK_GE(alpha, 0.0);
  ------------------
  |  |   30|  13.6k|#define RET_CHECK_GE(a, b) RET_CHECK((a) >= (b))
  |  |  ------------------
  |  |  |  |   23|  13.6k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 13.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  13.6k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  13.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  455|  13.6k|  RET_CHECK_LE(nbest_size, kMaxNBestSize)
  ------------------
  |  |   31|  13.6k|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|  13.6k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 13.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  13.6k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  13.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
  456|      0|      << "nbest_size must be nbest_size <= " << kMaxNBestSize;
  457|       |
  458|  13.6k|  std::string normalized;
  459|  13.6k|  std::vector<size_t> norm_to_orig;
  460|  13.6k|  ABSL_RETURN_IF_ERROR(
  ------------------
  |  |   90|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  27.2k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  27.2k|  switch (0)                                           \
  |  |  |  |  |  |  350|  27.2k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 13.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  13.6k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 13.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  27.2k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 13.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  27.2k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  27.2k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  13.6k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  27.2k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  461|  13.6k|      normalizer_->Normalize(input, &normalized, &norm_to_orig));
  462|       |
  463|  13.6k|  if (!model_->IsNBestEncodeAvailable() || nbest_size < 0) {
  ------------------
  |  Branch (463:7): [True: 6.75k, False: 6.86k]
  |  Branch (463:44): [True: 0, False: 6.86k]
  ------------------
  464|  6.75k|    RET_CHECK(model_->IsSampleEncodeAvailable())
  ------------------
  |  |   23|  9.26k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 4.25k, False: 2.50k]
  |  |  ------------------
  |  |   24|  4.25k|  } else /* NOLINT */                                         \
  |  |   25|  9.26k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|  2.50k|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  465|  2.50k|        << "SampleEncode is not available for the current model.";
  466|  4.25k|    const auto result = model_->SampleEncode(normalized, alpha);
  467|  4.25k|    ABSL_RETURN_IF_ERROR(PopulateSentencePieceText(input, normalized,
  ------------------
  |  |   90|  4.25k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  8.50k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  8.50k|  switch (0)                                           \
  |  |  |  |  |  |  350|  8.50k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 4.25k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  4.25k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 4.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  8.50k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 4.25k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  8.50k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  8.50k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  4.25k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  8.50k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  468|  4.25k|                                                   norm_to_orig, result, spt));
  469|  6.86k|  } else if (nbest_size == 1 || nbest_size == 0) {
  ------------------
  |  Branch (469:14): [True: 6.86k, False: 0]
  |  Branch (469:33): [True: 0, False: 0]
  ------------------
  470|  6.86k|    const auto result = model_->Encode(normalized);
  471|  6.86k|    ABSL_RETURN_IF_ERROR(PopulateSentencePieceText(input, normalized,
  ------------------
  |  |   90|  6.86k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  13.7k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  13.7k|  switch (0)                                           \
  |  |  |  |  |  |  350|  13.7k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 6.86k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  6.86k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 6.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  13.7k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 6.86k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  13.7k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  13.7k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  6.86k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  13.7k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  472|  6.86k|                                                   norm_to_orig, result, spt));
  473|  6.86k|  } else if (nbest_size > 1) {
  ------------------
  |  Branch (473:14): [True: 0, False: 0]
  ------------------
  474|      0|    const auto nbests = model_->NBestEncode(normalized, nbest_size);
  475|      0|    RET_CHECK(!nbests.empty()) << "NBestEncode returns empty result.";
  ------------------
  |  |   23|      0|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|  } else /* NOLINT */                                         \
  |  |   25|      0|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
  476|       |
  477|      0|    std::vector<double> log_probs;
  478|      0|    log_probs.reserve(nbests.size());
  479|      0|    std::transform(nbests.begin(), nbests.end(), std::back_inserter(log_probs),
  480|      0|                   [alpha](const auto& nbest) { return alpha * nbest.second; });
  481|       |
  482|      0|    const double Z = log_domain::LogSum(log_probs);
  483|      0|    std::vector<double> probs;
  484|      0|    probs.reserve(log_probs.size());
  485|      0|    std::transform(
  486|      0|        log_probs.begin(), log_probs.end(), std::back_inserter(probs),
  487|      0|        [Z](const auto& log_prob) { return std::exp(log_prob - Z); });
  488|      0|    log_domain::SanitizeDiscreteProbs(&probs);
  489|       |
  490|      0|    auto* mt = random::GetRandomGenerator();
  491|      0|    std::discrete_distribution<int> dist(probs.begin(), probs.end());
  492|      0|    ABSL_RETURN_IF_ERROR(PopulateSentencePieceText(
  ------------------
  |  |   90|      0|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|      0|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|      0|  switch (0)                                           \
  |  |  |  |  |  |  350|      0|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|      0|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|      0|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|      0|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|      0|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|      0|  } else /* NOLINT */                                                     \
  |  |  |  |  167|      0|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
  493|      0|        input, normalized, norm_to_orig, nbests[dist(*mt)].first, spt));
  494|      0|  }
  495|       |
  496|  11.1k|  return absl::OkStatus();
  497|  13.6k|}
_ZNK13sentencepiece22SentencePieceProcessor9NormalizeENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEPNS1_12basic_stringIcS4_NS1_9allocatorIcEEEE:
 1095|  6.81k|                                               std::string* normalized) const {
 1096|  6.81k|  RET_CHECK(normalizer_);
  ------------------
  |  |   23|  6.81k|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 6.81k, False: 0]
  |  |  ------------------
  |  |   24|  6.81k|  } else /* NOLINT */                                         \
  |  |   25|  6.81k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
 1097|  6.81k|  return normalizer_->Normalize(input, normalized, nullptr);
 1098|  6.81k|}
_ZNK13sentencepiece22SentencePieceProcessor12GetPieceSizeEv:
 1113|  6.81k|int SentencePieceProcessor::GetPieceSize() const {
 1114|  6.81k|  RET_CHECK_OR_RETURN_DEFAULT(0);
  ------------------
  |  | 1089|  6.81k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 6.81k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1115|  6.81k|  return model_->GetPieceSize();
 1116|  6.81k|}
_ZNK13sentencepiece22SentencePieceProcessor9PieceToIdENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
 1118|  62.1k|int SentencePieceProcessor::PieceToId(absl::string_view piece) const {
 1119|  62.1k|  RET_CHECK_OR_RETURN_DEFAULT(0);
  ------------------
  |  | 1089|  62.1k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 62.1k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1120|  62.1k|  return model_->PieceToId(piece);
 1121|  62.1k|}
_ZNK13sentencepiece22SentencePieceProcessor9IdToPieceEi:
 1123|  28.1k|const std::string& SentencePieceProcessor::IdToPiece(int id) const {
 1124|  28.1k|  static const std::string* kEmptyString = new std::string;
 1125|  28.1k|  RET_CHECK_OR_RETURN_DEFAULT(*kEmptyString);
  ------------------
  |  | 1089|  28.1k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 28.1k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1126|  28.1k|  if (id < 0 || id >= model_->GetPieceSize()) {
  ------------------
  |  Branch (1126:7): [True: 0, False: 28.1k]
  |  Branch (1126:17): [True: 0, False: 28.1k]
  ------------------
 1127|      0|    return *kEmptyString;
 1128|      0|  }
 1129|  28.1k|  return model_->IdToPiece(id);
 1130|  28.1k|}
_ZNK13sentencepiece22SentencePieceProcessor8GetScoreEi:
 1141|  28.1k|float SentencePieceProcessor::GetScore(int id) const {
 1142|  28.1k|  RET_CHECK_OR_RETURN_DEFAULT(0.0);
  ------------------
  |  | 1089|  28.1k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 28.1k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1143|  28.1k|  if (id < 0 || id >= model_->GetPieceSize()) {
  ------------------
  |  Branch (1143:7): [True: 0, False: 28.1k]
  |  Branch (1143:17): [True: 0, False: 28.1k]
  ------------------
 1144|      0|    return 0.0;
 1145|      0|  }
 1146|  28.1k|  return model_->GetScore(id);
 1147|  28.1k|}
_ZNK13sentencepiece22SentencePieceProcessor9IsControlEi:
 1149|  48.3k|bool SentencePieceProcessor::IsControl(int id) const {
 1150|  48.3k|  RET_CHECK_OR_RETURN_DEFAULT(0);
  ------------------
  |  | 1089|  48.3k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 48.3k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1151|  48.3k|  return id >= 0 && id < model_->GetPieceSize() && model_->IsControl(id);
  ------------------
  |  Branch (1151:10): [True: 48.3k, False: 0]
  |  Branch (1151:21): [True: 48.3k, False: 0]
  |  Branch (1151:52): [True: 2.42k, False: 45.9k]
  ------------------
 1152|  48.3k|}
_ZNK13sentencepiece22SentencePieceProcessor9IsUnknownEi:
 1154|  28.1k|bool SentencePieceProcessor::IsUnknown(int id) const {
 1155|  28.1k|  RET_CHECK_OR_RETURN_DEFAULT(0);
  ------------------
  |  | 1089|  28.1k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 28.1k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1156|  28.1k|  return IsUnknownId(*model_, unk_id_, id);
 1157|  28.1k|}
_ZNK13sentencepiece22SentencePieceProcessor8IsUnusedEi:
 1159|  28.1k|bool SentencePieceProcessor::IsUnused(int id) const {
 1160|  28.1k|  RET_CHECK_OR_RETURN_DEFAULT(false);
  ------------------
  |  | 1089|  28.1k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 28.1k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1161|  28.1k|  return id >= 0 && id < model_->GetPieceSize() && model_->IsUnused(id);
  ------------------
  |  Branch (1161:10): [True: 28.1k, False: 0]
  |  Branch (1161:21): [True: 28.1k, False: 0]
  |  Branch (1161:52): [True: 774, False: 27.3k]
  ------------------
 1162|  28.1k|}
_ZNK13sentencepiece22SentencePieceProcessor6IsByteEi:
 1164|  28.1k|bool SentencePieceProcessor::IsByte(int id) const {
 1165|  28.1k|  RET_CHECK_OR_RETURN_DEFAULT(false);
  ------------------
  |  | 1089|  28.1k|  if (!status().ok()) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1089:7): [True: 0, False: 28.1k]
  |  |  ------------------
  |  | 1090|      0|    LOG(ERROR) << status().message() << "\nReturns default value " << value; \
  |  |  ------------------
  |  |  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1091|      0|    return value;                                                            \
  |  | 1092|      0|  }
  ------------------
 1166|  28.1k|  return id >= 0 && id < model_->GetPieceSize() && model_->IsByte(id);
  ------------------
  |  Branch (1166:10): [True: 28.1k, False: 0]
  |  Branch (1166:21): [True: 28.1k, False: 0]
  |  Branch (1166:52): [True: 219, False: 27.9k]
  ------------------
 1167|  28.1k|}
_ZNK13sentencepiece22SentencePieceProcessor6unk_idEv:
 1169|  6.81k|int SentencePieceProcessor::unk_id() const { return unk_id_; }
_ZNK13sentencepiece22SentencePieceProcessor6bos_idEv:
 1171|  6.81k|int SentencePieceProcessor::bos_id() const { return bos_id_; }
_ZNK13sentencepiece22SentencePieceProcessor6eos_idEv:
 1173|  6.81k|int SentencePieceProcessor::eos_id() const { return eos_id_; }
_ZNK13sentencepiece22SentencePieceProcessor6pad_idEv:
 1175|  6.81k|int SentencePieceProcessor::pad_id() const { return pad_id_; }
_ZNK13sentencepiece22SentencePieceProcessor17HasUnkPieceOptionEv:
 1256|  15.9k|bool SentencePieceProcessor::HasUnkPieceOption() const {
 1257|  15.9k|  for (const auto& option : encode_extra_options_) {
  ------------------
  |  Branch (1257:27): [True: 0, False: 15.9k]
  ------------------
 1258|      0|    if (option == UNK_PIECE) return true;
  ------------------
  |  Branch (1258:9): [True: 0, False: 0]
  ------------------
 1259|      0|  }
 1260|  15.9k|  return false;
 1261|  15.9k|}
_ZNK13sentencepiece22SentencePieceProcessor22serialized_model_protoEv:
 1311|  6.81k|std::string SentencePieceProcessor::serialized_model_proto() const {
 1312|  6.81k|  return model_proto_ ? model_proto_->SerializeAsString() : "";
  ------------------
  |  Branch (1312:10): [True: 6.81k, False: 0]
  ------------------
 1313|  6.81k|}
sentencepiece_processor.cc:_ZN13sentencepiece12_GLOBAL__N_111IsUnknownIdERKNS_14ModelInterfaceEii:
   80|   402M|inline bool IsUnknownId(const ModelInterface& model, int unk_id, int id) {
   81|   402M|  return id == unk_id ||
  ------------------
  |  Branch (81:10): [True: 307M, False: 95.7M]
  ------------------
   82|  95.7M|         (id >= 0 && id < model.GetPieceSize() && model.IsUnknown(id));
  ------------------
  |  Branch (82:11): [True: 95.7M, False: 0]
  |  Branch (82:22): [True: 95.7M, False: 0]
  |  Branch (82:51): [True: 170k, False: 95.5M]
  ------------------
   83|   402M|}
sentencepiece_processor.cc:_ZN13sentencepiece12_GLOBAL__N_111IsControlIdERKNS_14ModelInterfaceEi:
   72|   402M|inline bool IsControlId(const ModelInterface& model, int id) {
   73|   402M|  return id >= 0 && id < model.GetPieceSize() && model.IsControl(id);
  ------------------
  |  Branch (73:10): [True: 402M, False: 270k]
  |  Branch (73:21): [True: 402M, False: 0]
  |  Branch (73:50): [True: 7.77k, False: 402M]
  ------------------
   74|   402M|}
sentencepiece_processor.cc:_ZN13sentencepiece12_GLOBAL__N_18IsByteIdERKNS_14ModelInterfaceEi:
   76|  72.0M|inline bool IsByteId(const ModelInterface& model, int id) {
   77|  72.0M|  return id >= 0 && id < model.GetPieceSize() && model.IsByte(id);
  ------------------
  |  Branch (77:10): [True: 72.0M, False: 0]
  |  Branch (77:21): [True: 72.0M, False: 0]
  |  Branch (77:50): [True: 29.1M, False: 42.8M]
  ------------------
   78|  72.0M|}
_ZNK13sentencepiece22SentencePieceProcessor15EncodeOptimizedINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEEN4absl12lts_202608176StatusENS2_17basic_string_viewIcS5_EEPNS2_6vectorIT_NS6_ISF_EEEE:
 1317|  13.6k|    absl::string_view input, std::vector<T>* output) const {
 1318|  27.2k|  RET_CHECK_STATUS_STL(output);
  ------------------
  |  |  196|  13.6k|  ABSL_RETURN_IF_ERROR(status());                     \
  |  |  ------------------
  |  |  |  |   90|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  27.2k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  27.2k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  27.2k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 13.6k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  13.6k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 13.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  27.2k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 13.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  27.2k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  27.2k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  13.6k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  27.2k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.6k|  RET_CHECK(container) << "output container is null"; \
  |  |  ------------------
  |  |  |  |   23|  13.6k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 13.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  13.6k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  13.6k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  198|  13.6k|  container->clear();
  ------------------
 1319|       |
 1320|  27.2k|  if (input.empty()) {
  ------------------
  |  Branch (1320:7): [True: 2.96k, False: 10.6k]
  ------------------
 1321|  2.96k|    return ApplyExtraOptions(encode_extra_options_, output);
 1322|  2.96k|  }
 1323|       |
 1324|  10.6k|  std::string normalized;
 1325|  10.6k|  ABSL_RETURN_IF_ERROR(
  ------------------
  |  |   90|  10.6k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  21.3k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  21.3k|  switch (0)                                           \
  |  |  |  |  |  |  350|  21.3k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 10.6k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  10.6k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 10.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  21.3k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 10.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  21.3k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  21.3k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  10.6k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  21.3k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1326|  10.6k|      normalizer_->Normalize(input, &normalized, /*norm_to_orig=*/nullptr));
 1327|  10.6k|  const EncodeResult result = model_->Encode(normalized);
 1328|  10.6k|  const bool byte_fallback_enabled = model_->ByteFallbackEnabled();
 1329|  10.6k|  const bool has_unk_piece = HasUnkPieceOption();
 1330|  10.6k|  bool is_prev_unk = false;
 1331|  10.6k|  output->reserve(result.size());
 1332|       |
 1333|   138M|  for (const auto& piece : result) {
  ------------------
  |  Branch (1333:26): [True: 138M, False: 10.6k]
  ------------------
 1334|   138M|    const absl::string_view w = piece.first;
 1335|   138M|    RET_CHECK(!piece.first.empty()) << "Empty piece is not allowed.";
  ------------------
  |  |   23|   138M|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 138M, False: 0]
  |  |  ------------------
  |  |   24|   138M|  } else /* NOLINT */                                         \
  |  |   25|   138M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
 1336|   138M|    const int id = piece.second;
 1337|   138M|    if (IsControlId(*model_, id)) {
  ------------------
  |  Branch (1337:9): [True: 0, False: 138M]
  ------------------
 1338|       |      if constexpr (std::is_same_v<T, int>) {
 1339|       |        output->emplace_back(id);
 1340|      0|      } else {
 1341|      0|        output->emplace_back(w.data(), w.size());
 1342|      0|      }
 1343|      0|      is_prev_unk = false;
 1344|   138M|    } else {
 1345|   138M|      const bool is_unk = IsUnknownId(*model_, unk_id_, id);
 1346|   138M|      if (is_unk && byte_fallback_enabled) {
  ------------------
  |  Branch (1346:11): [True: 110M, False: 27.3M]
  |  Branch (1346:21): [True: 15.2M, False: 95.5M]
  ------------------
 1347|  44.3M|        for (size_t i = 0; i < w.size(); ++i) {
  ------------------
  |  Branch (1347:28): [True: 29.1M, False: 15.2M]
  ------------------
 1348|       |          if constexpr (std::is_same_v<T, int>) {
 1349|       |            const auto sp_id =
 1350|       |                model_->PieceToId(ByteToPiece(static_cast<uint8_t>(w[i])));
 1351|       |            output->emplace_back(sp_id);
 1352|  29.1M|          } else {
 1353|  29.1M|            output->emplace_back(ByteToPiece(static_cast<uint8_t>(w[i])));
 1354|  29.1M|          }
 1355|  29.1M|        }
 1356|   122M|      } else {
 1357|       |        // Merge continuous runs of unknown pieces.
 1358|   122M|        if (!is_prev_unk || !is_unk) {
  ------------------
  |  Branch (1358:13): [True: 26.8M, False: 96.0M]
  |  Branch (1358:29): [True: 16.0M, False: 80.0M]
  ------------------
 1359|       |          if constexpr (std::is_same_v<T, int>) {
 1360|       |            output->emplace_back(id);
 1361|  42.8M|          } else {
 1362|  42.8M|            if (is_unk && has_unk_piece) {
  ------------------
  |  Branch (1362:17): [True: 15.5M, False: 27.3M]
  |  Branch (1362:27): [True: 0, False: 15.5M]
  ------------------
 1363|      0|              output->emplace_back(model_->unk_piece());
 1364|  42.8M|            } else {
 1365|  42.8M|              output->emplace_back(w.data(), w.size());
 1366|  42.8M|            }
 1367|  42.8M|          }
 1368|  80.0M|        } else {
 1369|  80.0M|          if constexpr (!std::is_same_v<T, int>) {
 1370|  80.0M|            if (!has_unk_piece) {
  ------------------
  |  Branch (1370:17): [True: 80.0M, False: 0]
  ------------------
 1371|  80.0M|              output->back().append(w.data(), w.size());
 1372|  80.0M|            }
 1373|  80.0M|          }
 1374|  80.0M|        }
 1375|   122M|      }
 1376|   138M|      is_prev_unk = is_unk;
 1377|   138M|    }
 1378|   138M|  }
 1379|       |
 1380|  10.6k|  return ApplyExtraOptions(encode_extra_options_, output);
 1381|  10.6k|}
_ZNK13sentencepiece22SentencePieceProcessor15EncodeOptimizedIiEEN4absl12lts_202608176StatusENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEPNS5_6vectorIT_NS5_9allocatorISB_EEEE:
 1317|  6.81k|    absl::string_view input, std::vector<T>* output) const {
 1318|  13.6k|  RET_CHECK_STATUS_STL(output);
  ------------------
  |  |  196|  6.81k|  ABSL_RETURN_IF_ERROR(status());                     \
  |  |  ------------------
  |  |  |  |   90|  6.81k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  13.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  13.6k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  13.6k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 6.81k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  6.81k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 6.81k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  13.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 6.81k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  13.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  13.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  6.81k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  13.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  6.81k|  RET_CHECK(container) << "output container is null"; \
  |  |  ------------------
  |  |  |  |   23|  6.81k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 6.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  6.81k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  6.81k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  198|  6.81k|  container->clear();
  ------------------
 1319|       |
 1320|  13.6k|  if (input.empty()) {
  ------------------
  |  Branch (1320:7): [True: 1.48k, False: 5.33k]
  ------------------
 1321|  1.48k|    return ApplyExtraOptions(encode_extra_options_, output);
 1322|  1.48k|  }
 1323|       |
 1324|  5.33k|  std::string normalized;
 1325|  5.33k|  ABSL_RETURN_IF_ERROR(
  ------------------
  |  |   90|  5.33k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  10.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  10.6k|  switch (0)                                           \
  |  |  |  |  |  |  350|  10.6k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 5.33k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  5.33k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 5.33k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  10.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 5.33k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  10.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  10.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  5.33k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  10.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1326|  5.33k|      normalizer_->Normalize(input, &normalized, /*norm_to_orig=*/nullptr));
 1327|  5.33k|  const EncodeResult result = model_->Encode(normalized);
 1328|  5.33k|  const bool byte_fallback_enabled = model_->ByteFallbackEnabled();
 1329|  5.33k|  const bool has_unk_piece = HasUnkPieceOption();
 1330|  5.33k|  bool is_prev_unk = false;
 1331|  5.33k|  output->reserve(result.size());
 1332|       |
 1333|  69.0M|  for (const auto& piece : result) {
  ------------------
  |  Branch (1333:26): [True: 69.0M, False: 5.33k]
  ------------------
 1334|  69.0M|    const absl::string_view w = piece.first;
 1335|  69.0M|    RET_CHECK(!piece.first.empty()) << "Empty piece is not allowed.";
  ------------------
  |  |   23|  69.0M|  if (condition) {                                            \
  |  |  ------------------
  |  |  |  Branch (23:7): [True: 69.0M, False: 0]
  |  |  ------------------
  |  |   24|  69.0M|  } else /* NOLINT */                                         \
  |  |   25|  69.0M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  ------------------
 1336|  69.0M|    const int id = piece.second;
 1337|  69.0M|    if (IsControlId(*model_, id)) {
  ------------------
  |  Branch (1337:9): [True: 0, False: 69.0M]
  ------------------
 1338|      0|      if constexpr (std::is_same_v<T, int>) {
 1339|      0|        output->emplace_back(id);
 1340|       |      } else {
 1341|       |        output->emplace_back(w.data(), w.size());
 1342|       |      }
 1343|      0|      is_prev_unk = false;
 1344|  69.0M|    } else {
 1345|  69.0M|      const bool is_unk = IsUnknownId(*model_, unk_id_, id);
 1346|  69.0M|      if (is_unk && byte_fallback_enabled) {
  ------------------
  |  Branch (1346:11): [True: 55.3M, False: 13.6M]
  |  Branch (1346:21): [True: 7.61M, False: 47.7M]
  ------------------
 1347|  22.1M|        for (size_t i = 0; i < w.size(); ++i) {
  ------------------
  |  Branch (1347:28): [True: 14.5M, False: 7.61M]
  ------------------
 1348|  14.5M|          if constexpr (std::is_same_v<T, int>) {
 1349|  14.5M|            const auto sp_id =
 1350|  14.5M|                model_->PieceToId(ByteToPiece(static_cast<uint8_t>(w[i])));
 1351|  14.5M|            output->emplace_back(sp_id);
 1352|       |          } else {
 1353|       |            output->emplace_back(ByteToPiece(static_cast<uint8_t>(w[i])));
 1354|       |          }
 1355|  14.5M|        }
 1356|  61.4M|      } else {
 1357|       |        // Merge continuous runs of unknown pieces.
 1358|  61.4M|        if (!is_prev_unk || !is_unk) {
  ------------------
  |  Branch (1358:13): [True: 13.4M, False: 48.0M]
  |  Branch (1358:29): [True: 8.01M, False: 40.0M]
  ------------------
 1359|  21.4M|          if constexpr (std::is_same_v<T, int>) {
 1360|  21.4M|            output->emplace_back(id);
 1361|       |          } else {
 1362|       |            if (is_unk && has_unk_piece) {
 1363|       |              output->emplace_back(model_->unk_piece());
 1364|       |            } else {
 1365|       |              output->emplace_back(w.data(), w.size());
 1366|       |            }
 1367|       |          }
 1368|  40.0M|        } else {
 1369|       |          if constexpr (!std::is_same_v<T, int>) {
 1370|       |            if (!has_unk_piece) {
 1371|       |              output->back().append(w.data(), w.size());
 1372|       |            }
 1373|       |          }
 1374|  40.0M|        }
 1375|  61.4M|      }
 1376|  69.0M|      is_prev_unk = is_unk;
 1377|  69.0M|    }
 1378|  69.0M|  }
 1379|       |
 1380|  5.33k|  return ApplyExtraOptions(encode_extra_options_, output);
 1381|  5.33k|}
_ZNK13sentencepiece22SentencePieceProcessor15DecodeOptimizedINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEEN4absl12lts_202608176StatusENS8_4SpanIKT_EEPNS2_12basic_stringIcS5_NS2_9allocatorIcEEEE:
 1385|  5.30k|    absl::Span<const T> input, std::string* detokenized) const {
 1386|  10.6k|  RET_CHECK_STATUS_STL(detokenized);
  ------------------
  |  |  196|  5.30k|  ABSL_RETURN_IF_ERROR(status());                     \
  |  |  ------------------
  |  |  |  |   90|  5.30k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  10.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  10.6k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  10.6k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 5.30k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  5.30k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 5.30k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  10.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 5.30k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  10.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  10.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  5.30k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  10.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  5.30k|  RET_CHECK(container) << "output container is null"; \
  |  |  ------------------
  |  |  |  |   23|  5.30k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 5.30k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  5.30k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  5.30k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  198|  5.30k|  container->clear();
  ------------------
 1387|       |
 1388|  10.6k|  if (input.empty()) {
  ------------------
  |  Branch (1388:7): [True: 0, False: 5.30k]
  ------------------
 1389|      0|    return absl::OkStatus();
 1390|      0|  }
 1391|       |
 1392|       |  // active_input points to the data we will decode. By default it points to the
 1393|       |  // input span (zero-copy).
 1394|  5.30k|  absl::Span<const T> active_input = input;
 1395|       |  // If we have extra options to apply, we must copy the input to a mutable
 1396|       |  // container (work_input) to apply the modifications, as the input span is
 1397|       |  // const.
 1398|  5.30k|  std::vector<T> work_input;
 1399|       |
 1400|  5.30k|  if (!decode_extra_options_.empty()) {
  ------------------
  |  Branch (1400:7): [True: 0, False: 5.30k]
  ------------------
 1401|      0|    work_input.assign(input.begin(), input.end());
 1402|      0|    ABSL_RETURN_IF_ERROR(ApplyExtraOptions(decode_extra_options_, &work_input));
  ------------------
  |  |   90|      0|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|      0|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|      0|  switch (0)                                           \
  |  |  |  |  |  |  350|      0|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|      0|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|      0|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|      0|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|      0|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|      0|  } else /* NOLINT */                                                     \
  |  |  |  |  167|      0|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1403|      0|    active_input = work_input;
 1404|      0|  }
 1405|       |
 1406|  5.30k|  absl::string_view unk_surface = kDefaultUnknownSymbol;
 1407|  5.30k|  if (model_proto_ && model_proto_->trainer_spec().has_unk_surface())
  ------------------
  |  Branch (1407:7): [True: 5.30k, False: 0]
  |  Branch (1407:23): [True: 53, False: 5.25k]
  ------------------
 1408|     53|    unk_surface = model_proto_->trainer_spec().unk_surface();
 1409|       |
 1410|  5.30k|  std::string byte_queue;
 1411|       |
 1412|  5.30k|  auto ProcessByteQueue = [&]() -> absl::Status {
 1413|  5.30k|    if (byte_queue.empty()) return absl::OkStatus();
 1414|  5.30k|    int offset = 0;
 1415|  5.30k|    const int bytes_len = byte_queue.size();
 1416|  5.30k|    while (offset < bytes_len) {
 1417|  5.30k|      size_t consumed;
 1418|  5.30k|      const bool is_valid = string_util::IsValidDecodeUTF8(
 1419|  5.30k|          absl::string_view(byte_queue).substr(offset), &consumed);
 1420|  5.30k|      if (!is_valid) {
 1421|  5.30k|        RET_CHECK_EQ(consumed, 1);
 1422|  5.30k|        absl::StrAppend(detokenized, kReplacementCharacter);
 1423|  5.30k|      } else {
 1424|  5.30k|        const absl::string_view utf8 =
 1425|  5.30k|            absl::string_view(byte_queue).substr(offset, consumed);
 1426|  5.30k|        absl::StrAppend(detokenized, utf8);
 1427|  5.30k|      }
 1428|  5.30k|      offset += consumed;
 1429|  5.30k|    }
 1430|  5.30k|    byte_queue.clear();
 1431|  5.30k|    return absl::OkStatus();
 1432|  5.30k|  };
 1433|       |
 1434|  5.30k|  bool is_bos_ws = true;
 1435|  5.30k|  const int num_pieces = model_->GetPieceSize();
 1436|  36.0M|  for (const auto& item : active_input) {
  ------------------
  |  Branch (1436:25): [True: 36.0M, False: 5.30k]
  ------------------
 1437|  36.0M|    int id = -1;
 1438|  36.0M|    absl::string_view piece;
 1439|       |    if constexpr (std::is_same_v<T, int>) {
 1440|       |      id = item;
 1441|       |      if (id < 0 || id >= num_pieces) {
 1442|       |        return absl::Status(absl::StatusCode::kOutOfRange,
 1443|       |                            absl::StrCat("Invalid id: ", id));
 1444|       |      }
 1445|       |      piece = model_->IdToPiece(id);
 1446|  36.0M|    } else {
 1447|  36.0M|      piece = item;
 1448|  36.0M|      id = model_->PieceToId(piece);
 1449|  36.0M|    }
 1450|       |
 1451|  36.0M|    if (IsByteId(*model_, id)) {
  ------------------
  |  Branch (1451:9): [True: 14.5M, False: 21.4M]
  ------------------
 1452|  14.5M|      const int byte = PieceToByte(piece);
 1453|  14.5M|      RET_CHECK_LE(0, byte);
  ------------------
  |  |   31|  14.5M|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|  14.5M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 14.5M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  14.5M|  } else /* NOLINT */                                         \
  |  |  |  |   25|  14.5M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
 1454|  14.5M|      byte_queue.append(1, byte);
 1455|  21.4M|    } else {
 1456|  21.4M|      ABSL_RETURN_IF_ERROR(ProcessByteQueue());
  ------------------
  |  |   90|  21.4M|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  42.8M|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  42.8M|  switch (0)                                           \
  |  |  |  |  |  |  350|  42.8M|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 21.4M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  21.4M|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 21.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  42.8M|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 21.4M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  42.8M|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  42.8M|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  21.4M|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  42.8M|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1457|  21.4M|      if (!detokenized->empty()) {
  ------------------
  |  Branch (1457:11): [True: 21.4M, False: 6.39k]
  ------------------
 1458|  21.4M|        is_bos_ws = false;
 1459|  21.4M|      }
 1460|       |
 1461|  21.4M|      if (IsControlId(*model_, id)) {
  ------------------
  |  Branch (1461:11): [True: 7.77k, False: 21.4M]
  ------------------
 1462|  7.77k|        continue;
 1463|  7.77k|      }
 1464|       |
 1465|  21.4M|      absl::string_view p = piece;
 1466|  21.4M|      bool has_bos_ws = false;
 1467|  21.4M|      if (is_bos_ws &&
  ------------------
  |  Branch (1467:11): [True: 6.29k, False: 21.4M]
  ------------------
 1468|  6.29k|          (!model_proto_ ||
  ------------------
  |  Branch (1468:12): [True: 0, False: 6.29k]
  ------------------
 1469|  6.29k|           model_proto_->normalizer_spec().add_dummy_prefix() ||
  ------------------
  |  Branch (1469:12): [True: 6.20k, False: 86]
  ------------------
 1470|  6.29k|           model_proto_->normalizer_spec().remove_extra_whitespaces())) {
  ------------------
  |  Branch (1470:12): [True: 83, False: 3]
  ------------------
 1471|  6.29k|        has_bos_ws = absl::ConsumePrefix(&p, kSpaceSymbol);
 1472|  6.29k|        if (model_proto_ &&
  ------------------
  |  Branch (1472:13): [True: 6.29k, False: 0]
  ------------------
 1473|  6.29k|            model_proto_->normalizer_spec().remove_extra_whitespaces()) {
  ------------------
  |  Branch (1473:13): [True: 6.25k, False: 37]
  ------------------
 1474|  6.25k|          has_bos_ws = false;
 1475|  6.25k|        }
 1476|  6.29k|      }
 1477|       |
 1478|  21.4M|      if (IsUnknownId(*model_, unk_id_, id)) {
  ------------------
  |  Branch (1478:11): [True: 7.92M, False: 13.5M]
  ------------------
 1479|  7.92M|        if (id >= 0 && model_->IdToPiece(id) == piece) {
  ------------------
  |  Branch (1479:13): [True: 7.92M, False: 0]
  |  Branch (1479:24): [True: 148k, False: 7.77M]
  ------------------
 1480|   148k|          absl::StrAppend(detokenized, unk_surface);
 1481|  7.77M|        } else {
 1482|  7.77M|          absl::StrAppend(detokenized, piece);
 1483|  7.77M|        }
 1484|  13.5M|      } else {
 1485|  13.5M|        absl::StrAppend(detokenized,
 1486|  13.5M|                        absl::StrReplaceAll(p, {{kSpaceSymbol, " "}}));
 1487|  13.5M|      }
 1488|       |
 1489|  21.4M|      if (has_bos_ws || !detokenized->empty()) {
  ------------------
  |  Branch (1489:11): [True: 36, False: 21.4M]
  |  Branch (1489:25): [True: 21.4M, False: 1.24k]
  ------------------
 1490|  21.4M|        is_bos_ws = false;
 1491|  21.4M|      }
 1492|  21.4M|    }
 1493|  36.0M|  }
 1494|  5.30k|  ABSL_RETURN_IF_ERROR(ProcessByteQueue());
  ------------------
  |  |   90|  5.30k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  15.9k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  10.6k|  switch (0)                                           \
  |  |  |  |  |  |  350|  10.6k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 5.30k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  5.30k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 5.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  15.9k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 5.30k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  15.9k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  15.9k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  5.30k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  15.9k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1495|       |
 1496|  5.30k|  if (denormalizer_) {
  ------------------
  |  Branch (1496:7): [True: 0, False: 5.30k]
  ------------------
 1497|      0|    *detokenized = denormalizer_->Normalize(*detokenized);
 1498|      0|  }
 1499|       |
 1500|  5.30k|  return absl::OkStatus();
 1501|  5.30k|}
_ZZNK13sentencepiece22SentencePieceProcessor15DecodeOptimizedINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEEN4absl12lts_202608176StatusENS8_4SpanIKT_EEPNS2_12basic_stringIcS5_NS2_9allocatorIcEEEEENKUlvE_clEv:
 1412|  21.4M|  auto ProcessByteQueue = [&]() -> absl::Status {
 1413|  21.4M|    if (byte_queue.empty()) return absl::OkStatus();
  ------------------
  |  Branch (1413:9): [True: 21.1M, False: 243k]
  ------------------
 1414|   243k|    int offset = 0;
 1415|   243k|    const int bytes_len = byte_queue.size();
 1416|  7.86M|    while (offset < bytes_len) {
  ------------------
  |  Branch (1416:12): [True: 7.61M, False: 243k]
  ------------------
 1417|  7.61M|      size_t consumed;
 1418|  7.61M|      const bool is_valid = string_util::IsValidDecodeUTF8(
 1419|  7.61M|          absl::string_view(byte_queue).substr(offset), &consumed);
 1420|  7.61M|      if (!is_valid) {
  ------------------
  |  Branch (1420:11): [True: 2.74k, False: 7.61M]
  ------------------
 1421|  2.74k|        RET_CHECK_EQ(consumed, 1);
  ------------------
  |  |   28|  2.74k|#define RET_CHECK_EQ(a, b) RET_CHECK((a) == (b))
  |  |  ------------------
  |  |  |  |   23|  2.74k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 2.74k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  2.74k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  2.74k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
 1422|  2.74k|        absl::StrAppend(detokenized, kReplacementCharacter);
 1423|  7.61M|      } else {
 1424|  7.61M|        const absl::string_view utf8 =
 1425|  7.61M|            absl::string_view(byte_queue).substr(offset, consumed);
 1426|  7.61M|        absl::StrAppend(detokenized, utf8);
 1427|  7.61M|      }
 1428|  7.61M|      offset += consumed;
 1429|  7.61M|    }
 1430|   243k|    byte_queue.clear();
 1431|   243k|    return absl::OkStatus();
 1432|   243k|  };
_ZNK13sentencepiece22SentencePieceProcessor15DecodeOptimizedIiEEN4absl12lts_202608176StatusENS3_4SpanIKT_EEPNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEE:
 1385|  5.30k|    absl::Span<const T> input, std::string* detokenized) const {
 1386|  10.6k|  RET_CHECK_STATUS_STL(detokenized);
  ------------------
  |  |  196|  5.30k|  ABSL_RETURN_IF_ERROR(status());                     \
  |  |  ------------------
  |  |  |  |   90|  5.30k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  10.6k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  349|  10.6k|  switch (0)                                           \
  |  |  |  |  |  |  |  |  350|  10.6k|  case 0:                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (350:3): [True: 5.30k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  351|  5.30k|  default:  // NOLINT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 5.30k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  163|  10.6k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (163:12): [True: 5.30k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  164|  10.6k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  |  |  165|  10.6k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  |  |  166|  5.30k|  } else /* NOLINT */                                                     \
  |  |  |  |  |  |  167|  10.6k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  5.30k|  RET_CHECK(container) << "output container is null"; \
  |  |  ------------------
  |  |  |  |   23|  5.30k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 5.30k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  5.30k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  5.30k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  |  |  198|  5.30k|  container->clear();
  ------------------
 1387|       |
 1388|  10.6k|  if (input.empty()) {
  ------------------
  |  Branch (1388:7): [True: 0, False: 5.30k]
  ------------------
 1389|      0|    return absl::OkStatus();
 1390|      0|  }
 1391|       |
 1392|       |  // active_input points to the data we will decode. By default it points to the
 1393|       |  // input span (zero-copy).
 1394|  5.30k|  absl::Span<const T> active_input = input;
 1395|       |  // If we have extra options to apply, we must copy the input to a mutable
 1396|       |  // container (work_input) to apply the modifications, as the input span is
 1397|       |  // const.
 1398|  5.30k|  std::vector<T> work_input;
 1399|       |
 1400|  5.30k|  if (!decode_extra_options_.empty()) {
  ------------------
  |  Branch (1400:7): [True: 0, False: 5.30k]
  ------------------
 1401|      0|    work_input.assign(input.begin(), input.end());
 1402|      0|    ABSL_RETURN_IF_ERROR(ApplyExtraOptions(decode_extra_options_, &work_input));
  ------------------
  |  |   90|      0|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|      0|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|      0|  switch (0)                                           \
  |  |  |  |  |  |  350|      0|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|      0|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|      0|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|      0|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|      0|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|      0|  } else /* NOLINT */                                                     \
  |  |  |  |  167|      0|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1403|      0|    active_input = work_input;
 1404|      0|  }
 1405|       |
 1406|  5.30k|  absl::string_view unk_surface = kDefaultUnknownSymbol;
 1407|  5.30k|  if (model_proto_ && model_proto_->trainer_spec().has_unk_surface())
  ------------------
  |  Branch (1407:7): [True: 5.30k, False: 0]
  |  Branch (1407:23): [True: 53, False: 5.25k]
  ------------------
 1408|     53|    unk_surface = model_proto_->trainer_spec().unk_surface();
 1409|       |
 1410|  5.30k|  std::string byte_queue;
 1411|       |
 1412|  5.30k|  auto ProcessByteQueue = [&]() -> absl::Status {
 1413|  5.30k|    if (byte_queue.empty()) return absl::OkStatus();
 1414|  5.30k|    int offset = 0;
 1415|  5.30k|    const int bytes_len = byte_queue.size();
 1416|  5.30k|    while (offset < bytes_len) {
 1417|  5.30k|      size_t consumed;
 1418|  5.30k|      const bool is_valid = string_util::IsValidDecodeUTF8(
 1419|  5.30k|          absl::string_view(byte_queue).substr(offset), &consumed);
 1420|  5.30k|      if (!is_valid) {
 1421|  5.30k|        RET_CHECK_EQ(consumed, 1);
 1422|  5.30k|        absl::StrAppend(detokenized, kReplacementCharacter);
 1423|  5.30k|      } else {
 1424|  5.30k|        const absl::string_view utf8 =
 1425|  5.30k|            absl::string_view(byte_queue).substr(offset, consumed);
 1426|  5.30k|        absl::StrAppend(detokenized, utf8);
 1427|  5.30k|      }
 1428|  5.30k|      offset += consumed;
 1429|  5.30k|    }
 1430|  5.30k|    byte_queue.clear();
 1431|  5.30k|    return absl::OkStatus();
 1432|  5.30k|  };
 1433|       |
 1434|  5.30k|  bool is_bos_ws = true;
 1435|  5.30k|  const int num_pieces = model_->GetPieceSize();
 1436|  36.0M|  for (const auto& item : active_input) {
  ------------------
  |  Branch (1436:25): [True: 36.0M, False: 5.30k]
  ------------------
 1437|  36.0M|    int id = -1;
 1438|  36.0M|    absl::string_view piece;
 1439|  36.0M|    if constexpr (std::is_same_v<T, int>) {
 1440|  36.0M|      id = item;
 1441|  36.0M|      if (id < 0 || id >= num_pieces) {
  ------------------
  |  Branch (1441:11): [True: 0, False: 36.0M]
  |  Branch (1441:21): [True: 0, False: 36.0M]
  ------------------
 1442|      0|        return absl::Status(absl::StatusCode::kOutOfRange,
 1443|      0|                            absl::StrCat("Invalid id: ", id));
 1444|      0|      }
 1445|  36.0M|      piece = model_->IdToPiece(id);
 1446|       |    } else {
 1447|       |      piece = item;
 1448|       |      id = model_->PieceToId(piece);
 1449|       |    }
 1450|       |
 1451|  36.0M|    if (IsByteId(*model_, id)) {
  ------------------
  |  Branch (1451:9): [True: 14.5M, False: 21.4M]
  ------------------
 1452|  14.5M|      const int byte = PieceToByte(piece);
 1453|  14.5M|      RET_CHECK_LE(0, byte);
  ------------------
  |  |   31|  14.5M|#define RET_CHECK_LE(a, b) RET_CHECK((a) <= (b))
  |  |  ------------------
  |  |  |  |   23|  14.5M|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 14.5M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  14.5M|  } else /* NOLINT */                                         \
  |  |  |  |   25|  14.5M|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
 1454|  14.5M|      byte_queue.append(1, byte);
 1455|  21.4M|    } else {
 1456|  21.4M|      ABSL_RETURN_IF_ERROR(ProcessByteQueue());
  ------------------
  |  |   90|  21.4M|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  42.8M|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  42.8M|  switch (0)                                           \
  |  |  |  |  |  |  350|  42.8M|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 21.4M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  21.4M|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 21.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  42.8M|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 21.4M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  42.8M|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  42.8M|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  21.4M|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  42.8M|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1457|  21.4M|      if (!detokenized->empty()) {
  ------------------
  |  Branch (1457:11): [True: 21.4M, False: 8.09k]
  ------------------
 1458|  21.4M|        is_bos_ws = false;
 1459|  21.4M|      }
 1460|       |
 1461|  21.4M|      if (IsControlId(*model_, id)) {
  ------------------
  |  Branch (1461:11): [True: 0, False: 21.4M]
  ------------------
 1462|      0|        continue;
 1463|      0|      }
 1464|       |
 1465|  21.4M|      absl::string_view p = piece;
 1466|  21.4M|      bool has_bos_ws = false;
 1467|  21.4M|      if (is_bos_ws &&
  ------------------
  |  Branch (1467:11): [True: 8.06k, False: 21.4M]
  ------------------
 1468|  8.06k|          (!model_proto_ ||
  ------------------
  |  Branch (1468:12): [True: 0, False: 8.06k]
  ------------------
 1469|  8.06k|           model_proto_->normalizer_spec().add_dummy_prefix() ||
  ------------------
  |  Branch (1469:12): [True: 7.44k, False: 616]
  ------------------
 1470|  8.06k|           model_proto_->normalizer_spec().remove_extra_whitespaces())) {
  ------------------
  |  Branch (1470:12): [True: 612, False: 4]
  ------------------
 1471|  8.06k|        has_bos_ws = absl::ConsumePrefix(&p, kSpaceSymbol);
 1472|  8.06k|        if (model_proto_ &&
  ------------------
  |  Branch (1472:13): [True: 8.06k, False: 0]
  ------------------
 1473|  8.06k|            model_proto_->normalizer_spec().remove_extra_whitespaces()) {
  ------------------
  |  Branch (1473:13): [True: 8.02k, False: 38]
  ------------------
 1474|  8.02k|          has_bos_ws = false;
 1475|  8.02k|        }
 1476|  8.06k|      }
 1477|       |
 1478|  21.4M|      if (IsUnknownId(*model_, unk_id_, id)) {
  ------------------
  |  Branch (1478:11): [True: 7.77M, False: 13.6M]
  ------------------
 1479|  7.77M|        if (id >= 0 && model_->IdToPiece(id) == piece) {
  ------------------
  |  Branch (1479:13): [True: 7.77M, False: 0]
  |  Branch (1479:24): [True: 7.77M, False: 0]
  ------------------
 1480|  7.77M|          absl::StrAppend(detokenized, unk_surface);
 1481|  7.77M|        } else {
 1482|      0|          absl::StrAppend(detokenized, piece);
 1483|      0|        }
 1484|  13.6M|      } else {
 1485|  13.6M|        absl::StrAppend(detokenized,
 1486|  13.6M|                        absl::StrReplaceAll(p, {{kSpaceSymbol, " "}}));
 1487|  13.6M|      }
 1488|       |
 1489|  21.4M|      if (has_bos_ws || !detokenized->empty()) {
  ------------------
  |  Branch (1489:11): [True: 30, False: 21.4M]
  |  Branch (1489:25): [True: 21.4M, False: 3.05k]
  ------------------
 1490|  21.4M|        is_bos_ws = false;
 1491|  21.4M|      }
 1492|  21.4M|    }
 1493|  36.0M|  }
 1494|  5.30k|  ABSL_RETURN_IF_ERROR(ProcessByteQueue());
  ------------------
  |  |   90|  5.30k|  ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
  |  |  ------------------
  |  |  |  |  162|  15.9k|  ABSL_INTERNAL_STATUS_MACROS_IMPL_ELSE_BLOCKER_                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  349|  10.6k|  switch (0)                                           \
  |  |  |  |  |  |  350|  10.6k|  case 0:                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (350:3): [True: 5.30k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  351|  5.30k|  default:  // NOLINT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (351:3): [True: 0, False: 5.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  163|  15.9k|  if (auto status_macro_internal_adaptor =                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (163:12): [True: 5.30k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  164|  15.9k|          absl::status_macro_internal::MacroAdaptor(                      \
  |  |  |  |  165|  15.9k|              (expr), absl::SourceLocation::current())) {                 \
  |  |  |  |  166|  5.30k|  } else /* NOLINT */                                                     \
  |  |  |  |  167|  15.9k|    return_keyword status_macro_internal_adaptor.Consume()
  |  |  ------------------
  ------------------
 1495|       |
 1496|  5.30k|  if (denormalizer_) {
  ------------------
  |  Branch (1496:7): [True: 0, False: 5.30k]
  ------------------
 1497|      0|    *detokenized = denormalizer_->Normalize(*detokenized);
 1498|      0|  }
 1499|       |
 1500|  5.30k|  return absl::OkStatus();
 1501|  5.30k|}
_ZZNK13sentencepiece22SentencePieceProcessor15DecodeOptimizedIiEEN4absl12lts_202608176StatusENS3_4SpanIKT_EEPNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEEENKUlvE_clEv:
 1412|  21.4M|  auto ProcessByteQueue = [&]() -> absl::Status {
 1413|  21.4M|    if (byte_queue.empty()) return absl::OkStatus();
  ------------------
  |  Branch (1413:9): [True: 21.1M, False: 243k]
  ------------------
 1414|   243k|    int offset = 0;
 1415|   243k|    const int bytes_len = byte_queue.size();
 1416|  7.86M|    while (offset < bytes_len) {
  ------------------
  |  Branch (1416:12): [True: 7.61M, False: 243k]
  ------------------
 1417|  7.61M|      size_t consumed;
 1418|  7.61M|      const bool is_valid = string_util::IsValidDecodeUTF8(
 1419|  7.61M|          absl::string_view(byte_queue).substr(offset), &consumed);
 1420|  7.61M|      if (!is_valid) {
  ------------------
  |  Branch (1420:11): [True: 2.64k, False: 7.61M]
  ------------------
 1421|  2.64k|        RET_CHECK_EQ(consumed, 1);
  ------------------
  |  |   28|  2.64k|#define RET_CHECK_EQ(a, b) RET_CHECK((a) == (b))
  |  |  ------------------
  |  |  |  |   23|  2.64k|  if (condition) {                                            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:7): [True: 2.64k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   24|  2.64k|  } else /* NOLINT */                                         \
  |  |  |  |   25|  2.64k|    return absl::StatusBuilder(::absl::StatusCode::kInternal) \
  |  |  |  |   26|      0|           << __FILE__ << "(" << __LINE__ << ") [" << #condition << "] "
  |  |  ------------------
  ------------------
 1422|  2.64k|        absl::StrAppend(detokenized, kReplacementCharacter);
 1423|  7.61M|      } else {
 1424|  7.61M|        const absl::string_view utf8 =
 1425|  7.61M|            absl::string_view(byte_queue).substr(offset, consumed);
 1426|  7.61M|        absl::StrAppend(detokenized, utf8);
 1427|  7.61M|      }
 1428|  7.61M|      offset += consumed;
 1429|  7.61M|    }
 1430|   243k|    byte_queue.clear();
 1431|   243k|    return absl::OkStatus();
 1432|   243k|  };
_ZNK13sentencepiece22SentencePieceProcessor17ApplyExtraOptionsINS_17SentencePieceTextEEEN4absl12lts_202608176StatusENS4_4SpanIKNS0_11ExtraOptionEEEPT_:
 1179|  15.6k|    absl::Span<const ExtraOption> extra_options, T* output) const {
 1180|  15.6k|  for (const auto& extra_option : extra_options) {
  ------------------
  |  Branch (1180:33): [True: 0, False: 15.6k]
  ------------------
 1181|      0|    switch (extra_option) {
 1182|      0|      case REVERSE:
  ------------------
  |  Branch (1182:7): [True: 0, False: 0]
  ------------------
 1183|      0|        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1184|      0|          std::reverse(output->mutable_pieces()->begin(),
 1185|      0|                       output->mutable_pieces()->end());
 1186|       |        } else {
 1187|       |          std::reverse(output->begin(), output->end());
 1188|       |        }
 1189|      0|        break;
 1190|      0|      case EOS:
  ------------------
  |  Branch (1190:7): [True: 0, False: 0]
  ------------------
 1191|      0|        if (const int id = eos_id(); id != -1) {
  ------------------
  |  Branch (1191:38): [True: 0, False: 0]
  ------------------
 1192|      0|          if constexpr (std::is_same_v<T, SentencePieceText>) {
 1193|      0|            auto* piece = output->add_pieces();
 1194|      0|            piece->set_id(id);
 1195|      0|            piece->set_piece(model_->eos_piece().data(),
 1196|      0|                             model_->eos_piece().size());
 1197|      0|            piece->set_begin(output->text().size());
 1198|      0|            piece->set_end(output->text().size());
 1199|       |          } else {
 1200|       |            using V = typename T::value_type;
 1201|       |            if constexpr (std::is_same_v<V, int>) {
 1202|       |              output->emplace_back(id);
 1203|       |            } else {
 1204|       |              output->emplace_back(model_->eos_piece());
 1205|       |            }
 1206|       |          }
 1207|      0|        }
 1208|      0|        break;
 1209|      0|      case BOS:
  ------------------
  |  Branch (1209:7): [True: 0, False: 0]
  ------------------
 1210|      0|        if (const int id = bos_id(); id != -1) {
  ------------------
  |  Branch (1210:38): [True: 0, False: 0]
  ------------------
 1211|      0|          if constexpr (std::is_same_v<T, SentencePieceText>) {
 1212|      0|            auto* array = output->mutable_pieces();
 1213|      0|            array->Add();
 1214|      0|            for (int i = array->size() - 1; i > 0; --i) {
  ------------------
  |  Branch (1214:45): [True: 0, False: 0]
  ------------------
 1215|      0|              array->SwapElements(i - 1, i);
 1216|      0|            }
 1217|      0|            auto* piece = array->Mutable(0);
 1218|      0|            piece->set_id(id);
 1219|      0|            piece->set_piece(model_->bos_piece().data(),
 1220|      0|                             model_->bos_piece().size());
 1221|      0|            piece->set_begin(0);
 1222|      0|            piece->set_end(0);
 1223|       |          } else {
 1224|       |            using V = typename T::value_type;
 1225|       |            if constexpr (std::is_same_v<V, int>) {
 1226|       |              output->emplace(output->begin(), id);
 1227|       |            } else {
 1228|       |              output->emplace(output->begin(), model_->bos_piece());
 1229|       |            }
 1230|       |          }
 1231|      0|        }
 1232|      0|        break;
 1233|      0|      case UNK_PIECE:
  ------------------
  |  Branch (1233:7): [True: 0, False: 0]
  ------------------
 1234|      0|        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1235|      0|          for (int i = 0; i < output->pieces_size(); ++i) {
  ------------------
  |  Branch (1235:27): [True: 0, False: 0]
  ------------------
 1236|      0|            auto* piece = output->mutable_pieces(i);
 1237|      0|            if (IsUnknownId(*model_, unk_id_, piece->id())) {
  ------------------
  |  Branch (1237:17): [True: 0, False: 0]
  ------------------
 1238|      0|              piece->set_piece(model_->unk_piece().data(),
 1239|      0|                               model_->unk_piece().size());
 1240|      0|            }
 1241|      0|          }
 1242|      0|        }
 1243|      0|        break;
 1244|      0|      default:
  ------------------
  |  Branch (1244:7): [True: 0, False: 0]
  ------------------
 1245|      0|        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1246|      0|          output->Clear();
 1247|       |        } else {
 1248|       |          output->clear();
 1249|       |        }
 1250|      0|        return absl::InternalError("unknown extra_option type.");
 1251|      0|    }
 1252|      0|  }
 1253|  15.6k|  return absl::OkStatus();
 1254|  15.6k|}
_ZNK13sentencepiece22SentencePieceProcessor17ApplyExtraOptionsINSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEEEEN4absl12lts_202608176StatusENSD_4SpanIKNS0_11ExtraOptionEEEPT_:
 1179|  13.6k|    absl::Span<const ExtraOption> extra_options, T* output) const {
 1180|  13.6k|  for (const auto& extra_option : extra_options) {
  ------------------
  |  Branch (1180:33): [True: 0, False: 13.6k]
  ------------------
 1181|      0|    switch (extra_option) {
 1182|      0|      case REVERSE:
  ------------------
  |  Branch (1182:7): [True: 0, False: 0]
  ------------------
 1183|       |        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1184|       |          std::reverse(output->mutable_pieces()->begin(),
 1185|       |                       output->mutable_pieces()->end());
 1186|      0|        } else {
 1187|      0|          std::reverse(output->begin(), output->end());
 1188|      0|        }
 1189|      0|        break;
 1190|      0|      case EOS:
  ------------------
  |  Branch (1190:7): [True: 0, False: 0]
  ------------------
 1191|      0|        if (const int id = eos_id(); id != -1) {
  ------------------
  |  Branch (1191:38): [True: 0, False: 0]
  ------------------
 1192|       |          if constexpr (std::is_same_v<T, SentencePieceText>) {
 1193|       |            auto* piece = output->add_pieces();
 1194|       |            piece->set_id(id);
 1195|       |            piece->set_piece(model_->eos_piece().data(),
 1196|       |                             model_->eos_piece().size());
 1197|       |            piece->set_begin(output->text().size());
 1198|       |            piece->set_end(output->text().size());
 1199|      0|          } else {
 1200|      0|            using V = typename T::value_type;
 1201|       |            if constexpr (std::is_same_v<V, int>) {
 1202|       |              output->emplace_back(id);
 1203|      0|            } else {
 1204|      0|              output->emplace_back(model_->eos_piece());
 1205|      0|            }
 1206|      0|          }
 1207|      0|        }
 1208|      0|        break;
 1209|      0|      case BOS:
  ------------------
  |  Branch (1209:7): [True: 0, False: 0]
  ------------------
 1210|      0|        if (const int id = bos_id(); id != -1) {
  ------------------
  |  Branch (1210:38): [True: 0, False: 0]
  ------------------
 1211|       |          if constexpr (std::is_same_v<T, SentencePieceText>) {
 1212|       |            auto* array = output->mutable_pieces();
 1213|       |            array->Add();
 1214|       |            for (int i = array->size() - 1; i > 0; --i) {
 1215|       |              array->SwapElements(i - 1, i);
 1216|       |            }
 1217|       |            auto* piece = array->Mutable(0);
 1218|       |            piece->set_id(id);
 1219|       |            piece->set_piece(model_->bos_piece().data(),
 1220|       |                             model_->bos_piece().size());
 1221|       |            piece->set_begin(0);
 1222|       |            piece->set_end(0);
 1223|      0|          } else {
 1224|      0|            using V = typename T::value_type;
 1225|       |            if constexpr (std::is_same_v<V, int>) {
 1226|       |              output->emplace(output->begin(), id);
 1227|      0|            } else {
 1228|      0|              output->emplace(output->begin(), model_->bos_piece());
 1229|      0|            }
 1230|      0|          }
 1231|      0|        }
 1232|      0|        break;
 1233|      0|      case UNK_PIECE:
  ------------------
  |  Branch (1233:7): [True: 0, False: 0]
  ------------------
 1234|       |        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1235|       |          for (int i = 0; i < output->pieces_size(); ++i) {
 1236|       |            auto* piece = output->mutable_pieces(i);
 1237|       |            if (IsUnknownId(*model_, unk_id_, piece->id())) {
 1238|       |              piece->set_piece(model_->unk_piece().data(),
 1239|       |                               model_->unk_piece().size());
 1240|       |            }
 1241|       |          }
 1242|       |        }
 1243|      0|        break;
 1244|      0|      default:
  ------------------
  |  Branch (1244:7): [True: 0, False: 0]
  ------------------
 1245|       |        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1246|       |          output->Clear();
 1247|      0|        } else {
 1248|      0|          output->clear();
 1249|      0|        }
 1250|      0|        return absl::InternalError("unknown extra_option type.");
 1251|      0|    }
 1252|      0|  }
 1253|  13.6k|  return absl::OkStatus();
 1254|  13.6k|}
_ZNK13sentencepiece22SentencePieceProcessor17ApplyExtraOptionsINSt3__16vectorIiNS2_9allocatorIiEEEEEEN4absl12lts_202608176StatusENS8_4SpanIKNS0_11ExtraOptionEEEPT_:
 1179|  6.81k|    absl::Span<const ExtraOption> extra_options, T* output) const {
 1180|  6.81k|  for (const auto& extra_option : extra_options) {
  ------------------
  |  Branch (1180:33): [True: 0, False: 6.81k]
  ------------------
 1181|      0|    switch (extra_option) {
 1182|      0|      case REVERSE:
  ------------------
  |  Branch (1182:7): [True: 0, False: 0]
  ------------------
 1183|       |        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1184|       |          std::reverse(output->mutable_pieces()->begin(),
 1185|       |                       output->mutable_pieces()->end());
 1186|      0|        } else {
 1187|      0|          std::reverse(output->begin(), output->end());
 1188|      0|        }
 1189|      0|        break;
 1190|      0|      case EOS:
  ------------------
  |  Branch (1190:7): [True: 0, False: 0]
  ------------------
 1191|      0|        if (const int id = eos_id(); id != -1) {
  ------------------
  |  Branch (1191:38): [True: 0, False: 0]
  ------------------
 1192|       |          if constexpr (std::is_same_v<T, SentencePieceText>) {
 1193|       |            auto* piece = output->add_pieces();
 1194|       |            piece->set_id(id);
 1195|       |            piece->set_piece(model_->eos_piece().data(),
 1196|       |                             model_->eos_piece().size());
 1197|       |            piece->set_begin(output->text().size());
 1198|       |            piece->set_end(output->text().size());
 1199|      0|          } else {
 1200|      0|            using V = typename T::value_type;
 1201|      0|            if constexpr (std::is_same_v<V, int>) {
 1202|      0|              output->emplace_back(id);
 1203|       |            } else {
 1204|       |              output->emplace_back(model_->eos_piece());
 1205|       |            }
 1206|      0|          }
 1207|      0|        }
 1208|      0|        break;
 1209|      0|      case BOS:
  ------------------
  |  Branch (1209:7): [True: 0, False: 0]
  ------------------
 1210|      0|        if (const int id = bos_id(); id != -1) {
  ------------------
  |  Branch (1210:38): [True: 0, False: 0]
  ------------------
 1211|       |          if constexpr (std::is_same_v<T, SentencePieceText>) {
 1212|       |            auto* array = output->mutable_pieces();
 1213|       |            array->Add();
 1214|       |            for (int i = array->size() - 1; i > 0; --i) {
 1215|       |              array->SwapElements(i - 1, i);
 1216|       |            }
 1217|       |            auto* piece = array->Mutable(0);
 1218|       |            piece->set_id(id);
 1219|       |            piece->set_piece(model_->bos_piece().data(),
 1220|       |                             model_->bos_piece().size());
 1221|       |            piece->set_begin(0);
 1222|       |            piece->set_end(0);
 1223|      0|          } else {
 1224|      0|            using V = typename T::value_type;
 1225|      0|            if constexpr (std::is_same_v<V, int>) {
 1226|      0|              output->emplace(output->begin(), id);
 1227|       |            } else {
 1228|       |              output->emplace(output->begin(), model_->bos_piece());
 1229|       |            }
 1230|      0|          }
 1231|      0|        }
 1232|      0|        break;
 1233|      0|      case UNK_PIECE:
  ------------------
  |  Branch (1233:7): [True: 0, False: 0]
  ------------------
 1234|       |        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1235|       |          for (int i = 0; i < output->pieces_size(); ++i) {
 1236|       |            auto* piece = output->mutable_pieces(i);
 1237|       |            if (IsUnknownId(*model_, unk_id_, piece->id())) {
 1238|       |              piece->set_piece(model_->unk_piece().data(),
 1239|       |                               model_->unk_piece().size());
 1240|       |            }
 1241|       |          }
 1242|       |        }
 1243|      0|        break;
 1244|      0|      default:
  ------------------
  |  Branch (1244:7): [True: 0, False: 0]
  ------------------
 1245|       |        if constexpr (std::is_same_v<T, SentencePieceText>) {
 1246|       |          output->Clear();
 1247|      0|        } else {
 1248|      0|          output->clear();
 1249|      0|        }
 1250|      0|        return absl::InternalError("unknown extra_option type.");
 1251|      0|    }
 1252|      0|  }
 1253|  6.81k|  return absl::OkStatus();
 1254|  6.81k|}

_ZN13sentencepiece7unigram7LatticeC2Ev:
   91|  2.53k|Lattice::Lattice() : node_allocator_(kPreallocateLatticeNodeSize) {}
_ZN13sentencepiece7unigram7LatticeD2Ev:
   92|  2.53k|Lattice::~Lattice() {}
_ZNK13sentencepiece7unigram7Lattice9end_nodesEi:
   98|   211M|const std::vector<Lattice::Node*>& Lattice::end_nodes(int pos) const {
   99|   211M|  return end_nodes_[pos];
  100|   211M|}
_ZNK13sentencepiece7unigram7Lattice4sizeEv:
  102|  30.6M|int Lattice::size() const {
  103|       |  // -1 because surface_ may include the EOS.
  104|  30.6M|  return std::max<int>(0, surface_.size() - 1);
  105|  30.6M|}
_ZNK13sentencepiece7unigram7Lattice9utf8_sizeEv:
  107|  2.53k|int Lattice::utf8_size() const { return sentence_.size(); }
_ZNK13sentencepiece7unigram7Lattice8sentenceEv:
  109|  2.53k|const char* Lattice::sentence() const { return sentence_.data(); }
_ZNK13sentencepiece7unigram7Lattice7surfaceEi:
  111|   132M|const char* Lattice::surface(int pos) const { return surface_[pos]; }
_ZNK13sentencepiece7unigram7Lattice8bos_nodeEv:
  113|  93.8M|Lattice::Node* Lattice::bos_node() const { return end_nodes_[0][0]; }
_ZNK13sentencepiece7unigram7Lattice8eos_nodeEv:
  115|  2.53k|Lattice::Node* Lattice::eos_node() const { return begin_nodes_[size()][0]; }
_ZN13sentencepiece7unigram7Lattice7NewNodeEv:
  117|  30.5M|Lattice::Node* Lattice::NewNode() {
  118|  30.5M|  Node* node = node_allocator_.Allocate();
  119|  30.5M|  node->node_id = node_allocator_.size() - 1;
  120|  30.5M|  return node;
  121|  30.5M|}
_ZN13sentencepiece7unigram7Lattice5ClearEv:
  123|  2.53k|void Lattice::Clear() {
  124|  2.53k|  begin_nodes_.clear();
  125|  2.53k|  end_nodes_.clear();
  126|  2.53k|  sentence_ = absl::string_view("");
  127|  2.53k|  surface_.clear();
  128|  2.53k|  node_allocator_.Free();
  129|  2.53k|}
_ZN13sentencepiece7unigram7Lattice11SetSentenceENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  131|  2.53k|void Lattice::SetSentence(absl::string_view sentence) {
  132|  2.53k|  Clear();
  133|       |
  134|  2.53k|  sentence_ = sentence;
  135|  2.53k|  surface_.reserve(sentence.size() + 1);
  136|       |
  137|  28.3M|  while (!sentence.empty()) {
  ------------------
  |  Branch (137:10): [True: 28.3M, False: 2.53k]
  ------------------
  138|  28.3M|    const int mblen = std::min<int>(string_util::OneCharLen(sentence.data()),
  139|  28.3M|                                    sentence.size());
  140|  28.3M|    surface_.push_back(sentence.data());
  141|  28.3M|    sentence.remove_prefix(mblen);
  142|  28.3M|  }
  143|  2.53k|  surface_.push_back(sentence.data());
  144|       |
  145|  2.53k|  const size_t len = size();
  146|  2.53k|  begin_nodes_.resize(len + 1);
  147|  2.53k|  end_nodes_.resize(len + 1);
  148|       |
  149|  2.53k|  constexpr size_t kReservedNodeSize = 16;
  150|  28.3M|  for (size_t i = 0; i <= len; ++i) {
  ------------------
  |  Branch (150:22): [True: 28.3M, False: 2.53k]
  ------------------
  151|  28.3M|    begin_nodes_[i].reserve(kReservedNodeSize);
  152|  28.3M|    end_nodes_[i].reserve(kReservedNodeSize);
  153|  28.3M|  }
  154|       |
  155|  2.53k|  Node* bos = NewNode();
  156|  2.53k|  bos->id = -1;
  157|  2.53k|  bos->pos = 0;
  158|  2.53k|  end_nodes_[0].push_back(bos);
  159|       |
  160|  2.53k|  Node* eos = NewNode();
  161|  2.53k|  eos->id = -1;
  162|  2.53k|  eos->pos = len;
  163|  2.53k|  begin_nodes_[len].push_back(eos);
  164|  2.53k|}
_ZN13sentencepiece7unigram7Lattice6InsertEii:
  166|  30.5M|Lattice::Node* Lattice::Insert(int pos, int length) {
  167|  30.5M|  const int len = size();
  168|  30.5M|  if (pos < 0 || length <= 0 || pos + length > len) {
  ------------------
  |  Branch (168:7): [True: 0, False: 30.5M]
  |  Branch (168:18): [True: 0, False: 30.5M]
  |  Branch (168:33): [True: 0, False: 30.5M]
  ------------------
  169|      0|    LOG(ERROR) << "Invalid node position or length: pos=" << pos
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      0|               << " length=" << length << " size=" << len;
  171|      0|    return nullptr;
  172|      0|  }
  173|  30.5M|  Node* node = NewNode();
  174|  30.5M|  node->pos = pos;
  175|  30.5M|  node->length = length;
  176|  30.5M|  const int utf8_length =
  177|  30.5M|      static_cast<int>(surface(pos + length) - surface(pos));
  178|  30.5M|  node->piece = absl::string_view(surface(pos), utf8_length);
  179|  30.5M|  begin_nodes_[pos].push_back(node);
  180|  30.5M|  end_nodes_[pos + node->length].push_back(node);
  181|       |
  182|  30.5M|  return node;
  183|  30.5M|}
_ZN13sentencepiece7unigram7Lattice7ViterbiEv:
  185|  2.69k|Lattice::LatticePathWithScore Lattice::Viterbi() {
  186|  2.69k|  const size_t len = size();
  187|  2.69k|  if (len == 0) return {};
  ------------------
  |  Branch (187:7): [True: 0, False: 2.69k]
  ------------------
  188|       |
  189|  43.7M|  for (size_t pos = 0; pos <= len; ++pos) {
  ------------------
  |  Branch (189:24): [True: 43.7M, False: 2.69k]
  ------------------
  190|  47.6M|    for (Node* rnode : begin_nodes_[pos]) {
  ------------------
  |  Branch (190:22): [True: 47.6M, False: 43.7M]
  ------------------
  191|  47.6M|      rnode->prev = nullptr;
  192|  47.6M|      float best_score = 0.0;
  193|  47.6M|      Node* best_node = nullptr;
  194|  56.5M|      for (Node* lnode : end_nodes_[pos]) {
  ------------------
  |  Branch (194:24): [True: 56.5M, False: 47.6M]
  ------------------
  195|  56.5M|        const float score = lnode->backtrace_score + rnode->score;
  196|  56.5M|        if (best_node == nullptr || score > best_score) {
  ------------------
  |  Branch (196:13): [True: 47.6M, False: 8.88M]
  |  Branch (196:37): [True: 1.88M, False: 7.00M]
  ------------------
  197|  49.5M|          best_node = lnode;
  198|  49.5M|          best_score = score;
  199|  49.5M|        }
  200|  56.5M|      }
  201|  47.6M|      if (best_node == nullptr) {
  ------------------
  |  Branch (201:11): [True: 0, False: 47.6M]
  ------------------
  202|      0|        LOG(ERROR) << "Failed to find the best path in Viterbi.";
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|      0|        return {};
  204|      0|      }
  205|  47.6M|      rnode->prev = best_node;
  206|  47.6M|      rnode->backtrace_score = best_score;
  207|  47.6M|    }
  208|  43.7M|  }
  209|       |
  210|       |  // backtrace
  211|  2.69k|  std::vector<Node*> results;
  212|  2.69k|  if (begin_nodes_[len].empty() || begin_nodes_[len][0] == nullptr) {
  ------------------
  |  Branch (212:7): [True: 0, False: 2.69k]
  |  Branch (212:36): [True: 0, False: 2.69k]
  ------------------
  213|      0|    LOG(ERROR) << "EOS node is missing in Viterbi.";
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|      0|    return {};
  215|      0|  }
  216|  2.69k|  float score = begin_nodes_[len][0]->backtrace_score;
  217|  2.69k|  for (Node* node = begin_nodes_[len][0]->prev;
  218|  43.4M|       node != nullptr && node->prev != nullptr; node = node->prev) {
  ------------------
  |  Branch (218:8): [True: 43.4M, False: 0]
  |  Branch (218:27): [True: 43.4M, False: 2.69k]
  ------------------
  219|  43.4M|    results.push_back(node);
  220|  43.4M|    if (results.size() > len) {
  ------------------
  |  Branch (220:9): [True: 0, False: 43.4M]
  ------------------
  221|      0|      LOG(ERROR) << "Detected cycle or infinite loop in Viterbi backtrace.";
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      0|      return {};
  223|      0|    }
  224|  43.4M|  }
  225|       |
  226|  2.69k|  std::reverse(results.begin(), results.end());
  227|       |
  228|  2.69k|  LatticePathWithScore retval = {results, score};
  229|       |
  230|  2.69k|  return retval;
  231|  2.69k|}
_ZN13sentencepiece7unigram7Lattice5NBestEmbf:
  350|  2.53k|                                                          float inv_theta) {
  351|  2.53k|  if (nbest_size < 1) {
  ------------------
  |  Branch (351:7): [True: 0, False: 2.53k]
  ------------------
  352|      0|    LOG(WARNING) << "nbest_size >= 1. Returns empty result.";
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|      0|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      0|    return {};
  354|      0|  }
  355|       |
  356|  2.53k|  const size_t len = size();
  357|  2.53k|  if (len == 0) return {};
  ------------------
  |  Branch (357:7): [True: 0, False: 2.53k]
  ------------------
  358|       |
  359|  2.53k|  if (nbest_size == 1 && !sample) {
  ------------------
  |  Branch (359:7): [True: 0, False: 2.53k]
  |  Branch (359:26): [True: 0, False: 0]
  ------------------
  360|      0|    return {Viterbi()};
  361|      0|  }
  362|       |
  363|  2.53k|  const int timeout_ms = sentencepiece::GetNBestTimeout();
  364|  2.53k|  const absl::Time start_time = absl::Now();
  365|       |
  366|       |  // Uses A* search to enumerate N-bests.
  367|       |  // Given a lattice, enumerates hypotheses (paths) from EOS.
  368|       |  // At each partial path x, compute f(x) as follows
  369|       |  //   f(x) = g(x) + h(x).
  370|       |  // g(x): the sum of scores from  EOS to the left-most node in x.
  371|       |  //       for a complete hypothesis, g(hyp) is the score of the hypothesis.
  372|       |  // h(x): a heuristic that estimates the largest score from x to BOS.
  373|       |  // f(x): the priority to pop a new hypothesis from the priority queue.
  374|       |  //
  375|       |  // As left-to-right Viterbi search can tell the *exact* value of h(x),
  376|       |  // we can obtain the exact n-best results with A*.
  377|       |
  378|  2.53k|  class HypothesisComparator {
  379|  2.53k|   public:
  380|  2.53k|    const bool operator()(Hypothesis* h1, Hypothesis* h2) {
  381|  2.53k|      return (h1->fx < h2->fx);
  382|  2.53k|    }
  383|  2.53k|  };
  384|       |
  385|  2.53k|  using Agenda = std::priority_queue<Hypothesis*, std::vector<Hypothesis*>,
  386|  2.53k|                                     HypothesisComparator>;
  387|  2.53k|  constexpr size_t kPreallocatedHypothesisSize = 512;
  388|  2.53k|  model::FreeList<Hypothesis> hypothesis_allocator(kPreallocatedHypothesisSize);
  389|       |
  390|  2.53k|  Agenda agenda;
  391|  2.53k|  std::vector<Lattice::LatticePathWithScore> results;
  392|       |
  393|  2.53k|  auto* eos = hypothesis_allocator.Allocate();
  394|  2.53k|  eos->node = eos_node();
  395|  2.53k|  eos->next = nullptr;
  396|  2.53k|  eos->gx = 0.0;
  397|       |
  398|  2.53k|  std::vector<float> alpha;
  399|       |
  400|  2.53k|  if (sample) {
  ------------------
  |  Branch (400:7): [True: 0, False: 2.53k]
  ------------------
  401|       |    // Run forwards algorithm to get normalising constants
  402|      0|    alpha = ForwardAlgorithm(inv_theta);
  403|       |    // f(eos) = Gumbel(0), as it is the perturbed score of the entire lattice.
  404|      0|    eos->fx = Gumbel();
  405|  2.53k|  } else {
  406|       |    // Run Viterbi first to fill backtrace score.
  407|  2.53k|    Viterbi();
  408|  2.53k|    eos->fx = eos->node->backtrace_score;
  409|  2.53k|  }
  410|  2.53k|  agenda.push(eos);
  411|       |
  412|  2.53k|  constexpr size_t kMaxAgendaSize = 10000;
  413|  2.53k|  constexpr size_t kMinAgendaSize = 512;
  414|  2.53k|  constexpr size_t kMaxHypothesisSize = 100000;
  415|  2.53k|  constexpr size_t kMaxAllocatorSize = 500000;
  416|  2.53k|  constexpr int kMaxShrinkCount = 10;
  417|  2.53k|  const size_t min_agenda_size =
  418|  2.53k|      std::min<size_t>(kMinAgendaSize, nbest_size * 10);
  419|  2.53k|  size_t max_hypothesis_size = kMaxHypothesisSize;
  420|  2.53k|  size_t total_hypotheses = 1;  // Includes EOS hypothesis.
  421|  2.53k|  int shrink_count = 0;         // Number of times agenda has shrunk.
  422|  2.53k|  size_t step_count = 0;
  423|  93.8M|  while (!agenda.empty()) {
  ------------------
  |  Branch (423:10): [True: 93.8M, False: 1.25k]
  ------------------
  424|  93.8M|    if (timeout_ms > 0 && (++step_count & 0xFFF) == 0) {
  ------------------
  |  Branch (424:9): [True: 93.8M, False: 0]
  |  Branch (424:27): [True: 22.4k, False: 93.8M]
  ------------------
  425|  22.4k|      const auto elapsed = absl::ToInt64Milliseconds(absl::Now() - start_time);
  426|  22.4k|      if (elapsed >= timeout_ms) {
  ------------------
  |  Branch (426:11): [True: 0, False: 22.4k]
  ------------------
  427|      0|        LOG(WARNING) << "NBest search timed out after " << elapsed << " ms. "
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|      0|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|      0|                     << "Falling back to Viterbi best path.";
  429|      0|        return {Viterbi()};
  430|      0|      }
  431|  22.4k|    }
  432|       |
  433|  93.8M|    auto* top = agenda.top();
  434|  93.8M|    agenda.pop();
  435|  93.8M|    auto* node = top->node;
  436|       |
  437|       |    // Reaches to BOS
  438|  93.8M|    if (node == bos_node()) {
  ------------------
  |  Branch (438:9): [True: 3.50k, False: 93.8M]
  ------------------
  439|  3.50k|      results.resize(results.size() + 1);
  440|  19.8M|      for (auto* n = top->next; n != nullptr && n->next != nullptr;
  ------------------
  |  Branch (440:33): [True: 19.8M, False: 0]
  |  Branch (440:49): [True: 19.8M, False: 3.50k]
  ------------------
  441|  19.8M|           n = n->next) {
  442|  19.8M|        results.back().first.push_back(n->node);
  443|  19.8M|        if (results.back().first.size() > len) {
  ------------------
  |  Branch (443:13): [True: 0, False: 19.8M]
  ------------------
  444|      0|          LOG(ERROR) << "Detected cycle in NBest path.";
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      0|  ::absl::log_internal::LogMessage( \
  |  |  |  |  |  |   64|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|      0|          break;
  446|      0|        }
  447|  19.8M|      }
  448|  3.50k|      results.back().second = top->fx;
  449|  3.50k|      if (results.size() == nbest_size) {
  ------------------
  |  Branch (449:11): [True: 1.12k, False: 2.38k]
  ------------------
  450|  1.12k|        break;
  451|  1.12k|      }
  452|  2.38k|      continue;
  453|  3.50k|    }
  454|       |
  455|  93.8M|    const size_t end_nodes_size = end_nodes(node->pos).size();
  456|  93.8M|    std::vector<float> probs;
  457|  93.8M|    std::vector<double> adjusted_probs;
  458|  93.8M|    if (sample) {
  ------------------
  |  Branch (458:9): [True: 0, False: 93.8M]
  ------------------
  459|      0|      probs.resize(end_nodes_size, 0.0);
  460|      0|      std::vector<float> perturbed_probs(end_nodes_size, 0.0);
  461|      0|      adjusted_probs.resize(end_nodes_size, 0.0);
  462|      0|      const float Z = alpha[node->node_id];
  463|      0|      float max_score = -1e8;
  464|       |      // Calculate the marginal and perturbed scores for stochastic search
  465|      0|      for (size_t i = 0; i < end_nodes_size; i++) {
  ------------------
  |  Branch (465:26): [True: 0, False: 0]
  ------------------
  466|      0|        Node* lnode = end_nodes(node->pos)[i];
  467|       |        // Calculate backwards transition score
  468|      0|        probs[i] =
  469|      0|            top->gx + alpha[lnode->node_id] + (inv_theta * lnode->score) - Z;
  470|      0|        perturbed_probs[i] = probs[i] + Gumbel();
  471|      0|        if (perturbed_probs[i] > max_score) {
  ------------------
  |  Branch (471:13): [True: 0, False: 0]
  ------------------
  472|      0|          max_score = perturbed_probs[i];
  473|      0|        }
  474|      0|      }
  475|       |      // Now constrain the sampled continuations to match the score of parent
  476|      0|      for (size_t i = 0; i < adjusted_probs.size(); i++) {
  ------------------
  |  Branch (476:26): [True: 0, False: 0]
  ------------------
  477|       |        // Use numerically stable version of truncated Gumbel:
  478|       |        // https://arxiv.org/pdf/1903.06059.pdf appendix B.3
  479|      0|        const float v = top->fx - perturbed_probs[i] +
  480|      0|                        std::log1p(-std::exp(perturbed_probs[i] - max_score));
  481|      0|        adjusted_probs[i] = top->fx - std::max(static_cast<float>(0.0), v) -
  482|      0|                            std::log1p(std::exp(-std::abs(v)));
  483|      0|      }
  484|      0|    }
  485|       |
  486|       |    // Expands new node ending at node->pos
  487|   211M|    for (size_t i = 0; i < end_nodes_size; i++) {
  ------------------
  |  Branch (487:24): [True: 117M, False: 93.8M]
  ------------------
  488|   117M|      Node* lnode = end_nodes(node->pos)[i];
  489|   117M|      auto* hyp = hypothesis_allocator.Allocate();
  490|   117M|      hyp->node = lnode;
  491|   117M|      if (sample) {
  ------------------
  |  Branch (491:11): [True: 0, False: 117M]
  ------------------
  492|      0|        hyp->gx = probs[i];
  493|      0|        hyp->fx = adjusted_probs[i];
  494|   117M|      } else {
  495|   117M|        hyp->gx = lnode->score + top->gx;  // just adds node->score
  496|   117M|        hyp->fx =
  497|   117M|            lnode->backtrace_score + top->gx;  // backtrace_score is h(node).
  498|   117M|      }
  499|   117M|      hyp->next = top;
  500|   117M|      agenda.push(hyp);
  501|   117M|    }
  502|       |
  503|  93.8M|    total_hypotheses += end_nodes_size;
  504|  93.8M|    if (total_hypotheses >= kMaxAllocatorSize ||
  ------------------
  |  Branch (504:9): [True: 64, False: 93.8M]
  ------------------
  505|  93.8M|        hypothesis_allocator.size() >= kMaxAllocatorSize) {
  ------------------
  |  Branch (505:9): [True: 0, False: 93.8M]
  ------------------
  506|    192|      LOG(WARNING) << "Allocator size exceeds " << kMaxAllocatorSize
  ------------------
  |  |  218|     64|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|     64|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|     64|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    128|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    128|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 64, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     64|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 64]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     64|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 64]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|     64|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|    384|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|    384|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|    192|                   << " with an example of length " << this->size()
  508|    192|                   << ". Falling back to Viterbi best path.";
  509|     64|      return {Viterbi()};
  510|     64|    }
  511|       |
  512|       |    // When the input is too long or contains duplicated phrases,
  513|       |    // `agenda` or `hypothesis_allocator` will get extremely big. Here we avoid
  514|       |    // this case by dynamically shrinking the agenda.
  515|  93.8M|    if (agenda.size() >= kMaxAgendaSize ||
  ------------------
  |  Branch (515:9): [True: 2.26k, False: 93.8M]
  ------------------
  516|  93.8M|        (agenda.size() > min_agenda_size &&
  ------------------
  |  Branch (516:10): [True: 63.1M, False: 30.6M]
  ------------------
  517|  63.1M|         hypothesis_allocator.size() >= max_hypothesis_size)) {
  ------------------
  |  Branch (517:10): [True: 346, False: 63.1M]
  ------------------
  518|  2.61k|      if (timeout_ms > 0) {
  ------------------
  |  Branch (518:11): [True: 2.61k, False: 0]
  ------------------
  519|  2.61k|        const auto elapsed =
  520|  2.61k|            absl::ToInt64Milliseconds(absl::Now() - start_time);
  521|  2.61k|        if (elapsed >= timeout_ms) {
  ------------------
  |  Branch (521:13): [True: 0, False: 2.61k]
  ------------------
  522|      0|          LOG(WARNING) << "NBest search timed out after " << elapsed << " ms. "
  ------------------
  |  |  218|      0|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|      0|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|      0|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|      0|                       << "Falling back to Viterbi best path.";
  524|      0|          return {Viterbi()};
  525|      0|        }
  526|  2.61k|      }
  527|  2.61k|      if (shrink_count >= kMaxShrinkCount) {
  ------------------
  |  Branch (527:11): [True: 94, False: 2.51k]
  ------------------
  528|    282|        LOG(WARNING) << "NBest search exceeded max shrink count "
  ------------------
  |  |  218|     94|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|     94|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|     94|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    188|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    188|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 94, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     94|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 94]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 94]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|     94|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|    376|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|    376|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|    282|                     << kMaxShrinkCount
  530|    282|                     << ". Falling back to Viterbi best path.";
  531|     94|        return {Viterbi()};
  532|     94|      }
  533|       |      // Keeps the top `min_agenda_size` hypotheses.
  534|  2.51k|      Agenda new_agenda;
  535|       |      // Keeps the top hypothesis and the ones on their "next" paths.
  536|  2.51k|      model::FreeList<Hypothesis> new_allocator(kPreallocatedHypothesisSize);
  537|       |      // Map between old Hypothesis* and new Hypothesis*.
  538|  2.51k|      absl::flat_hash_map<const Hypothesis*, Hypothesis*> clone_map;
  539|       |
  540|  2.51k|      const size_t size = std::min<size_t>(agenda.size(), min_agenda_size);
  541|  2.51k|      shrink_count++;
  542|  7.55k|      LOG(WARNING) << "Too big agenda size " << agenda.size()
  ------------------
  |  |  218|  2.51k|#define LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   27|  2.51k|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  2.51k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|  5.03k|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|  5.03k|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.51k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|  2.51k|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.51k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  2.51k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 2.51k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   28|  2.51k|      ABSL_LOG_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  25.1k|  ::absl::log_internal::LogMessage(   \
  |  |  |  |  |  |   61|  25.1k|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  7.55k|                   << " (allocator size " << hypothesis_allocator.size()
  544|  7.55k|                   << "). Shrinking (round " << shrink_count << ") down to "
  545|  7.55k|                   << size << ".";
  546|  52.8k|      for (size_t i = 0; i < size; ++i) {
  ------------------
  |  Branch (546:26): [True: 50.3k, False: 2.51k]
  ------------------
  547|  50.3k|        const Hypothesis* top_hyp = agenda.top();
  548|  50.3k|        Hypothesis* cloned_hyp =
  549|  50.3k|            CloneHypAndDependents(top_hyp, &clone_map, &new_allocator);
  550|  50.3k|        new_agenda.push(cloned_hyp);
  551|  50.3k|        agenda.pop();
  552|  50.3k|      }
  553|  2.51k|      agenda = std::move(new_agenda);
  554|  2.51k|      hypothesis_allocator = std::move(new_allocator);
  555|  2.51k|      max_hypothesis_size = hypothesis_allocator.size() + kMaxHypothesisSize;
  556|  2.51k|    }
  557|  93.8M|  }
  558|       |
  559|  2.37k|  return results;
  560|  2.53k|}
_ZNK13sentencepiece7unigram5Model13PopulateNodesEPNS0_7LatticeE:
  599|  2.53k|void Model::PopulateNodes(Lattice* lattice) const {
  600|  2.53k|  auto get_chars_length = [&lattice](int begin_pos, const char* end) {
  601|  2.53k|    int pos = begin_pos;
  602|  2.53k|    while (lattice->surface(pos) < end) ++pos;
  603|  2.53k|    return pos - begin_pos;
  604|  2.53k|  };
  605|       |
  606|  2.53k|  const float unk_score = min_score() - kUnkPenalty;
  607|       |
  608|  2.53k|  const size_t len = lattice->size();
  609|  2.53k|  const char* end = lattice->sentence() + lattice->utf8_size();
  610|       |
  611|       |  // +1 just in case.
  612|  2.53k|  std::vector<Darts::DoubleArray::result_pair_type> trie_results(
  613|  2.53k|      trie_results_size_ + 1);
  614|       |
  615|  28.3M|  for (size_t begin_pos = 0; begin_pos < len; ++begin_pos) {
  ------------------
  |  Branch (615:30): [True: 28.3M, False: 2.53k]
  ------------------
  616|  28.3M|    const char* begin = lattice->surface(begin_pos);
  617|       |
  618|       |    // Finds all pieces which are prefix of surface(begin_pos).
  619|  28.3M|    size_t num_nodes = trie_->commonPrefixSearch(begin, trie_results.data(),
  620|  28.3M|                                                 trie_results.size(),
  621|  28.3M|                                                 static_cast<int>(end - begin));
  622|  28.3M|    if (num_nodes > trie_results.size()) {
  ------------------
  |  Branch (622:9): [True: 0, False: 28.3M]
  ------------------
  623|      0|      trie_results.resize(num_nodes + 1);
  624|      0|      num_nodes = trie_->commonPrefixSearch(begin, trie_results.data(),
  625|      0|                                            trie_results.size(),
  626|      0|                                            static_cast<int>(end - begin));
  627|      0|    }
  628|       |
  629|  28.3M|    bool has_single_node = false;
  630|       |
  631|       |    // Inserts pieces to the lattice.
  632|  34.3M|    for (size_t k = 0; k < num_nodes; ++k) {
  ------------------
  |  Branch (632:24): [True: 5.95M, False: 28.3M]
  ------------------
  633|  5.95M|      const int length =
  634|  5.95M|          get_chars_length(begin_pos, begin + trie_results[k].length);
  635|  5.95M|      const int id = trie_results[k].value;
  636|  5.95M|      if (IsUnusedInlined(id)) continue;
  ------------------
  |  Branch (636:11): [True: 2.10k, False: 5.95M]
  ------------------
  637|  5.95M|      if (length <= 0) continue;
  ------------------
  |  Branch (637:11): [True: 0, False: 5.95M]
  ------------------
  638|  5.95M|      Lattice::Node* node = lattice->Insert(begin_pos, length);
  639|  5.95M|      if (!node) continue;
  ------------------
  |  Branch (639:11): [True: 0, False: 5.95M]
  ------------------
  640|  5.95M|      node->id = id;  // the value of Trie stores vocab_id.
  641|       |      // User defined symbol receives extra bonus to always be selected.
  642|  5.95M|      node->score = IsUserDefinedInlined(id) ? GetUserDefinedScore(length)
  ------------------
  |  Branch (642:21): [True: 220k, False: 5.73M]
  ------------------
  643|  5.95M|                                             : GetScoreInlined(id);
  644|  5.95M|      if (!has_single_node && node->length == 1) {
  ------------------
  |  Branch (644:11): [True: 3.91M, False: 2.04M]
  |  Branch (644:31): [True: 3.74M, False: 167k]
  ------------------
  645|  3.74M|        has_single_node = true;
  646|  3.74M|      }
  647|  5.95M|    }
  648|       |
  649|  28.3M|    if (!has_single_node) {
  ------------------
  |  Branch (649:9): [True: 24.6M, False: 3.74M]
  ------------------
  650|  24.6M|      Lattice::Node* node = lattice->Insert(begin_pos, 1);
  651|  24.6M|      if (node) {
  ------------------
  |  Branch (651:11): [True: 24.6M, False: 0]
  ------------------
  652|  24.6M|        node->id = unk_id_;  // add UNK node.
  653|  24.6M|        node->score = unk_score;
  654|  24.6M|      }
  655|  24.6M|    }
  656|  28.3M|  }
  657|  2.53k|}
_ZNK13sentencepiece7unigram5Model9PieceToIdENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  659|  83.9M|int Model::PieceToId(absl::string_view piece) const {
  660|  83.9M|  auto it = reserved_id_map_.find(piece);
  661|  83.9M|  if (it != reserved_id_map_.end()) {
  ------------------
  |  Branch (661:7): [True: 80.1M, False: 3.77M]
  ------------------
  662|  80.1M|    return it->second;
  663|  80.1M|  }
  664|       |  // An empty piece has no id and must resolve to <unk>. exactMatchSearch()
  665|       |  // treats length 0 as "key is a zero-terminated C string" and scans
  666|       |  // piece.data() forward until a NUL, so forwarding piece.size() == 0 reads
  667|       |  // past the (empty) view: for a view over non-terminated bytes it runs off
  668|       |  // the buffer, and for a zero-length view over live data it spuriously
  669|       |  // matches a following key.
  670|  3.77M|  if (piece.empty()) return unk_id_;
  ------------------
  |  Branch (670:7): [True: 882, False: 3.77M]
  ------------------
  671|  3.77M|  int id = 0;
  672|  3.77M|  trie_->exactMatchSearch(piece.data(), id, piece.size());
  673|  3.77M|  return id == -1 ? unk_id_ : id;
  ------------------
  |  Branch (673:10): [True: 236k, False: 3.53M]
  ------------------
  674|  3.77M|}
_ZN13sentencepiece7unigram5Model9BuildTrieEPNSt3__16vectorINS2_4pairINS2_17basic_string_viewIcNS2_11char_traitsIcEEEEiEENS2_9allocatorIS9_EEEE:
  676|  4.13k|void Model::BuildTrie(std::vector<std::pair<absl::string_view, int>>* pieces) {
  677|  4.13k|  if (!status().ok()) return;
  ------------------
  |  Branch (677:7): [True: 682, False: 3.44k]
  ------------------
  678|       |
  679|  3.44k|  if (pieces->empty()) {
  ------------------
  |  Branch (679:7): [True: 11, False: 3.43k]
  ------------------
  680|     11|    status_ = absl::InternalError("no pieces are loaded.");
  681|     11|    return;
  682|     11|  }
  683|       |
  684|       |  // sort by sentencepiece since DoubleArray::build()
  685|       |  // only accepts sorted strings.
  686|  3.43k|  sort(pieces->begin(), pieces->end());
  687|       |
  688|       |  // Makes key/value/length set for DoubleArrayTrie.
  689|  3.43k|  std::vector<const char*> key(pieces->size());
  690|  3.43k|  std::vector<size_t> length(pieces->size());
  691|  3.43k|  std::vector<int> value(pieces->size());
  692|  31.5k|  for (size_t i = 0; i < pieces->size(); ++i) {
  ------------------
  |  Branch (692:22): [True: 28.1k, False: 3.43k]
  ------------------
  693|  28.1k|    key[i] = (*pieces)[i].first.data();  // sorted piece.
  694|  28.1k|    length[i] = (*pieces)[i].first.size();
  695|  28.1k|    value[i] = (*pieces)[i].second;  // vocab_id
  696|  28.1k|  }
  697|       |
  698|  3.43k|  trie_ = std::make_unique<Darts::DoubleArray>();
  699|  3.43k|  if (trie_->build(key.size(), const_cast<char**>(&key[0]),
  ------------------
  |  Branch (699:7): [True: 0, False: 3.43k]
  ------------------
  700|  3.43k|                   const_cast<size_t*>(&length[0]), &value[0]) != 0) {
  701|      0|    status_ = absl::InternalError("cannot build double-array.");
  702|      0|    return;
  703|      0|  }
  704|       |
  705|       |  // Computes the maximum number of shared prefixes in the trie.
  706|  3.43k|  const int kMaxTrieResultsSize = 1024;
  707|  3.43k|  std::vector<Darts::DoubleArray::result_pair_type> results(
  708|  3.43k|      kMaxTrieResultsSize);
  709|  3.43k|  trie_results_size_ = 0;
  710|  28.1k|  for (const auto& p : *pieces) {
  ------------------
  |  Branch (710:22): [True: 28.1k, False: 3.43k]
  ------------------
  711|  28.1k|    const int num_nodes = trie_->commonPrefixSearch(
  712|  28.1k|        p.first.data(), results.data(), results.size(), p.first.size());
  713|  28.1k|    trie_results_size_ = std::max(trie_results_size_, num_nodes);
  714|  28.1k|  }
  715|       |
  716|  3.43k|  pieces_.clear();
  717|       |
  718|  3.43k|  if (trie_results_size_ == 0)
  ------------------
  |  Branch (718:7): [True: 0, False: 3.43k]
  ------------------
  719|      0|    status_ = absl::InternalError("no entry is found in the trie.");
  720|  3.43k|}
_ZN13sentencepiece7unigram5ModelC2ERKNS_10ModelProtoE:
  722|  4.24k|Model::Model(const ModelProto& model_proto) {
  723|  4.24k|  model_proto_ = &model_proto;
  724|       |
  725|  4.24k|  InitializePieces(/* use_reserved_id_map= */ true);
  726|       |
  727|  4.24k|  min_score_ = FLT_MAX;
  728|  2.01M|  for (const auto& sp : model_proto_->pieces()) {
  ------------------
  |  Branch (728:23): [True: 2.01M, False: 4.13k]
  ------------------
  729|  2.01M|    if (std::isnan(sp.score()) || std::isinf(sp.score())) {
  ------------------
  |  Branch (729:9): [True: 116, False: 2.01M]
  |  Branch (729:35): [True: 1, False: 2.01M]
  ------------------
  730|    117|      status_ = absl::InternalError("score is NaN or Inf.");
  731|    117|      return;
  732|    117|    }
  733|  2.01M|    if (sp.type() == ModelProto::SentencePiece::NORMAL) {
  ------------------
  |  Branch (733:9): [True: 1.93M, False: 77.5k]
  ------------------
  734|  1.93M|      min_score_ = std::min(min_score_, sp.score());
  735|  1.93M|    }
  736|  2.01M|  }
  737|       |
  738|  4.13k|  std::vector<std::pair<absl::string_view, int>> pieces;
  739|  30.3k|  for (const auto& it : pieces_) pieces.emplace_back(it.first, it.second);
  ------------------
  |  Branch (739:23): [True: 30.3k, False: 4.13k]
  ------------------
  740|       |
  741|  4.13k|  BuildTrie(&pieces);
  742|  4.13k|}
_ZN13sentencepiece7unigram5ModelD2Ev:
  744|  4.24k|Model::~Model() = default;
_ZNK13sentencepiece7unigram5Model6EncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  746|  14.5k|EncodeResult Model::Encode(absl::string_view normalized) const {
  747|  14.5k|  return EncodeOptimized(normalized);
  748|  14.5k|}
_ZNK13sentencepiece7unigram5Model11NBestEncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEi:
  751|  3.43k|                                     int nbest_size) const {
  752|  3.43k|  if (!status().ok() || normalized.empty()) {
  ------------------
  |  Branch (752:7): [True: 0, False: 3.43k]
  |  Branch (752:7): [True: 900, False: 2.53k]
  |  Branch (752:25): [True: 900, False: 2.53k]
  ------------------
  753|    900|    return {{{}, 0.0}};
  754|    900|  }
  755|       |
  756|  2.53k|  nbest_size = std::max<int>(1, std::min<int>(nbest_size, 1024));
  757|       |
  758|  2.53k|  if (nbest_size <= 1) {
  ------------------
  |  Branch (758:7): [True: 0, False: 2.53k]
  ------------------
  759|      0|    return {std::pair<EncodeResult, float>(Encode(normalized), 0.0)};
  760|      0|  }
  761|       |
  762|  2.53k|  Lattice lattice;
  763|  2.53k|  lattice.SetSentence(normalized);
  764|  2.53k|  PopulateNodes(&lattice);
  765|       |
  766|  2.53k|  NBestEncodeResult nbest_results;
  767|  3.65k|  for (const auto& nbest : lattice.NBest(nbest_size, false, 0.0)) {
  ------------------
  |  Branch (767:26): [True: 3.65k, False: 2.53k]
  ------------------
  768|  3.65k|    EncodeResult results;
  769|  35.0M|    for (const auto* node : nbest.first) {
  ------------------
  |  Branch (769:27): [True: 35.0M, False: 3.65k]
  ------------------
  770|  35.0M|      results.emplace_back(node->piece, node->id);
  771|  35.0M|    }
  772|  3.65k|    nbest_results.emplace_back(results, nbest.second);
  773|  3.65k|  }
  774|       |
  775|  2.53k|  return nbest_results;
  776|  2.53k|}
_ZNK13sentencepiece7unigram5Model15EncodeOptimizedENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  796|  14.5k|EncodeResult Model::EncodeOptimized(absl::string_view normalized) const {
  797|       |  // An optimized Viterbi algorithm for unigram language models. Benchmarking
  798|       |  // results show that it generates almost identical outputs and achieves 2.1x
  799|       |  // speedup on average for 102 languages compared to the original
  800|       |  // implementation. It's based on the following three ideas:
  801|       |  //
  802|       |  // 1. Because it uses the *unigram* model:
  803|       |  //     best_score(x1, x2, …, xt) = best_score(x1, x2, …, x{t-1}) + score(xt)
  804|       |  // Deciding the best path (and score) can be decoupled into two isolated
  805|       |  // terms: (a) the best path ended before the last token `best_score(x1, x2, …,
  806|       |  // x{t-1})`, and (b) the last token and its `score(xt)`. The two terms are
  807|       |  // not related to each other at all.
  808|       |  //
  809|       |  // Therefore, we can compute once and store the *best_path ending at
  810|       |  // each character position*. In this way, when we know best_path_ends_at[M],
  811|       |  // we can reuse it to compute all the best_path_ends_at_[...] where the last
  812|       |  // token starts at the same character position M.
  813|       |  //
  814|       |  // This improves the time complexity from O(n*k*k) to O(n*k) because it
  815|       |  // eliminates the extra loop of recomputing the best path ending at the same
  816|       |  // position, where n is the input length and k is the maximum number of tokens
  817|       |  // that can be recognized starting at each position.
  818|       |  //
  819|       |  // 2. Again, because it uses the *unigram* model, we don’t need to actually
  820|       |  // store the lattice nodes. We still recognize all the tokens and lattice
  821|       |  // nodes from the input, but along identifying them, we use and discard them
  822|       |  // on the fly. There is no need to actually store them for best path Viterbi
  823|       |  // decoding. The only thing we need to store is the best_path ending at
  824|       |  // each character position.
  825|       |  //
  826|       |  // This improvement reduces the things needed to store in memory from O(n*k)
  827|       |  // to O(n), where n is the input length and k is the maximum number of tokens
  828|       |  // that can be recognized starting at each position.
  829|       |  //
  830|       |  // It also avoids the need of dynamic-size lattice node pool, because the
  831|       |  // number of things to store is fixed as n.
  832|       |  //
  833|       |  // 3. SentencePiece is designed to work with unicode, taking utf-8 encoding
  834|       |  // inputs. In the original implementation, the lattice positions are based on
  835|       |  // unicode positions. A mapping from unicode position to the utf-8 position is
  836|       |  // maintained to recover the utf-8 string piece.
  837|       |  //
  838|       |  // We found that it is sufficient and beneficial to directly work with utf-8
  839|       |  // positions:
  840|       |  //
  841|       |  // Firstly, it saves the conversion and mapping between unicode positions and
  842|       |  // utf-8 positions.
  843|       |  //
  844|       |  // Secondly, it reduces the number of fields we need to maintain in the
  845|       |  // node/path structure. Specifically, there are 8 fields defined in
  846|       |  // `Lattice::Node` used by the original encoder, but here in the optimized
  847|       |  // encoder we only need to define 3 fields in `BestPathNode`.
  848|       |
  849|  14.5k|  if (!status().ok() || normalized.empty()) {
  ------------------
  |  Branch (849:7): [True: 0, False: 14.5k]
  |  Branch (849:7): [True: 1.85k, False: 12.6k]
  |  Branch (849:25): [True: 1.85k, False: 12.6k]
  ------------------
  850|  1.85k|    return {};
  851|  1.85k|  }
  852|       |  // Represents the last node of the best path.
  853|  12.6k|  struct BestPathNode {
  854|  12.6k|    int id = -1;  // The vocab id. (maybe -1 for UNK)
  855|  12.6k|    float best_path_score =
  856|  12.6k|        0;  // The total score of the best path ending at this node.
  857|  12.6k|    int starts_at =
  858|  12.6k|        -1;  // The starting position (in utf-8) of this node. The entire best
  859|       |             // path can be constructed by backtracking along this link.
  860|  12.6k|  };
  861|  12.6k|  const size_t size = normalized.size();
  862|  12.6k|  const float unk_score = min_score() - kUnkPenalty;
  863|       |  // The ends are exclusive.
  864|  12.6k|  std::vector<BestPathNode> best_path_ends_at(size + 1);
  865|       |  // Generate lattice on-the-fly (not stored) and update best_path_ends_at.
  866|  12.6k|  size_t starts_at = 0;
  867|  12.6k|  const float kScoreResetThreshold = 100000.0f;
  868|  12.6k|  size_t max_frontier = 0;
  869|   141M|  while (starts_at < size) {
  ------------------
  |  Branch (869:10): [True: 141M, False: 12.6k]
  ------------------
  870|   141M|    std::size_t node_pos = 0;
  871|   141M|    std::size_t key_pos = starts_at;
  872|   141M|    float best_path_score_till_here =
  873|   141M|        best_path_ends_at[starts_at].best_path_score;
  874|   141M|    if (best_path_score_till_here < -kScoreResetThreshold ||
  ------------------
  |  Branch (874:9): [True: 18.4M, False: 123M]
  ------------------
  875|   123M|        best_path_score_till_here > kScoreResetThreshold) {
  ------------------
  |  Branch (875:9): [True: 28.8M, False: 94.5M]
  ------------------
  876|  47.3M|      const float offset = best_path_score_till_here;
  877|  97.9M|      for (size_t i = starts_at; i <= max_frontier; ++i) {
  ------------------
  |  Branch (877:34): [True: 50.6M, False: 47.3M]
  ------------------
  878|  50.6M|        if (i == starts_at || best_path_ends_at[i].starts_at != -1) {
  ------------------
  |  Branch (878:13): [True: 47.3M, False: 3.33M]
  |  Branch (878:31): [True: 1.93M, False: 1.39M]
  ------------------
  879|  49.2M|          best_path_ends_at[i].best_path_score -= offset;
  880|  49.2M|        }
  881|  50.6M|      }
  882|  47.3M|      best_path_score_till_here = 0.0f;
  883|  47.3M|    }
  884|   141M|    bool has_single_node = false;
  885|   141M|    const int mblen =
  886|   141M|        std::min<int>(string_util::OneCharLen(normalized.data() + starts_at),
  887|   141M|                      size - starts_at);
  888|   195M|    while (key_pos < size) {
  ------------------
  |  Branch (888:12): [True: 195M, False: 5.97k]
  ------------------
  889|   195M|      const int ret =
  890|   195M|          trie_->traverse(normalized.data(), node_pos, key_pos, key_pos + 1);
  891|   195M|      if (ret == -2) break;
  ------------------
  |  Branch (891:11): [True: 141M, False: 53.5M]
  ------------------
  892|  53.5M|      if (ret >= 0 && ret < GetPieceSize()) {
  ------------------
  |  Branch (892:11): [True: 29.7M, False: 23.7M]
  |  Branch (892:23): [True: 29.7M, False: 0]
  ------------------
  893|  29.7M|        if (IsUnusedInlined(ret)) continue;
  ------------------
  |  Branch (893:13): [True: 10.5k, False: 29.7M]
  ------------------
  894|  29.7M|        max_frontier = std::max(max_frontier, key_pos);
  895|       |        // Update the best path node.
  896|  29.7M|        auto& target_node = best_path_ends_at[key_pos];
  897|  29.7M|        const auto length = (key_pos - starts_at);
  898|       |        // User defined symbol receives extra bonus to always be selected.
  899|  29.7M|        const auto score = IsUserDefinedInlined(ret)
  ------------------
  |  Branch (899:28): [True: 1.10M, False: 28.6M]
  ------------------
  900|  29.7M|                               ? GetUserDefinedScore(length)
  901|  29.7M|                               : GetScoreInlined(ret);
  902|  29.7M|        const auto candidate_best_path_score =
  903|  29.7M|            score + best_path_score_till_here;
  904|  29.7M|        if (target_node.starts_at == -1 ||
  ------------------
  |  Branch (904:13): [True: 29.2M, False: 553k]
  ------------------
  905|  29.7M|            candidate_best_path_score > target_node.best_path_score) {
  ------------------
  |  Branch (905:13): [True: 540k, False: 12.9k]
  ------------------
  906|  29.7M|          target_node.best_path_score = candidate_best_path_score;
  907|  29.7M|          target_node.starts_at = starts_at;
  908|  29.7M|          target_node.id = ret;
  909|  29.7M|        }
  910|  29.7M|        if (!has_single_node && length == static_cast<size_t>(mblen)) {
  ------------------
  |  Branch (910:13): [True: 29.2M, False: 555k]
  |  Branch (910:33): [True: 18.0M, False: 11.1M]
  ------------------
  911|  18.0M|          has_single_node = true;
  912|  18.0M|        }
  913|  29.7M|      }
  914|  53.5M|    }
  915|   141M|    if (!has_single_node) {
  ------------------
  |  Branch (915:9): [True: 123M, False: 18.0M]
  ------------------
  916|   123M|      max_frontier =
  917|   123M|          std::max(max_frontier, starts_at + static_cast<size_t>(mblen));
  918|   123M|      auto& target_node = best_path_ends_at[starts_at + mblen];
  919|   123M|      const auto candidate_best_path_score =
  920|   123M|          unk_score + best_path_score_till_here;
  921|   123M|      if (target_node.starts_at == -1 ||
  ------------------
  |  Branch (921:11): [True: 122M, False: 840k]
  ------------------
  922|   123M|          candidate_best_path_score > target_node.best_path_score) {
  ------------------
  |  Branch (922:11): [True: 588k, False: 252k]
  ------------------
  923|   123M|        target_node.best_path_score = candidate_best_path_score;
  924|   123M|        target_node.starts_at = starts_at;
  925|   123M|        target_node.id = unk_id_;
  926|   123M|      }
  927|   123M|    }
  928|       |    // Move by one unicode character.
  929|   141M|    starts_at += mblen;
  930|   141M|  }
  931|       |  // Backtrack to identify the best path.
  932|  12.6k|  EncodeResult results;
  933|  12.6k|  results.reserve(size / 4 + 1);
  934|  12.6k|  int ends_at = size;
  935|   141M|  while (ends_at > 0) {
  ------------------
  |  Branch (935:10): [True: 141M, False: 12.6k]
  ------------------
  936|   141M|    const auto& node = best_path_ends_at[ends_at];
  937|   141M|    results.emplace_back(
  938|   141M|        normalized.substr(node.starts_at, ends_at - node.starts_at), node.id);
  939|   141M|    ends_at = node.starts_at;
  940|   141M|  }
  941|  12.6k|  std::reverse(results.begin(), results.end());
  942|  12.6k|  return results;
  943|  14.5k|}
unigram_model.cc:_ZN13sentencepiece7unigram12_GLOBAL__N_121CloneHypAndDependentsEPKNS1_10HypothesisEPN4absl12lts_2026081713flat_hash_mapIS4_PS2_NS6_18container_internal6HashEqIS4_vE4HashENSB_2EqENSt3__19allocatorINSE_4pairIKS4_S8_EEEEEEPNS_5model8FreeListIS2_EE:
  319|  50.3k|    model::FreeList<Hypothesis>* allocator) {
  320|  50.3k|  Hypothesis* cloned = nullptr;
  321|  50.3k|  Hypothesis** result_callback = &cloned;
  322|       |
  323|       |  // Iteratively clone "to_clone" and its dependencies.
  324|       |  // The new pointer will be written back to *result_callback.
  325|  64.1M|  while (to_clone != nullptr) {
  ------------------
  |  Branch (325:10): [True: 64.1M, False: 2.51k]
  ------------------
  326|       |    // If "to_clone" has already been cloned before, we just look up the result.
  327|  64.1M|    auto iter = clone_map->find(to_clone);
  328|  64.1M|    if (iter != clone_map->end()) {
  ------------------
  |  Branch (328:9): [True: 47.8k, False: 64.0M]
  ------------------
  329|  47.8k|      *result_callback = iter->second;
  330|  47.8k|      break;
  331|  47.8k|    }
  332|       |
  333|       |    // Allocate a new Hypothesis and copy the values.
  334|  64.0M|    Hypothesis* new_hyp = allocator->Allocate();
  335|  64.0M|    *new_hyp = *to_clone;
  336|  64.0M|    *result_callback = new_hyp;
  337|  64.0M|    clone_map->insert({to_clone, new_hyp});
  338|       |
  339|       |    // Move on to clone "to_clone->next".
  340|  64.0M|    to_clone = to_clone->next;
  341|  64.0M|    result_callback = &(new_hyp->next);
  342|  64.0M|  }
  343|  50.3k|  return cloned;
  344|  50.3k|}
unigram_model.cc:_ZZNK13sentencepiece7unigram5Model13PopulateNodesEPNS0_7LatticeEENK3$_0clEiPKc:
  600|  5.95M|  auto get_chars_length = [&lattice](int begin_pos, const char* end) {
  601|  5.95M|    int pos = begin_pos;
  602|  12.5M|    while (lattice->surface(pos) < end) ++pos;
  ------------------
  |  Branch (602:12): [True: 6.60M, False: 5.95M]
  ------------------
  603|  5.95M|    return pos - begin_pos;
  604|  5.95M|  };
unigram_model.cc:_ZN13sentencepiece7unigram12_GLOBAL__N_119GetUserDefinedScoreEi:
   77|  1.32M|inline float GetUserDefinedScore(int length) { return 0.1 * (length - 1); }
unigram_model.cc:_ZZN13sentencepiece7unigram7Lattice5NBestEmbfEN20HypothesisComparatorclEPNS0_12_GLOBAL__N_110HypothesisES5_:
  380|  1.09G|    const bool operator()(Hypothesis* h1, Hypothesis* h2) {
  381|  1.09G|      return (h1->fx < h2->fx);
  382|  1.09G|    }

_ZNK13sentencepiece7unigram5Model22IsNBestEncodeAvailableEv:
  139|  10.2k|  bool IsNBestEncodeAvailable() const override { return true; }
_ZNK13sentencepiece7unigram5Model9min_scoreEv:
  143|  15.1k|  float min_score() const { return min_score_; }

_ZN13sentencepiece6random18GetRandomGeneratorEv:
   63|  4.05k|absl::BitGen* GetRandomGenerator() { return GetRandomGeneratorStorage().get(); }
_ZN13sentencepiece22GetRandomGeneratorSeedEv:
   74|      1|uint32_t GetRandomGeneratorSeed() { return g_seed.load(); }
_ZN13sentencepiece15GetNBestTimeoutEv:
  100|  2.53k|int GetNBestTimeout() { return g_nbest_timeout_ms.load(); }
_ZN13sentencepiece11string_util10DecodeUTF8EPKcS2_Pm:
  105|   601M|char32_t DecodeUTF8(const char* begin, const char* end, size_t* mblen) {
  106|   601M|  const size_t len = end - begin;
  107|       |
  108|   601M|  if (static_cast<unsigned char>(begin[0]) < 0x80) {
  ------------------
  |  Branch (108:7): [True: 385M, False: 215M]
  ------------------
  109|   385M|    *mblen = 1;
  110|   385M|    return static_cast<unsigned char>(begin[0]);
  111|   385M|  } else if (len >= 2 && (begin[0] & 0xE0) == 0xC0) {
  ------------------
  |  Branch (111:14): [True: 215M, False: 15.9k]
  |  Branch (111:26): [True: 23.8M, False: 192M]
  ------------------
  112|  23.8M|    const char32_t cp = (((begin[0] & 0x1F) << 6) | ((begin[1] & 0x3F)));
  113|  23.8M|    if (IsTrailByte(begin[1]) && cp >= 0x0080 && IsValidCodepoint(cp)) {
  ------------------
  |  Branch (113:9): [True: 5.15M, False: 18.6M]
  |  Branch (113:34): [True: 4.73M, False: 421k]
  |  Branch (113:50): [True: 4.73M, False: 0]
  ------------------
  114|  4.73M|      *mblen = 2;
  115|  4.73M|      return cp;
  116|  4.73M|    }
  117|   192M|  } else if (len >= 3 && (begin[0] & 0xF0) == 0xE0) {
  ------------------
  |  Branch (117:14): [True: 192M, False: 30.0k]
  |  Branch (117:26): [True: 16.0M, False: 175M]
  ------------------
  118|  16.0M|    const char32_t cp = (((begin[0] & 0x0F) << 12) | ((begin[1] & 0x3F) << 6) |
  119|  16.0M|                         ((begin[2] & 0x3F)));
  120|  16.0M|    if (IsTrailByte(begin[1]) && IsTrailByte(begin[2]) && cp >= 0x0800 &&
  ------------------
  |  Branch (120:9): [True: 9.38M, False: 6.69M]
  |  Branch (120:34): [True: 8.16M, False: 1.21M]
  |  Branch (120:59): [True: 8.14M, False: 18.0k]
  ------------------
  121|  8.14M|        IsValidCodepoint(cp)) {
  ------------------
  |  Branch (121:9): [True: 8.13M, False: 9.98k]
  ------------------
  122|  8.13M|      *mblen = 3;
  123|  8.13M|      return cp;
  124|  8.13M|    }
  125|   176M|  } else if (len >= 4 && (begin[0] & 0xf8) == 0xF0) {
  ------------------
  |  Branch (125:14): [True: 175M, False: 42.9k]
  |  Branch (125:26): [True: 4.79M, False: 171M]
  ------------------
  126|  4.79M|    const char32_t cp = (((begin[0] & 0x07) << 18) | ((begin[1] & 0x3F) << 12) |
  127|  4.79M|                         ((begin[2] & 0x3F) << 6) | ((begin[3] & 0x3F)));
  128|  4.79M|    if (IsTrailByte(begin[1]) && IsTrailByte(begin[2]) &&
  ------------------
  |  Branch (128:9): [True: 891k, False: 3.89M]
  |  Branch (128:34): [True: 318k, False: 573k]
  ------------------
  129|   318k|        IsTrailByte(begin[3]) && cp >= 0x10000 && IsValidCodepoint(cp)) {
  ------------------
  |  Branch (129:9): [True: 196k, False: 121k]
  |  Branch (129:34): [True: 178k, False: 18.7k]
  |  Branch (129:51): [True: 152k, False: 25.6k]
  ------------------
  130|   152k|      *mblen = 4;
  131|   152k|      return cp;
  132|   152k|    }
  133|  4.79M|  }
  134|       |
  135|       |  // Invalid UTF-8.
  136|   202M|  *mblen = 1;
  137|   202M|  return kUnicodeError;
  138|   601M|}
util.cc:_ZN13sentencepiece6random12_GLOBAL__N_125GetRandomGeneratorStorageEv:
   53|  4.05k|std::unique_ptr<absl::BitGen>& GetRandomGeneratorStorage() {
   54|  4.05k|  thread_local static auto mt =
   55|  4.05k|      GetRandomGeneratorSeed() == kDefaultSeed
  ------------------
  |  Branch (55:7): [True: 1, False: 4.04k]
  ------------------
   56|  4.05k|          ? std::make_unique<absl::BitGen>()
   57|  4.05k|          : std::make_unique<absl::BitGen>(
   58|  4.04k|                std::seed_seq{GetRandomGeneratorSeed()});
   59|  4.05k|  return mt;
   60|  4.05k|}

_ZN13sentencepiece11string_util17IsValidDecodeUTF8ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEPm:
  136|   601M|inline bool IsValidDecodeUTF8(absl::string_view input, size_t* mblen) {
  137|   601M|  const char32_t c = DecodeUTF8(input, mblen);
  138|   601M|  return c != kUnicodeError || *mblen == 3;
  ------------------
  |  Branch (138:10): [True: 391M, False: 209M]
  |  Branch (138:32): [True: 6.85M, False: 202M]
  ------------------
  139|   601M|}
_ZN13sentencepiece11string_util10DecodeUTF8ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEPm:
  132|   601M|inline char32_t DecodeUTF8(absl::string_view input, size_t* mblen) {
  133|   601M|  return DecodeUTF8(input.data(), input.data() + input.size(), mblen);
  134|   601M|}
_ZN13sentencepiece11string_util10OneCharLenEPKc:
   84|   978M|inline size_t OneCharLen(const char* src) {
   85|   978M|  return "\1\1\1\1\1\1\1\1\1\1\1\1\2\2\3\4"[(*src & 0xFF) >> 4];
   86|   978M|}
_ZN13sentencepiece11string_util11IsTrailByteEc:
  111|  55.2M|inline bool IsTrailByte(char x) { return static_cast<signed char>(x) < -0x40; }
_ZN13sentencepiece11string_util16IsValidCodepointEDi:
  122|  13.0M|inline bool IsValidCodepoint(char32_t c) {
  123|  13.0M|  return (static_cast<uint32_t>(c) < 0xD800) || (c >= 0xE000 && c <= 0x10FFFF);
  ------------------
  |  Branch (123:10): [True: 5.97M, False: 7.08M]
  |  Branch (123:50): [True: 7.07M, False: 9.98k]
  |  Branch (123:65): [True: 7.05M, False: 25.6k]
  ------------------
  124|  13.0M|}
_ZN13sentencepiece11string_util9DecodePODIjEEbNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPT_:
   66|     46|inline bool DecodePOD(absl::string_view str, T* result) {
   67|     46|  static_assert(std::is_trivially_copyable_v<T>,
   68|     46|                "T must be trivially copyable");
   69|     46|  if (sizeof(*result) != str.size()) {
  ------------------
  |  Branch (69:7): [True: 0, False: 46]
  ------------------
   70|      0|    return false;
   71|      0|  }
   72|     46|  std::memcpy(result, str.data(), sizeof(T));
   73|     46|  return true;
   74|     46|}

_ZN13sentencepiece4word5ModelC2ERKNS_10ModelProtoE:
   22|    935|Model::Model(const ModelProto& model_proto) {
   23|    935|  model_proto_ = &model_proto;
   24|    935|  InitializePieces(/* use_reserved_id_map= */ true);
   25|    935|}
_ZN13sentencepiece4word5ModelD2Ev:
   27|    935|Model::~Model() = default;
_ZNK13sentencepiece4word5Model6EncodeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
   29|  1.35k|EncodeResult Model::Encode(absl::string_view normalized) const {
   30|  1.35k|  if (!status().ok() || normalized.empty()) {
  ------------------
  |  Branch (30:7): [True: 0, False: 1.35k]
  |  Branch (30:7): [True: 3, False: 1.35k]
  |  Branch (30:25): [True: 3, False: 1.35k]
  ------------------
   31|      3|    return {};
   32|      3|  }
   33|       |
   34|  1.35k|  EncodeResult output;
   35|   458k|  for (const auto& w : SplitIntoWords(normalized)) {
  ------------------
  |  Branch (35:22): [True: 458k, False: 1.35k]
  ------------------
   36|   458k|    const int id = PieceToIdNoReserved(w);
   37|   458k|    output.emplace_back(w,
   38|   458k|                        (id != unk_id_ && IsUnusedInlined(id)) ? unk_id_ : id);
  ------------------
  |  Branch (38:26): [True: 6.67k, False: 451k]
  |  Branch (38:43): [True: 1.50k, False: 5.17k]
  ------------------
   39|   458k|  }
   40|       |
   41|  1.35k|  return output;
   42|  1.35k|}

_ZN5Darts7Details15DoubleArrayUnitC2Ev:
   53|  1.78M|  DoubleArrayUnit() : unit_() {}
_ZNK5Darts7Details15DoubleArrayUnit8has_leafEv:
   57|   137M|  bool has_leaf() const {
   58|   137M|    return ((unit_ >> 8) & 1) == 1;
   59|   137M|  }
_ZNK5Darts7Details15DoubleArrayUnit5valueEv:
   62|  74.9M|  value_type value() const {
   63|  74.9M|    return static_cast<value_type>(unit_ & ((1U << 31) - 1));
   64|  74.9M|  }
_ZNK5Darts7Details15DoubleArrayUnit5labelEv:
   69|   540M|  id_type label() const {
   70|   540M|    return unit_ & ((1U << 31) | 0xFF);
   71|   540M|  }
_ZNK5Darts7Details15DoubleArrayUnit6offsetEv:
   73|   573M|  id_type offset() const {
   74|   573M|    return (unit_ >> 10) << ((unit_ & (1U << 9)) >> 6);
   75|   573M|  }
_ZN5Darts7Details9BitVectorC2Ev:
  808|  3.43k|  BitVector() : units_(), ranks_(), num_ones_(0), size_(0) {}
_ZN5Darts7Details9BitVectorD2Ev:
  809|  3.43k|  ~BitVector() {
  810|  3.43k|    clear();
  811|  3.43k|  }
_ZNK5Darts7Details9BitVectorixEm:
  813|  1.02M|  bool operator[](std::size_t id) const {
  814|  1.02M|    return (units_[id / UNIT_SIZE] >> (id % UNIT_SIZE) & 1) == 1;
  815|  1.02M|  }
_ZNK5Darts7Details9BitVector8num_onesEv:
  834|  6.87k|  std::size_t num_ones() const {
  835|  6.87k|    return num_ones_;
  836|  6.87k|  }
_ZNK5Darts7Details9BitVector4sizeEv:
  837|   542k|  std::size_t size() const {
  838|   542k|    return size_;
  839|   542k|  }
_ZN5Darts7Details9BitVector6appendEv:
  841|   542k|  void append() {
  842|   542k|    if ((size_ % UNIT_SIZE) == 0) {
  ------------------
  |  Branch (842:9): [True: 19.2k, False: 523k]
  ------------------
  843|  19.2k|      units_.append(0);
  844|  19.2k|    }
  845|   542k|    ++size_;
  846|   542k|  }
_ZN5Darts7Details9BitVector5clearEv:
  849|  10.3k|  void clear() {
  850|  10.3k|    units_.clear();
  851|  10.3k|    ranks_.clear();
  852|  10.3k|  }
_ZN5Darts7Details9BitVector9pop_countEj:
  866|  19.2k|  static id_type pop_count(id_type unit) {
  867|  19.2k|    unit = ((unit & 0xAAAAAAAA) >> 1) + (unit & 0x55555555);
  868|  19.2k|    unit = ((unit & 0xCCCCCCCC) >> 2) + (unit & 0x33333333);
  869|  19.2k|    unit = ((unit >> 4) + unit) & 0x0F0F0F0F;
  870|  19.2k|    unit += unit >> 8;
  871|  19.2k|    unit += unit >> 16;
  872|  19.2k|    return unit & 0xFF;
  873|  19.2k|  }
_ZN5Darts7Details8DawgNodeC2Ev:
  954|   542k|  DawgNode() : child_(0), sibling_(0), label_('\0'),
  955|   542k|    is_state_(false), has_sibling_(false) {}
_ZN5Darts7Details8DawgNode9set_childEj:
  957|  1.05M|  void set_child(id_type child) {
  958|  1.05M|    child_ = child;
  959|  1.05M|  }
_ZN5Darts7Details8DawgNode11set_siblingEj:
  960|   539k|  void set_sibling(id_type sibling) {
  961|   539k|    sibling_ = sibling;
  962|   539k|  }
_ZN5Darts7Details8DawgNode9set_valueEi:
  963|  28.1k|  void set_value(value_type value) {
  964|  28.1k|    child_ = value;
  965|  28.1k|  }
_ZN5Darts7Details8DawgNode9set_labelEh:
  966|   542k|  void set_label(uchar_type label) {
  967|   542k|    label_ = label;
  968|   542k|  }
_ZN5Darts7Details8DawgNode12set_is_stateEb:
  969|   514k|  void set_is_state(bool is_state) {
  970|   514k|    is_state_ = is_state;
  971|   514k|  }
_ZN5Darts7Details8DawgNode15set_has_siblingEb:
  972|  24.6k|  void set_has_sibling(bool has_sibling) {
  973|  24.6k|    has_sibling_ = has_sibling;
  974|  24.6k|  }
_ZNK5Darts7Details8DawgNode5childEv:
  976|  1.14M|  id_type child() const {
  977|  1.14M|    return child_;
  978|  1.14M|  }
_ZNK5Darts7Details8DawgNode7siblingEv:
  979|  2.91M|  id_type sibling() const {
  980|  2.91M|    return sibling_;
  981|  2.91M|  }
_ZNK5Darts7Details8DawgNode5labelEv:
  985|  1.14M|  uchar_type label() const {
  986|  1.14M|    return label_;
  987|  1.14M|  }
_ZNK5Darts7Details8DawgNode4unitEv:
  995|  1.83M|  id_type unit() const {
  996|  1.83M|    if (label_ == '\0') {
  ------------------
  |  Branch (996:9): [True: 68.8k, False: 1.76M]
  ------------------
  997|  68.8k|      return (child_ << 1) | (has_sibling_ ? 1 : 0);
  ------------------
  |  Branch (997:31): [True: 9.08k, False: 59.7k]
  ------------------
  998|  68.8k|    }
  999|  1.76M|    return (child_ << 2) | (is_state_ ? 2 : 0) | (has_sibling_ ? 1 : 0);
  ------------------
  |  Branch (999:29): [True: 1.70M, False: 52.8k]
  |  Branch (999:51): [True: 40.2k, False: 1.72M]
  ------------------
 1000|  1.83M|  }
_ZN5Darts7Details8DawgUnitC2Ej:
 1018|   542k|  explicit DawgUnit(id_type unit = 0) : unit_(unit) {}
_ZN5Darts7Details8DawgUnitC2ERKS1_:
 1019|   785k|  DawgUnit(const DawgUnit &unit) : unit_(unit.unit_) {}
_ZN5Darts7Details8DawgUnitaSEj:
 1021|   542k|  DawgUnit &operator=(id_type unit) {
 1022|   542k|    unit_ = unit;
 1023|   542k|    return *this;
 1024|   542k|  }
_ZNK5Darts7Details8DawgUnit4unitEv:
 1026|  1.17M|  id_type unit() const {
 1027|  1.17M|    return unit_;
 1028|  1.17M|  }
_ZNK5Darts7Details8DawgUnit5childEv:
 1030|  1.54M|  id_type child() const {
 1031|  1.54M|    return unit_ >> 2;
 1032|  1.54M|  }
_ZNK5Darts7Details8DawgUnit11has_siblingEv:
 1033|  2.80M|  bool has_sibling() const {
 1034|  2.80M|    return (unit_ & 1) == 1;
 1035|  2.80M|  }
_ZNK5Darts7Details8DawgUnit5valueEv:
 1036|  28.1k|  value_type value() const {
 1037|  28.1k|    return static_cast<value_type>(unit_ >> 1);
 1038|  28.1k|  }
_ZNK5Darts7Details8DawgUnit8is_stateEv:
 1039|   425k|  bool is_state() const {
 1040|   425k|    return (unit_ & 2) == 2;
 1041|   425k|  }
_ZN5Darts7Details11DawgBuilderC2Ev:
 1055|  3.43k|  DawgBuilder() : nodes_(), units_(), labels_(), is_intersections_(),
 1056|  3.43k|    table_(), node_stack_(), recycle_bin_(), num_states_(0) {}
_ZN5Darts7Details11DawgBuilderD2Ev:
 1057|  3.43k|  ~DawgBuilder() {
 1058|  3.43k|    clear();
 1059|  3.43k|  }
_ZNK5Darts7Details11DawgBuilder4rootEv:
 1061|  6.87k|  id_type root() const {
 1062|  6.87k|    return 0;
 1063|  6.87k|  }
_ZNK5Darts7Details11DawgBuilder5childEj:
 1065|  1.54M|  id_type child(id_type id) const {
 1066|  1.54M|    return units_[id].child();
 1067|  1.54M|  }
_ZNK5Darts7Details11DawgBuilder7siblingEj:
 1068|  1.61M|  id_type sibling(id_type id) const {
 1069|  1.61M|    return units_[id].has_sibling() ? (id + 1) : 0;
  ------------------
  |  Branch (1069:12): [True: 74.0k, False: 1.54M]
  ------------------
 1070|  1.61M|  }
_ZNK5Darts7Details11DawgBuilder5valueEj:
 1071|  28.1k|  int value(id_type id) const {
 1072|  28.1k|    return units_[id].value();
 1073|  28.1k|  }
_ZNK5Darts7Details11DawgBuilder7is_leafEj:
 1075|   539k|  bool is_leaf(id_type id) const {
 1076|   539k|    return label(id) == '\0';
 1077|   539k|  }
_ZNK5Darts7Details11DawgBuilder5labelEj:
 1078|  1.61M|  uchar_type label(id_type id) const {
 1079|  1.61M|    return labels_[id];
 1080|  1.61M|  }
_ZNK5Darts7Details11DawgBuilder15is_intersectionEj:
 1082|  1.02M|  bool is_intersection(id_type id) const {
 1083|  1.02M|    return is_intersections_[id];
 1084|  1.02M|  }
_ZNK5Darts7Details11DawgBuilder17num_intersectionsEv:
 1089|  6.87k|  std::size_t num_intersections() const {
 1090|  6.87k|    return is_intersections_.num_ones();
 1091|  6.87k|  }
_ZNK5Darts7Details11DawgBuilder4sizeEv:
 1093|  19.8k|  std::size_t size() const {
 1094|  19.8k|    return units_.size();
 1095|  19.8k|  }
_ZN5Darts7Details11DawgBuilder9free_nodeEj:
 1135|   539k|  void free_node(id_type id) {
 1136|   539k|    recycle_bin_.push(id);
 1137|   539k|  }
_ZN5Darts7Details11DawgBuilder4hashEj:
 1139|   966k|  static id_type hash(id_type key) {
 1140|   966k|    key = ~key + (key << 15);  // key = (key << 15) - key - 1;
 1141|   966k|    key = key ^ (key >> 12);
 1142|   966k|    key = key + (key << 2);
 1143|   966k|    key = key ^ (key >> 4);
 1144|   966k|    key = key * 2057;  // key = (key + (key << 3)) + (key << 11);
 1145|   966k|    key = key ^ (key >> 16);
 1146|   966k|    return key;
 1147|   966k|  }
_ZN5Darts7Details22DoubleArrayBuilderUnitC2Ev:
 1401|  1.78M|  DoubleArrayBuilderUnit() : unit_(0) {}
_ZN5Darts7Details22DoubleArrayBuilderUnit12set_has_leafEb:
 1403|  32.4k|  void set_has_leaf(bool has_leaf) {
 1404|  32.4k|    if (has_leaf) {
  ------------------
  |  Branch (1404:9): [True: 32.4k, False: 0]
  ------------------
 1405|  32.4k|      unit_ |= 1U << 8;
 1406|  32.4k|    } else {
 1407|      0|      unit_ &= ~(1U << 8);
 1408|      0|    }
 1409|  32.4k|  }
_ZN5Darts7Details22DoubleArrayBuilderUnit9set_valueEi:
 1410|  32.4k|  void set_value(value_type value) {
 1411|  32.4k|    unit_ = value | (1U << 31);
 1412|  32.4k|  }
_ZN5Darts7Details22DoubleArrayBuilderUnit9set_labelEh:
 1413|  1.75M|  void set_label(uchar_type label) {
 1414|  1.75M|    unit_ = (unit_ & ~0xFFU) | label;
 1415|  1.75M|  }
_ZN5Darts7Details22DoubleArrayBuilderUnit10set_offsetEj:
 1416|   597k|  void set_offset(id_type offset) {
 1417|   597k|    if (offset >= 1U << 29) {
  ------------------
  |  Branch (1417:9): [True: 0, False: 597k]
  ------------------
 1418|      0|      DARTS_THROW("failed to modify unit: too large offset");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1419|      0|    }
 1420|   597k|    unit_ &= (1U << 31) | (1U << 8) | 0xFF;
 1421|   597k|    if (offset < 1U << 21) {
  ------------------
  |  Branch (1421:9): [True: 597k, False: 0]
  ------------------
 1422|   597k|      unit_ |= (offset << 10);
 1423|   597k|    } else {
 1424|      0|      unit_ |= (offset << 2) | (1U << 9);
 1425|      0|    }
 1426|   597k|  }
_ZN5Darts7Details27DoubleArrayBuilderExtraUnitC2Ev:
 1440|  20.3M|  DoubleArrayBuilderExtraUnit() : prev_(0), next_(0),
 1441|  20.3M|      is_fixed_(false), is_used_(false) {}
_ZN5Darts7Details27DoubleArrayBuilderExtraUnit8set_prevEj:
 1443|  3.59M|  void set_prev(id_type prev) {
 1444|  3.59M|    prev_ = prev;
 1445|  3.59M|  }
_ZN5Darts7Details27DoubleArrayBuilderExtraUnit8set_nextEj:
 1446|  3.59M|  void set_next(id_type next) {
 1447|  3.59M|    next_ = next;
 1448|  3.59M|  }
_ZN5Darts7Details27DoubleArrayBuilderExtraUnit12set_is_fixedEb:
 1449|  1.83M|  void set_is_fixed(bool is_fixed) {
 1450|  1.83M|    is_fixed_ = is_fixed;
 1451|  1.83M|  }
_ZN5Darts7Details27DoubleArrayBuilderExtraUnit11set_is_usedEb:
 1452|   642k|  void set_is_used(bool is_used) {
 1453|   642k|    is_used_ = is_used;
 1454|   642k|  }
_ZNK5Darts7Details27DoubleArrayBuilderExtraUnit4prevEv:
 1456|  3.59M|  id_type prev() const {
 1457|  3.59M|    return prev_;
 1458|  3.59M|  }
_ZNK5Darts7Details27DoubleArrayBuilderExtraUnit4nextEv:
 1459|  22.9M|  id_type next() const {
 1460|  22.9M|    return next_;
 1461|  22.9M|  }
_ZNK5Darts7Details27DoubleArrayBuilderExtraUnit8is_fixedEv:
 1462|  1.86M|  bool is_fixed() const {
 1463|  1.86M|    return is_fixed_;
 1464|  1.86M|  }
_ZNK5Darts7Details27DoubleArrayBuilderExtraUnit7is_usedEv:
 1465|  18.8M|  bool is_used() const {
 1466|  18.8M|    return is_used_;
 1467|  18.8M|  }
_ZN5Darts7Details18DoubleArrayBuilderC2EPFimmE:
 1485|  4.97k|      : progress_func_(progress_func), units_(), extras_(), labels_(),
 1486|  4.97k|        table_(), extras_head_(0) {}
_ZN5Darts7Details18DoubleArrayBuilderD2Ev:
 1487|  4.97k|  ~DoubleArrayBuilder() {
 1488|  4.97k|    clear();
 1489|  4.97k|  }
_ZNK5Darts7Details18DoubleArrayBuilder10num_blocksEv:
 1519|  16.9k|  std::size_t num_blocks() const {
 1520|  16.9k|    return units_.size() / BLOCK_SIZE;
 1521|  16.9k|  }
_ZNK5Darts7Details18DoubleArrayBuilder6extrasEj:
 1523|  36.8M|  const extra_type &extras(id_type id) const {
 1524|  36.8M|    return extras_[id % NUM_EXTRAS];
 1525|  36.8M|  }
_ZN5Darts7Details18DoubleArrayBuilder6extrasEj:
 1526|  20.0M|  extra_type &extras(id_type id) {
 1527|  20.0M|    return extras_[id % NUM_EXTRAS];
 1528|  20.0M|  }
_ZN5Darts7Details9BitVector5buildEv:
  876|  3.43k|inline void BitVector::build() {
  877|  3.43k|  try {
  878|  3.43k|    ranks_.reset(new id_type[units_.size()]);
  879|  3.43k|  } catch (const std::bad_alloc &) {
  880|      0|    DARTS_THROW("failed to build rank index: std::bad_alloc");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
  881|      0|  }
  882|       |
  883|  3.43k|  num_ones_ = 0;
  884|  22.6k|  for (std::size_t i = 0; i < units_.size(); ++i) {
  ------------------
  |  Branch (884:27): [True: 19.2k, False: 3.43k]
  ------------------
  885|  19.2k|    ranks_[i] = num_ones_;
  886|  19.2k|    num_ones_ += pop_count(units_[i]);
  887|  19.2k|  }
  888|  3.43k|}
_ZN5Darts7Details11DawgBuilder4initEv:
 1150|  3.43k|inline void DawgBuilder::init() {
 1151|  3.43k|  table_.resize(INITIAL_TABLE_SIZE, 0);
 1152|       |
 1153|  3.43k|  append_node();
 1154|  3.43k|  append_unit();
 1155|       |
 1156|  3.43k|  num_states_ = 1;
 1157|       |
 1158|  3.43k|  nodes_[0].set_label(0xFF);
 1159|  3.43k|  node_stack_.push(0);
 1160|  3.43k|}
_ZN5Darts7Details11DawgBuilder6finishEv:
 1162|  3.43k|inline void DawgBuilder::finish() {
 1163|  3.43k|  flush(0);
 1164|       |
 1165|  3.43k|  units_[0] = nodes_[0].unit();
 1166|  3.43k|  labels_[0] = nodes_[0].label();
 1167|       |
 1168|  3.43k|  nodes_.clear();
 1169|  3.43k|  table_.clear();
 1170|  3.43k|  node_stack_.clear();
 1171|  3.43k|  recycle_bin_.clear();
 1172|       |
 1173|  3.43k|  is_intersections_.build();
 1174|  3.43k|}
_ZN5Darts7Details11DawgBuilder6insertEPKcmi:
 1177|  28.1k|    value_type value) {
 1178|  28.1k|  if (value < 0) {
  ------------------
  |  Branch (1178:7): [True: 0, False: 28.1k]
  ------------------
 1179|      0|    DARTS_THROW("failed to insert key: negative value");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1180|  28.1k|  } else if (length == 0) {
  ------------------
  |  Branch (1180:14): [True: 0, False: 28.1k]
  ------------------
 1181|      0|    DARTS_THROW("failed to insert key: zero-length key");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1182|      0|  }
 1183|       |
 1184|  28.1k|  id_type id = 0;
 1185|  28.1k|  std::size_t key_pos = 0;
 1186|       |
 1187|  62.8k|  for ( ; key_pos <= length; ++key_pos) {
  ------------------
  |  Branch (1187:11): [True: 62.8k, False: 0]
  ------------------
 1188|  62.8k|    id_type child_id = nodes_[id].child();
 1189|  62.8k|    if (child_id == 0) {
  ------------------
  |  Branch (1189:9): [True: 3.43k, False: 59.3k]
  ------------------
 1190|  3.43k|      break;
 1191|  3.43k|    }
 1192|       |
 1193|  59.3k|    uchar_type key_label = static_cast<uchar_type>(key[key_pos]);
 1194|  59.3k|    if (key_pos < length && key_label == '\0') {
  ------------------
  |  Branch (1194:9): [True: 59.3k, False: 0]
  |  Branch (1194:29): [True: 0, False: 59.3k]
  ------------------
 1195|      0|      DARTS_THROW("failed to insert key: invalid null character");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1196|      0|    }
 1197|       |
 1198|  59.3k|    uchar_type unit_label = nodes_[child_id].label();
 1199|  59.3k|    if (key_label < unit_label) {
  ------------------
  |  Branch (1199:9): [True: 0, False: 59.3k]
  ------------------
 1200|      0|      DARTS_THROW("failed to insert key: wrong key order");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1201|  59.3k|    } else if (key_label > unit_label) {
  ------------------
  |  Branch (1201:16): [True: 24.6k, False: 34.6k]
  ------------------
 1202|  24.6k|      nodes_[child_id].set_has_sibling(true);
 1203|  24.6k|      flush(child_id);
 1204|  24.6k|      break;
 1205|  24.6k|    }
 1206|  34.6k|    id = child_id;
 1207|  34.6k|  }
 1208|       |
 1209|  28.1k|  if (key_pos > length) {
  ------------------
  |  Branch (1209:7): [True: 0, False: 28.1k]
  ------------------
 1210|      0|    return;
 1211|      0|  }
 1212|       |
 1213|   567k|  for ( ; key_pos <= length; ++key_pos) {
  ------------------
  |  Branch (1213:11): [True: 539k, False: 28.1k]
  ------------------
 1214|   539k|    uchar_type key_label = static_cast<uchar_type>(
 1215|   539k|        (key_pos < length) ? key[key_pos] : '\0');
  ------------------
  |  Branch (1215:9): [True: 510k, False: 28.1k]
  ------------------
 1216|   539k|    id_type child_id = append_node();
 1217|       |
 1218|   539k|    if (nodes_[id].child() == 0) {
  ------------------
  |  Branch (1218:9): [True: 514k, False: 24.6k]
  ------------------
 1219|   514k|      nodes_[child_id].set_is_state(true);
 1220|   514k|    }
 1221|   539k|    nodes_[child_id].set_sibling(nodes_[id].child());
 1222|   539k|    nodes_[child_id].set_label(key_label);
 1223|   539k|    nodes_[id].set_child(child_id);
 1224|   539k|    node_stack_.push(child_id);
 1225|       |
 1226|   539k|    id = child_id;
 1227|   539k|  }
 1228|  28.1k|  nodes_[id].set_value(value);
 1229|  28.1k|}
_ZN5Darts7Details11DawgBuilder5clearEv:
 1231|  6.87k|inline void DawgBuilder::clear() {
 1232|  6.87k|  nodes_.clear();
 1233|  6.87k|  units_.clear();
 1234|  6.87k|  labels_.clear();
 1235|  6.87k|  is_intersections_.clear();
 1236|  6.87k|  table_.clear();
 1237|  6.87k|  node_stack_.clear();
 1238|  6.87k|  recycle_bin_.clear();
 1239|  6.87k|  num_states_ = 0;
 1240|  6.87k|}
_ZN5Darts7Details11DawgBuilder5flushEj:
 1242|  28.1k|inline void DawgBuilder::flush(id_type id) {
 1243|   542k|  while (node_stack_.top() != id) {
  ------------------
  |  Branch (1243:10): [True: 514k, False: 28.1k]
  ------------------
 1244|   514k|    id_type node_id = node_stack_.top();
 1245|   514k|    node_stack_.pop();
 1246|       |
 1247|   514k|    if (num_states_ >= table_.size() - (table_.size() >> 2)) {
  ------------------
  |  Branch (1247:9): [True: 304, False: 514k]
  ------------------
 1248|    304|      expand_table();
 1249|    304|    }
 1250|       |
 1251|   514k|    id_type num_siblings = 0;
 1252|  1.05M|    for (id_type i = node_id; i != 0; i = nodes_[i].sibling()) {
  ------------------
  |  Branch (1252:31): [True: 539k, False: 514k]
  ------------------
 1253|   539k|      ++num_siblings;
 1254|   539k|    }
 1255|       |
 1256|   514k|    id_type hash_id;
 1257|   514k|    id_type match_id = find_node(node_id, &hash_id);
 1258|   514k|    if (match_id != 0) {
  ------------------
  |  Branch (1258:9): [True: 0, False: 514k]
  ------------------
 1259|      0|      is_intersections_.set(match_id, true);
 1260|   514k|    } else {
 1261|   514k|      id_type unit_id = 0;
 1262|  1.05M|      for (id_type i = 0; i < num_siblings; ++i) {
  ------------------
  |  Branch (1262:27): [True: 539k, False: 514k]
  ------------------
 1263|   539k|        unit_id = append_unit();
 1264|   539k|      }
 1265|  1.05M|      for (id_type i = node_id; i != 0; i = nodes_[i].sibling()) {
  ------------------
  |  Branch (1265:33): [True: 539k, False: 514k]
  ------------------
 1266|   539k|        units_[unit_id] = nodes_[i].unit();
 1267|   539k|        labels_[unit_id] = nodes_[i].label();
 1268|   539k|        --unit_id;
 1269|   539k|      }
 1270|   514k|      match_id = unit_id + 1;
 1271|   514k|      table_[hash_id] = match_id;
 1272|   514k|      ++num_states_;
 1273|   514k|    }
 1274|       |
 1275|  1.05M|    for (id_type i = node_id, next; i != 0; i = next) {
  ------------------
  |  Branch (1275:37): [True: 539k, False: 514k]
  ------------------
 1276|   539k|      next = nodes_[i].sibling();
 1277|   539k|      free_node(i);
 1278|   539k|    }
 1279|       |
 1280|   514k|    nodes_[node_stack_.top()].set_child(match_id);
 1281|   514k|  }
 1282|  28.1k|  node_stack_.pop();
 1283|  28.1k|}
_ZN5Darts7Details11DawgBuilder12expand_tableEv:
 1285|    304|inline void DawgBuilder::expand_table() {
 1286|    304|  std::size_t table_size = table_.size() << 1;
 1287|    304|  table_.clear();
 1288|    304|  table_.resize(table_size, 0);
 1289|       |
 1290|   427k|  for (std::size_t i = 1; i < units_.size(); ++i) {
  ------------------
  |  Branch (1290:27): [True: 427k, False: 304]
  ------------------
 1291|   427k|    id_type id = static_cast<id_type>(i);
 1292|   427k|    if (labels_[id] == '\0' || units_[id].is_state()) {
  ------------------
  |  Branch (1292:9): [True: 2.48k, False: 425k]
  |  Branch (1292:32): [True: 424k, False: 900]
  ------------------
 1293|   426k|      id_type hash_id;
 1294|   426k|      find_unit(id, &hash_id);
 1295|   426k|      table_[hash_id] = id;
 1296|   426k|    }
 1297|   427k|  }
 1298|    304|}
_ZNK5Darts7Details11DawgBuilder9find_unitEjPj:
 1300|   426k|inline id_type DawgBuilder::find_unit(id_type id, id_type *hash_id) const {
 1301|   426k|  *hash_id = hash_unit(id) % table_.size();
 1302|   555k|  for ( ; ; *hash_id = (*hash_id + 1) % table_.size()) {
 1303|   555k|    id_type unit_id = table_[*hash_id];
 1304|   555k|    if (unit_id == 0) {
  ------------------
  |  Branch (1304:9): [True: 426k, False: 128k]
  ------------------
 1305|   426k|      break;
 1306|   426k|    }
 1307|       |
 1308|       |    // There must not be the same unit.
 1309|   555k|  }
 1310|   426k|  return 0;
 1311|   426k|}
_ZNK5Darts7Details11DawgBuilder9find_nodeEjPj:
 1314|   514k|    id_type *hash_id) const {
 1315|   514k|  *hash_id = hash_node(node_id) % table_.size();
 1316|  1.27M|  for ( ; ; *hash_id = (*hash_id + 1) % table_.size()) {
 1317|  1.27M|    id_type unit_id = table_[*hash_id];
 1318|  1.27M|    if (unit_id == 0) {
  ------------------
  |  Branch (1318:9): [True: 514k, False: 756k]
  ------------------
 1319|   514k|      break;
 1320|   514k|    }
 1321|       |
 1322|   756k|    if (are_equal(node_id, unit_id)) {
  ------------------
  |  Branch (1322:9): [True: 0, False: 756k]
  ------------------
 1323|      0|      return unit_id;
 1324|      0|    }
 1325|   756k|  }
 1326|   514k|  return 0;
 1327|   514k|}
_ZNK5Darts7Details11DawgBuilder9are_equalEjj:
 1329|   756k|inline bool DawgBuilder::are_equal(id_type node_id, id_type unit_id) const {
 1330|   756k|  for (id_type i = nodes_[node_id].sibling(); i != 0;
  ------------------
  |  Branch (1330:47): [True: 6.44k, False: 750k]
  ------------------
 1331|   756k|      i = nodes_[i].sibling()) {
 1332|  6.44k|    if (units_[unit_id].has_sibling() == false) {
  ------------------
  |  Branch (1332:9): [True: 6.27k, False: 169]
  ------------------
 1333|  6.27k|      return false;
 1334|  6.27k|    }
 1335|    169|    ++unit_id;
 1336|    169|  }
 1337|   750k|  if (units_[unit_id].has_sibling() == true) {
  ------------------
  |  Branch (1337:7): [True: 1.51k, False: 748k]
  ------------------
 1338|  1.51k|    return false;
 1339|  1.51k|  }
 1340|       |
 1341|   748k|  for (id_type i = node_id; i != 0; i = nodes_[i].sibling(), --unit_id) {
  ------------------
  |  Branch (1341:29): [True: 748k, False: 0]
  ------------------
 1342|   748k|    if (nodes_[i].unit() != units_[unit_id].unit() ||
  ------------------
  |  Branch (1342:9): [True: 748k, False: 61]
  ------------------
 1343|   748k|        nodes_[i].label() != labels_[unit_id]) {
  ------------------
  |  Branch (1343:9): [True: 61, False: 0]
  ------------------
 1344|   748k|      return false;
 1345|   748k|    }
 1346|   748k|  }
 1347|      0|  return true;
 1348|   748k|}
_ZNK5Darts7Details11DawgBuilder9hash_unitEj:
 1350|   426k|inline id_type DawgBuilder::hash_unit(id_type id) const {
 1351|   426k|  id_type hash_value = 0;
 1352|   427k|  for ( ; id != 0; ++id) {
  ------------------
  |  Branch (1352:11): [True: 427k, False: 0]
  ------------------
 1353|   427k|    id_type unit = units_[id].unit();
 1354|   427k|    uchar_type label = labels_[id];
 1355|   427k|    hash_value ^= hash((label << 24) ^ unit);
 1356|       |
 1357|   427k|    if (units_[id].has_sibling() == false) {
  ------------------
  |  Branch (1357:9): [True: 426k, False: 900]
  ------------------
 1358|   426k|      break;
 1359|   426k|    }
 1360|   427k|  }
 1361|   426k|  return hash_value;
 1362|   426k|}
_ZNK5Darts7Details11DawgBuilder9hash_nodeEj:
 1364|   514k|inline id_type DawgBuilder::hash_node(id_type id) const {
 1365|   514k|  id_type hash_value = 0;
 1366|  1.05M|  for ( ; id != 0; id = nodes_[id].sibling()) {
  ------------------
  |  Branch (1366:11): [True: 539k, False: 514k]
  ------------------
 1367|   539k|    id_type unit = nodes_[id].unit();
 1368|   539k|    uchar_type label = nodes_[id].label();
 1369|   539k|    hash_value ^= hash((label << 24) ^ unit);
 1370|   539k|  }
 1371|   514k|  return hash_value;
 1372|   514k|}
_ZN5Darts7Details11DawgBuilder11append_unitEv:
 1374|   542k|inline id_type DawgBuilder::append_unit() {
 1375|   542k|  is_intersections_.append();
 1376|   542k|  units_.append();
 1377|   542k|  labels_.append();
 1378|       |
 1379|   542k|  return static_cast<id_type>(is_intersections_.size() - 1);
 1380|   542k|}
_ZN5Darts7Details11DawgBuilder11append_nodeEv:
 1382|   542k|inline id_type DawgBuilder::append_node() {
 1383|   542k|  id_type id;
 1384|   542k|  if (recycle_bin_.empty()) {
  ------------------
  |  Branch (1384:7): [True: 202k, False: 339k]
  ------------------
 1385|   202k|    id = static_cast<id_type>(nodes_.size());
 1386|   202k|    nodes_.append();
 1387|   339k|  } else {
 1388|   339k|    id = recycle_bin_.top();
 1389|   339k|    nodes_[id] = DawgNode();
 1390|   339k|    recycle_bin_.pop();
 1391|   339k|  }
 1392|   542k|  return id;
 1393|   542k|}
_ZNK5Darts7Details18DoubleArrayBuilder4copyEPmPPNS0_15DoubleArrayUnitE:
 1570|  4.97k|    DoubleArrayUnit **buf_ptr) const {
 1571|  4.97k|  if (size_ptr != NULL) {
  ------------------
  |  Branch (1571:7): [True: 4.97k, False: 0]
  ------------------
 1572|  4.97k|    *size_ptr = units_.size();
 1573|  4.97k|  }
 1574|  4.97k|  if (buf_ptr != NULL) {
  ------------------
  |  Branch (1574:7): [True: 4.97k, False: 0]
  ------------------
 1575|  4.97k|    *buf_ptr = new DoubleArrayUnit[units_.size()];
 1576|  4.97k|    unit_type *units = reinterpret_cast<unit_type *>(*buf_ptr);
 1577|  1.79M|    for (std::size_t i = 0; i < units_.size(); ++i) {
  ------------------
  |  Branch (1577:29): [True: 1.78M, False: 4.97k]
  ------------------
 1578|  1.78M|      units[i] = units_[i];
 1579|  1.78M|    }
 1580|  4.97k|  }
 1581|  4.97k|}
_ZN5Darts7Details18DoubleArrayBuilder5clearEv:
 1583|  4.97k|inline void DoubleArrayBuilder::clear() {
 1584|  4.97k|  units_.clear();
 1585|  4.97k|  extras_.clear();
 1586|  4.97k|  labels_.clear();
 1587|  4.97k|  table_.clear();
 1588|  4.97k|  extras_head_ = 0;
 1589|  4.97k|}
_ZN5Darts7Details18DoubleArrayBuilder15build_from_dawgERKNS0_11DawgBuilderE:
 1604|  3.43k|inline void DoubleArrayBuilder::build_from_dawg(const DawgBuilder &dawg) {
 1605|  3.43k|  std::size_t num_units = 1;
 1606|  19.8k|  while (num_units < dawg.size()) {
  ------------------
  |  Branch (1606:10): [True: 16.3k, False: 3.43k]
  ------------------
 1607|  16.3k|    num_units <<= 1;
 1608|  16.3k|  }
 1609|  3.43k|  units_.reserve(num_units);
 1610|       |
 1611|  3.43k|  table_.reset(new id_type[dawg.num_intersections()]);
 1612|  3.43k|  for (std::size_t i = 0; i < dawg.num_intersections(); ++i) {
  ------------------
  |  Branch (1612:27): [True: 0, False: 3.43k]
  ------------------
 1613|      0|    table_[i] = 0;
 1614|      0|  }
 1615|       |
 1616|  3.43k|  extras_.reset(new extra_type[NUM_EXTRAS]);
 1617|       |
 1618|  3.43k|  reserve_id(0);
 1619|  3.43k|  extras(0).set_is_used(true);
 1620|  3.43k|  units_[0].set_offset(1);
 1621|  3.43k|  units_[0].set_label('\0');
 1622|       |
 1623|  3.43k|  if (dawg.child(dawg.root()) != 0) {
  ------------------
  |  Branch (1623:7): [True: 3.43k, False: 0]
  ------------------
 1624|  3.43k|    build_from_dawg(dawg, dawg.root(), 0);
 1625|  3.43k|  }
 1626|       |
 1627|  3.43k|  fix_all_blocks();
 1628|       |
 1629|  3.43k|  extras_.clear();
 1630|  3.43k|  labels_.clear();
 1631|  3.43k|  table_.clear();
 1632|  3.43k|}
_ZN5Darts7Details18DoubleArrayBuilder15build_from_dawgERKNS0_11DawgBuilderEjj:
 1635|   514k|    id_type dawg_id, id_type dic_id) {
 1636|   514k|  id_type dawg_child_id = dawg.child(dawg_id);
 1637|   514k|  if (dawg.is_intersection(dawg_child_id)) {
  ------------------
  |  Branch (1637:7): [True: 0, False: 514k]
  ------------------
 1638|      0|    id_type intersection_id = dawg.intersection_id(dawg_child_id);
 1639|      0|    id_type offset = table_[intersection_id];
 1640|      0|    if (offset != 0) {
  ------------------
  |  Branch (1640:9): [True: 0, False: 0]
  ------------------
 1641|      0|      offset ^= dic_id;
 1642|      0|      if (!(offset & UPPER_MASK) || !(offset & LOWER_MASK)) {
  ------------------
  |  Branch (1642:11): [True: 0, False: 0]
  |  Branch (1642:37): [True: 0, False: 0]
  ------------------
 1643|      0|        if (dawg.is_leaf(dawg_child_id)) {
  ------------------
  |  Branch (1643:13): [True: 0, False: 0]
  ------------------
 1644|      0|          units_[dic_id].set_has_leaf(true);
 1645|      0|        }
 1646|      0|        units_[dic_id].set_offset(offset);
 1647|      0|        return;
 1648|      0|      }
 1649|      0|    }
 1650|      0|  }
 1651|       |
 1652|   514k|  id_type offset = arrange_from_dawg(dawg, dawg_id, dic_id);
 1653|   514k|  if (dawg.is_intersection(dawg_child_id)) {
  ------------------
  |  Branch (1653:7): [True: 0, False: 514k]
  ------------------
 1654|      0|    table_[dawg.intersection_id(dawg_child_id)] = offset;
 1655|      0|  }
 1656|       |
 1657|   539k|  do {
 1658|   539k|    uchar_type child_label = dawg.label(dawg_child_id);
 1659|   539k|    id_type dic_child_id = offset ^ child_label;
 1660|   539k|    if (child_label != '\0') {
  ------------------
  |  Branch (1660:9): [True: 510k, False: 28.1k]
  ------------------
 1661|   510k|      build_from_dawg(dawg, dawg_child_id, dic_child_id);
 1662|   510k|    }
 1663|   539k|    dawg_child_id = dawg.sibling(dawg_child_id);
 1664|   539k|  } while (dawg_child_id != 0);
  ------------------
  |  Branch (1664:12): [True: 24.6k, False: 514k]
  ------------------
 1665|   514k|}
_ZN5Darts7Details18DoubleArrayBuilder17arrange_from_dawgERKNS0_11DawgBuilderEjj:
 1668|   514k|    id_type dawg_id, id_type dic_id) {
 1669|   514k|  labels_.resize(0);
 1670|       |
 1671|   514k|  id_type dawg_child_id = dawg.child(dawg_id);
 1672|  1.05M|  while (dawg_child_id != 0) {
  ------------------
  |  Branch (1672:10): [True: 539k, False: 514k]
  ------------------
 1673|   539k|    labels_.append(dawg.label(dawg_child_id));
 1674|   539k|    dawg_child_id = dawg.sibling(dawg_child_id);
 1675|   539k|  }
 1676|       |
 1677|   514k|  id_type offset = find_valid_offset(dic_id);
 1678|   514k|  units_[dic_id].set_offset(dic_id ^ offset);
 1679|       |
 1680|   514k|  dawg_child_id = dawg.child(dawg_id);
 1681|  1.05M|  for (std::size_t i = 0; i < labels_.size(); ++i) {
  ------------------
  |  Branch (1681:27): [True: 539k, False: 514k]
  ------------------
 1682|   539k|    id_type dic_child_id = offset ^ labels_[i];
 1683|   539k|    reserve_id(dic_child_id);
 1684|       |
 1685|   539k|    if (dawg.is_leaf(dawg_child_id)) {
  ------------------
  |  Branch (1685:9): [True: 28.1k, False: 510k]
  ------------------
 1686|  28.1k|      units_[dic_id].set_has_leaf(true);
 1687|  28.1k|      units_[dic_child_id].set_value(dawg.value(dawg_child_id));
 1688|   510k|    } else {
 1689|   510k|      units_[dic_child_id].set_label(labels_[i]);
 1690|   510k|    }
 1691|       |
 1692|   539k|    dawg_child_id = dawg.sibling(dawg_child_id);
 1693|   539k|  }
 1694|   514k|  extras(offset).set_is_used(true);
 1695|       |
 1696|   514k|  return offset;
 1697|   514k|}
_ZNK5Darts7Details18DoubleArrayBuilder17find_valid_offsetEj:
 1805|   592k|inline id_type DoubleArrayBuilder::find_valid_offset(id_type id) const {
 1806|   592k|  if (extras_head_ >= units_.size()) {
  ------------------
  |  Branch (1806:7): [True: 14, False: 592k]
  ------------------
 1807|     14|    return units_.size() | (id & LOWER_MASK);
 1808|     14|  }
 1809|       |
 1810|   592k|  id_type unfixed_id = extras_head_;
 1811|  18.6M|  do {
 1812|  18.6M|    id_type offset = unfixed_id ^ labels_[0];
 1813|  18.6M|    if (is_valid_offset(id, offset)) {
  ------------------
  |  Branch (1813:9): [True: 590k, False: 18.0M]
  ------------------
 1814|   590k|      return offset;
 1815|   590k|    }
 1816|  18.0M|    unfixed_id = extras(unfixed_id).next();
 1817|  18.0M|  } while (unfixed_id != extras_head_);
  ------------------
  |  Branch (1817:12): [True: 18.0M, False: 2.00k]
  ------------------
 1818|       |
 1819|  2.00k|  return units_.size() | (id & LOWER_MASK);
 1820|   592k|}
_ZNK5Darts7Details18DoubleArrayBuilder15is_valid_offsetEjj:
 1823|  18.6M|    id_type offset) const {
 1824|  18.6M|  if (extras(offset).is_used()) {
  ------------------
  |  Branch (1824:7): [True: 18.0M, False: 626k]
  ------------------
 1825|  18.0M|    return false;
 1826|  18.0M|  }
 1827|       |
 1828|   626k|  id_type rel_offset = id ^ offset;
 1829|   626k|  if ((rel_offset & LOWER_MASK) && (rel_offset & UPPER_MASK)) {
  ------------------
  |  Branch (1829:7): [True: 589k, False: 36.8k]
  |  Branch (1829:36): [True: 0, False: 589k]
  ------------------
 1830|      0|    return false;
 1831|      0|  }
 1832|       |
 1833|   662k|  for (std::size_t i = 1; i < labels_.size(); ++i) {
  ------------------
  |  Branch (1833:27): [True: 72.2k, False: 590k]
  ------------------
 1834|  72.2k|    if (extras(offset ^ labels_[i]).is_fixed()) {
  ------------------
  |  Branch (1834:9): [True: 36.1k, False: 36.1k]
  ------------------
 1835|  36.1k|      return false;
 1836|  36.1k|    }
 1837|  72.2k|  }
 1838|       |
 1839|   590k|  return true;
 1840|   626k|}
_ZN5Darts7Details18DoubleArrayBuilder10reserve_idEj:
 1842|  1.78M|inline void DoubleArrayBuilder::reserve_id(id_type id) {
 1843|  1.78M|  if (id >= units_.size()) {
  ------------------
  |  Branch (1843:7): [True: 6.99k, False: 1.78M]
  ------------------
 1844|  6.99k|    expand_units();
 1845|  6.99k|  }
 1846|       |
 1847|  1.78M|  if (id == extras_head_) {
  ------------------
  |  Branch (1847:7): [True: 1.30M, False: 486k]
  ------------------
 1848|  1.30M|    extras_head_ = extras(id).next();
 1849|  1.30M|    if (extras_head_ == id) {
  ------------------
  |  Branch (1849:9): [True: 4.98k, False: 1.29M]
  ------------------
 1850|  4.98k|      extras_head_ = units_.size();
 1851|  4.98k|    }
 1852|  1.30M|  }
 1853|  1.78M|  extras(extras(id).prev()).set_next(extras(id).next());
 1854|  1.78M|  extras(extras(id).next()).set_prev(extras(id).prev());
 1855|  1.78M|  extras(id).set_is_fixed(true);
 1856|  1.78M|}
_ZN5Darts7Details18DoubleArrayBuilder12expand_unitsEv:
 1858|  6.99k|inline void DoubleArrayBuilder::expand_units() {
 1859|  6.99k|  id_type src_num_units = units_.size();
 1860|  6.99k|  id_type src_num_blocks = num_blocks();
 1861|       |
 1862|  6.99k|  id_type dest_num_units = src_num_units + BLOCK_SIZE;
 1863|  6.99k|  id_type dest_num_blocks = src_num_blocks + 1;
 1864|       |
 1865|  6.99k|  if (dest_num_blocks > NUM_EXTRA_BLOCKS) {
  ------------------
  |  Branch (1865:7): [True: 178, False: 6.81k]
  ------------------
 1866|    178|    fix_block(src_num_blocks - NUM_EXTRA_BLOCKS);
 1867|    178|  }
 1868|       |
 1869|  6.99k|  units_.resize(dest_num_units);
 1870|       |
 1871|  6.99k|  if (dest_num_blocks > NUM_EXTRA_BLOCKS) {
  ------------------
  |  Branch (1871:7): [True: 178, False: 6.81k]
  ------------------
 1872|  45.7k|    for (std::size_t id = src_num_units; id < dest_num_units; ++id) {
  ------------------
  |  Branch (1872:42): [True: 45.5k, False: 178]
  ------------------
 1873|  45.5k|      extras(id).set_is_used(false);
 1874|  45.5k|      extras(id).set_is_fixed(false);
 1875|  45.5k|    }
 1876|    178|  }
 1877|       |
 1878|  1.78M|  for (id_type i = src_num_units + 1; i < dest_num_units; ++i) {
  ------------------
  |  Branch (1878:39): [True: 1.78M, False: 6.99k]
  ------------------
 1879|  1.78M|    extras(i - 1).set_next(i);
 1880|  1.78M|    extras(i).set_prev(i - 1);
 1881|  1.78M|  }
 1882|       |
 1883|  6.99k|  extras(src_num_units).set_prev(dest_num_units - 1);
 1884|  6.99k|  extras(dest_num_units - 1).set_next(src_num_units);
 1885|       |
 1886|  6.99k|  extras(src_num_units).set_prev(extras(extras_head_).prev());
 1887|  6.99k|  extras(dest_num_units - 1).set_next(extras_head_);
 1888|       |
 1889|  6.99k|  extras(extras(extras_head_).prev()).set_next(src_num_units);
 1890|  6.99k|  extras(extras_head_).set_prev(dest_num_units - 1);
 1891|  6.99k|}
_ZN5Darts7Details18DoubleArrayBuilder14fix_all_blocksEv:
 1893|  4.97k|inline void DoubleArrayBuilder::fix_all_blocks() {
 1894|  4.97k|  id_type begin = 0;
 1895|  4.97k|  if (num_blocks() > NUM_EXTRA_BLOCKS) {
  ------------------
  |  Branch (1895:7): [True: 39, False: 4.93k]
  ------------------
 1896|     39|    begin = num_blocks() - NUM_EXTRA_BLOCKS;
 1897|     39|  }
 1898|  4.97k|  id_type end = num_blocks();
 1899|       |
 1900|  11.7k|  for (id_type block_id = begin; block_id != end; ++block_id) {
  ------------------
  |  Branch (1900:34): [True: 6.81k, False: 4.97k]
  ------------------
 1901|  6.81k|    fix_block(block_id);
 1902|  6.81k|  }
 1903|  4.97k|}
_ZN5Darts7Details18DoubleArrayBuilder9fix_blockEj:
 1905|  6.99k|inline void DoubleArrayBuilder::fix_block(id_type block_id) {
 1906|  6.99k|  id_type begin = block_id * BLOCK_SIZE;
 1907|  6.99k|  id_type end = begin + BLOCK_SIZE;
 1908|       |
 1909|  6.99k|  id_type unused_offset = 0;
 1910|   131k|  for (id_type offset = begin; offset != end; ++offset) {
  ------------------
  |  Branch (1910:32): [True: 131k, False: 90]
  ------------------
 1911|   131k|    if (!extras(offset).is_used()) {
  ------------------
  |  Branch (1911:9): [True: 6.90k, False: 124k]
  ------------------
 1912|  6.90k|      unused_offset = offset;
 1913|  6.90k|      break;
 1914|  6.90k|    }
 1915|   131k|  }
 1916|       |
 1917|  1.79M|  for (id_type id = begin; id != end; ++id) {
  ------------------
  |  Branch (1917:28): [True: 1.78M, False: 6.99k]
  ------------------
 1918|  1.78M|    if (!extras(id).is_fixed()) {
  ------------------
  |  Branch (1918:9): [True: 1.16M, False: 624k]
  ------------------
 1919|  1.16M|      reserve_id(id);
 1920|  1.16M|      units_[id].set_label(static_cast<uchar_type>(id ^ unused_offset));
 1921|  1.16M|    }
 1922|  1.78M|  }
 1923|  6.99k|}
_ZN5Darts7Details9AutoArrayIcE5clearEv:
  612|   400k|  void clear() {
  613|   400k|    if (array_ != NULL) {
  ------------------
  |  Branch (613:9): [True: 122k, False: 278k]
  ------------------
  614|   122k|      delete[] array_;
  615|       |      array_ = NULL;
  616|   122k|    }
  617|   400k|  }
_ZNK5Darts7Details8AutoPoolIjEixEm:
  645|  2.85M|  const T &operator[](std::size_t id) const {
  646|  2.85M|    return *(reinterpret_cast<const T *>(&buf_[0]) + id);
  647|  2.85M|  }
_ZNK5Darts7Details9AutoArrayIcEixEm:
  601|  34.1M|  const T &operator[](std::size_t id) const {
  602|  34.1M|    return array_[id];
  603|  34.1M|  }
_ZN5Darts7Details8AutoPoolIjEixEm:
  648|  14.3M|  T &operator[](std::size_t id) {
  649|  14.3M|    return *(reinterpret_cast<T *>(&buf_[0]) + id);
  650|  14.3M|  }
_ZN5Darts7Details9AutoArrayIcEixEm:
  604|  34.5M|  T &operator[](std::size_t id) {
  605|  34.5M|    return array_[id];
  606|  34.5M|  }
_ZNK5Darts7Details8AutoPoolIjE5emptyEv:
  652|   542k|  bool empty() const {
  653|   542k|    return size_ == 0;
  654|   542k|  }
_ZN5Darts7Details8AutoPoolIjE6appendERKj:
  678|  1.10M|  void append(const T &value) {
  679|  1.10M|    if (size_ == capacity_)
  ------------------
  |  Branch (679:9): [True: 40.1k, False: 1.06M]
  ------------------
  680|  40.1k|      resize_buf(size_ + 1);
  681|  1.10M|    new(&(*this)[size_++]) T(value);
  682|  1.10M|  }
_ZN5Darts7Details8AutoPoolIjE10resize_bufEm:
  726|  43.8k|void AutoPool<T>::resize_buf(std::size_t size) {
  727|  43.8k|  std::size_t capacity;
  728|  43.8k|  if (size >= capacity_ * 2) {
  ------------------
  |  Branch (728:7): [True: 22.0k, False: 21.8k]
  ------------------
  729|  22.0k|    capacity = size;
  730|  22.0k|  } else {
  731|  21.8k|    capacity = 1;
  732|   101k|    while (capacity < size) {
  ------------------
  |  Branch (732:12): [True: 79.5k, False: 21.8k]
  ------------------
  733|  79.5k|      capacity <<= 1;
  734|  79.5k|    }
  735|  21.8k|  }
  736|       |
  737|  43.8k|  AutoArray<char> buf;
  738|  43.8k|  try {
  739|  43.8k|    buf.reset(new char[sizeof(T) * capacity]);
  740|  43.8k|  } catch (const std::bad_alloc &) {
  741|      0|    DARTS_THROW("failed to resize pool: std::bad_alloc");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
  742|      0|  }
  743|       |
  744|  43.8k|  if (size_ > 0) {
  ------------------
  |  Branch (744:7): [True: 29.7k, False: 14.0k]
  ------------------
  745|  29.7k|    T *src = reinterpret_cast<T *>(&buf_[0]);
  746|  29.7k|    T *dest = reinterpret_cast<T *>(&buf[0]);
  747|   600k|    for (std::size_t i = 0; i < size_; ++i) {
  ------------------
  |  Branch (747:29): [True: 570k, False: 29.7k]
  ------------------
  748|   570k|      new(&dest[i]) T(src[i]);
  749|   570k|      src[i].~T();
  750|   570k|    }
  751|  29.7k|  }
  752|       |
  753|  43.8k|  buf_.swap(&buf);
  754|  43.8k|  capacity_ = capacity;
  755|  43.8k|}
_ZN5Darts7Details9AutoArrayIcE5resetEPc:
  623|   122k|  void reset(T *array = NULL) {
  624|   122k|    AutoArray(array).swap(this);
  625|   122k|  }
_ZN5Darts7Details9AutoArrayIcE4swapEPS2_:
  618|   245k|  void swap(AutoArray *array) {
  619|   245k|    T *temp = array_;
  620|   245k|    array_ = array->array_;
  621|   245k|    array->array_ = temp;
  622|   245k|  }
_ZN5Darts7Details8AutoPoolIjE5clearEv:
  659|  62.1k|  void clear() {
  660|  62.1k|    resize(0);
  661|  62.1k|    buf_.clear();
  662|  62.1k|    size_ = 0;
  663|  62.1k|    capacity_ = 0;
  664|  62.1k|  }
_ZN5Darts7Details8AutoPoolIjE6resizeEm:
  684|  62.1k|  void resize(std::size_t size) {
  685|  4.93M|    while (size_ > size) {
  ------------------
  |  Branch (685:12): [True: 4.87M, False: 62.1k]
  ------------------
  686|  4.87M|      (*this)[--size_].~T();
  687|  4.87M|    }
  688|  62.1k|    if (size > capacity_) {
  ------------------
  |  Branch (688:9): [True: 0, False: 62.1k]
  ------------------
  689|      0|      resize_buf(size);
  690|      0|    }
  691|  62.1k|    while (size_ < size) {
  ------------------
  |  Branch (691:12): [True: 0, False: 62.1k]
  ------------------
  692|      0|      new(&(*this)[size_++]) T;
  693|      0|    }
  694|  62.1k|  }
_ZN5Darts7Details9AutoArrayIjE5clearEv:
  612|  34.0k|  void clear() {
  613|  34.0k|    if (array_ != NULL) {
  ------------------
  |  Branch (613:9): [True: 6.87k, False: 27.1k]
  ------------------
  614|  6.87k|      delete[] array_;
  615|       |      array_ = NULL;
  616|  6.87k|    }
  617|  34.0k|  }
_ZN5Darts7Details9AutoArrayIjE5resetEPj:
  623|  6.87k|  void reset(T *array = NULL) {
  624|  6.87k|    AutoArray(array).swap(this);
  625|  6.87k|  }
_ZN5Darts7Details9AutoArrayIjE4swapEPS2_:
  618|  6.87k|  void swap(AutoArray *array) {
  619|  6.87k|    T *temp = array_;
  620|  6.87k|    array_ = array->array_;
  621|  6.87k|    array->array_ = temp;
  622|  6.87k|  }
_ZNK5Darts7Details8AutoPoolIjE4sizeEv:
  655|  4.79M|  std::size_t size() const {
  656|  4.79M|    return size_;
  657|  4.79M|  }
_ZN5Darts7Details9AutoArrayIjEixEm:
  604|  19.2k|  T &operator[](std::size_t id) {
  605|  19.2k|    return array_[id];
  606|  19.2k|  }
_ZNK5Darts7Details8AutoPoolINS0_8DawgUnitEEixEm:
  645|  5.55M|  const T &operator[](std::size_t id) const {
  646|  5.55M|    return *(reinterpret_cast<const T *>(&buf_[0]) + id);
  647|  5.55M|  }
_ZNK5Darts7Details8AutoPoolIhEixEm:
  645|  20.8M|  const T &operator[](std::size_t id) const {
  646|  20.8M|    return *(reinterpret_cast<const T *>(&buf_[0]) + id);
  647|  20.8M|  }
_ZNK5Darts7Details8AutoPoolINS0_8DawgUnitEE4sizeEv:
  655|   447k|  std::size_t size() const {
  656|   447k|    return size_;
  657|   447k|  }
_ZN5Darts7Details9AutoStackIjE4pushERKj:
  783|  1.08M|  void push(const T &value) {
  784|  1.08M|    pool_.push_back(value);
  785|  1.08M|  }
_ZN5Darts7Details8AutoPoolIjE9push_backERKj:
  666|  1.08M|  void push_back(const T &value) {
  667|  1.08M|    append(value);
  668|  1.08M|  }
_ZN5Darts7Details8AutoPoolIjE6resizeEmRKj:
  695|  3.74k|  void resize(std::size_t size, const T &value) {
  696|  3.74k|    while (size_ > size) {
  ------------------
  |  Branch (696:12): [True: 0, False: 3.74k]
  ------------------
  697|      0|      (*this)[--size_].~T();
  698|      0|    }
  699|  3.74k|    if (size > capacity_) {
  ------------------
  |  Branch (699:9): [True: 3.74k, False: 0]
  ------------------
  700|  3.74k|      resize_buf(size);
  701|  3.74k|    }
  702|  4.66M|    while (size_ < size) {
  ------------------
  |  Branch (702:12): [True: 4.65M, False: 3.74k]
  ------------------
  703|  4.65M|      new(&(*this)[size_++]) T(value);
  704|  4.65M|    }
  705|  3.74k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEEixEm:
  648|  7.34M|  T &operator[](std::size_t id) {
  649|  7.34M|    return *(reinterpret_cast<T *>(&buf_[0]) + id);
  650|  7.34M|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEEixEm:
  648|  2.05M|  T &operator[](std::size_t id) {
  649|  2.05M|    return *(reinterpret_cast<T *>(&buf_[0]) + id);
  650|  2.05M|  }
_ZN5Darts7Details8AutoPoolIhEixEm:
  648|  4.59M|  T &operator[](std::size_t id) {
  649|  4.59M|    return *(reinterpret_cast<T *>(&buf_[0]) + id);
  650|  4.59M|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEE5clearEv:
  659|  13.7k|  void clear() {
  660|  13.7k|    resize(0);
  661|  13.7k|    buf_.clear();
  662|  13.7k|    size_ = 0;
  663|  13.7k|    capacity_ = 0;
  664|  13.7k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEE6resizeEm:
  684|  13.7k|  void resize(std::size_t size) {
  685|   216k|    while (size_ > size) {
  ------------------
  |  Branch (685:12): [True: 202k, False: 13.7k]
  ------------------
  686|   202k|      (*this)[--size_].~T();
  687|   202k|    }
  688|  13.7k|    if (size > capacity_) {
  ------------------
  |  Branch (688:9): [True: 0, False: 13.7k]
  ------------------
  689|      0|      resize_buf(size);
  690|      0|    }
  691|  13.7k|    while (size_ < size) {
  ------------------
  |  Branch (691:12): [True: 0, False: 13.7k]
  ------------------
  692|      0|      new(&(*this)[size_++]) T;
  693|      0|    }
  694|  13.7k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEE10resize_bufEm:
  726|  17.7k|void AutoPool<T>::resize_buf(std::size_t size) {
  727|  17.7k|  std::size_t capacity;
  728|  17.7k|  if (size >= capacity_ * 2) {
  ------------------
  |  Branch (728:7): [True: 6.87k, False: 10.8k]
  ------------------
  729|  6.87k|    capacity = size;
  730|  10.8k|  } else {
  731|  10.8k|    capacity = 1;
  732|  51.1k|    while (capacity < size) {
  ------------------
  |  Branch (732:12): [True: 40.2k, False: 10.8k]
  ------------------
  733|  40.2k|      capacity <<= 1;
  734|  40.2k|    }
  735|  10.8k|  }
  736|       |
  737|  17.7k|  AutoArray<char> buf;
  738|  17.7k|  try {
  739|  17.7k|    buf.reset(new char[sizeof(T) * capacity]);
  740|  17.7k|  } catch (const std::bad_alloc &) {
  741|      0|    DARTS_THROW("failed to resize pool: std::bad_alloc");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
  742|      0|  }
  743|       |
  744|  17.7k|  if (size_ > 0) {
  ------------------
  |  Branch (744:7): [True: 14.3k, False: 3.43k]
  ------------------
  745|  14.3k|    T *src = reinterpret_cast<T *>(&buf_[0]);
  746|  14.3k|    T *dest = reinterpret_cast<T *>(&buf[0]);
  747|   298k|    for (std::size_t i = 0; i < size_; ++i) {
  ------------------
  |  Branch (747:29): [True: 284k, False: 14.3k]
  ------------------
  748|   284k|      new(&dest[i]) T(src[i]);
  749|   284k|      src[i].~T();
  750|   284k|    }
  751|  14.3k|  }
  752|       |
  753|  17.7k|  buf_.swap(&buf);
  754|  17.7k|  capacity_ = capacity;
  755|  17.7k|}
_ZN5Darts7Details9AutoStackIjE5clearEv:
  790|  27.5k|  void clear() {
  791|  27.5k|    pool_.clear();
  792|  27.5k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEE5clearEv:
  659|  10.3k|  void clear() {
  660|  10.3k|    resize(0);
  661|  10.3k|    buf_.clear();
  662|  10.3k|    size_ = 0;
  663|  10.3k|    capacity_ = 0;
  664|  10.3k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEE6resizeEm:
  684|  10.3k|  void resize(std::size_t size) {
  685|   552k|    while (size_ > size) {
  ------------------
  |  Branch (685:12): [True: 542k, False: 10.3k]
  ------------------
  686|   542k|      (*this)[--size_].~T();
  687|   542k|    }
  688|  10.3k|    if (size > capacity_) {
  ------------------
  |  Branch (688:9): [True: 0, False: 10.3k]
  ------------------
  689|      0|      resize_buf(size);
  690|      0|    }
  691|  10.3k|    while (size_ < size) {
  ------------------
  |  Branch (691:12): [True: 0, False: 10.3k]
  ------------------
  692|      0|      new(&(*this)[size_++]) T;
  693|      0|    }
  694|  10.3k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEE10resize_bufEm:
  726|  19.8k|void AutoPool<T>::resize_buf(std::size_t size) {
  727|  19.8k|  std::size_t capacity;
  728|  19.8k|  if (size >= capacity_ * 2) {
  ------------------
  |  Branch (728:7): [True: 6.87k, False: 12.9k]
  ------------------
  729|  6.87k|    capacity = size;
  730|  12.9k|  } else {
  731|  12.9k|    capacity = 1;
  732|  67.4k|    while (capacity < size) {
  ------------------
  |  Branch (732:12): [True: 54.4k, False: 12.9k]
  ------------------
  733|  54.4k|      capacity <<= 1;
  734|  54.4k|    }
  735|  12.9k|  }
  736|       |
  737|  19.8k|  AutoArray<char> buf;
  738|  19.8k|  try {
  739|  19.8k|    buf.reset(new char[sizeof(T) * capacity]);
  740|  19.8k|  } catch (const std::bad_alloc &) {
  741|      0|    DARTS_THROW("failed to resize pool: std::bad_alloc");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
  742|      0|  }
  743|       |
  744|  19.8k|  if (size_ > 0) {
  ------------------
  |  Branch (744:7): [True: 16.3k, False: 3.43k]
  ------------------
  745|  16.3k|    T *src = reinterpret_cast<T *>(&buf_[0]);
  746|  16.3k|    T *dest = reinterpret_cast<T *>(&buf[0]);
  747|   801k|    for (std::size_t i = 0; i < size_; ++i) {
  ------------------
  |  Branch (747:29): [True: 785k, False: 16.3k]
  ------------------
  748|   785k|      new(&dest[i]) T(src[i]);
  749|   785k|      src[i].~T();
  750|   785k|    }
  751|  16.3k|  }
  752|       |
  753|  19.8k|  buf_.swap(&buf);
  754|  19.8k|  capacity_ = capacity;
  755|  19.8k|}
_ZN5Darts7Details8AutoPoolIhE5clearEv:
  659|  25.2k|  void clear() {
  660|  25.2k|    resize(0);
  661|  25.2k|    buf_.clear();
  662|  25.2k|    size_ = 0;
  663|  25.2k|    capacity_ = 0;
  664|  25.2k|  }
_ZN5Darts7Details9AutoStackIjE3topEv:
  772|  1.91M|  T &top() {
  773|  1.91M|    return pool_[size() - 1];
  774|  1.91M|  }
_ZNK5Darts7Details9AutoStackIjE4sizeEv:
  779|  1.91M|  std::size_t size() const {
  780|  1.91M|    return pool_.size();
  781|  1.91M|  }
_ZN5Darts7Details9AutoStackIjE3popEv:
  786|   882k|  void pop() {
  787|   882k|    pool_.pop_back();
  788|   882k|  }
_ZN5Darts7Details8AutoPoolIjE8pop_backEv:
  669|   882k|  void pop_back() {
  670|   882k|    (*this)[--size_].~T();
  671|   882k|  }
_ZNK5Darts7Details8AutoPoolINS0_8DawgNodeEEixEm:
  645|  3.12M|  const T &operator[](std::size_t id) const {
  646|  3.12M|    return *(reinterpret_cast<const T *>(&buf_[0]) + id);
  647|  3.12M|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEE6appendEv:
  673|   542k|  void append() {
  674|   542k|    if (size_ == capacity_)
  ------------------
  |  Branch (674:9): [True: 19.8k, False: 522k]
  ------------------
  675|  19.8k|      resize_buf(size_ + 1);
  676|   542k|    new(&(*this)[size_++]) T;
  677|   542k|  }
_ZN5Darts7Details8AutoPoolIhE6appendEv:
  673|   542k|  void append() {
  674|   542k|    if (size_ == capacity_)
  ------------------
  |  Branch (674:9): [True: 19.8k, False: 522k]
  ------------------
  675|  19.8k|      resize_buf(size_ + 1);
  676|   542k|    new(&(*this)[size_++]) T;
  677|   542k|  }
_ZN5Darts7Details8AutoPoolIhE10resize_bufEm:
  726|  31.4k|void AutoPool<T>::resize_buf(std::size_t size) {
  727|  31.4k|  std::size_t capacity;
  728|  31.4k|  if (size >= capacity_ * 2) {
  ------------------
  |  Branch (728:7): [True: 14.6k, False: 16.8k]
  ------------------
  729|  14.6k|    capacity = size;
  730|  16.8k|  } else {
  731|  16.8k|    capacity = 1;
  732|  83.2k|    while (capacity < size) {
  ------------------
  |  Branch (732:12): [True: 66.3k, False: 16.8k]
  ------------------
  733|  66.3k|      capacity <<= 1;
  734|  66.3k|    }
  735|  16.8k|  }
  736|       |
  737|  31.4k|  AutoArray<char> buf;
  738|  31.4k|  try {
  739|  31.4k|    buf.reset(new char[sizeof(T) * capacity]);
  740|  31.4k|  } catch (const std::bad_alloc &) {
  741|      0|    DARTS_THROW("failed to resize pool: std::bad_alloc");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
  742|      0|  }
  743|       |
  744|  31.4k|  if (size_ > 0) {
  ------------------
  |  Branch (744:7): [True: 23.0k, False: 8.40k]
  ------------------
  745|  23.0k|    T *src = reinterpret_cast<T *>(&buf_[0]);
  746|  23.0k|    T *dest = reinterpret_cast<T *>(&buf[0]);
  747|   833k|    for (std::size_t i = 0; i < size_; ++i) {
  ------------------
  |  Branch (747:29): [True: 810k, False: 23.0k]
  ------------------
  748|   810k|      new(&dest[i]) T(src[i]);
  749|   810k|      src[i].~T();
  750|   810k|    }
  751|  23.0k|  }
  752|       |
  753|  31.4k|  buf_.swap(&buf);
  754|  31.4k|  capacity_ = capacity;
  755|  31.4k|}
_ZNK5Darts7Details9AutoStackIjE5emptyEv:
  776|   542k|  bool empty() const {
  777|   542k|    return pool_.empty();
  778|   542k|  }
_ZNK5Darts7Details8AutoPoolINS0_8DawgNodeEE4sizeEv:
  655|   202k|  std::size_t size() const {
  656|   202k|    return size_;
  657|   202k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEE6appendEv:
  673|   202k|  void append() {
  674|   202k|    if (size_ == capacity_)
  ------------------
  |  Branch (674:9): [True: 17.7k, False: 184k]
  ------------------
  675|  17.7k|      resize_buf(size_ + 1);
  676|   202k|    new(&(*this)[size_++]) T;
  677|   202k|  }
_ZNK5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEE4sizeEv:
  655|  4.21M|  std::size_t size() const {
  656|  4.21M|    return size_;
  657|  4.21M|  }
_ZNK5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEEixEm:
  601|  36.8M|  const T &operator[](std::size_t id) const {
  602|  36.8M|    return array_[id];
  603|  36.8M|  }
_ZN5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEEixEm:
  604|  20.0M|  T &operator[](std::size_t id) {
  605|  20.0M|    return array_[id];
  606|  20.0M|  }
_ZNK5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEEixEm:
  645|  1.78M|  const T &operator[](std::size_t id) const {
  646|  1.78M|    return *(reinterpret_cast<const T *>(&buf_[0]) + id);
  647|  1.78M|  }
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEE5clearEv:
  659|  9.94k|  void clear() {
  660|  9.94k|    resize(0);
  661|  9.94k|    buf_.clear();
  662|  9.94k|    size_ = 0;
  663|  9.94k|    capacity_ = 0;
  664|  9.94k|  }
_ZN5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEE5clearEv:
  612|  19.8k|  void clear() {
  613|  19.8k|    if (array_ != NULL) {
  ------------------
  |  Branch (613:9): [True: 4.97k, False: 14.9k]
  ------------------
  614|  4.97k|      delete[] array_;
  615|       |      array_ = NULL;
  616|  4.97k|    }
  617|  19.8k|  }
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEE7reserveEm:
  707|  4.97k|  void reserve(std::size_t size) {
  708|  4.97k|    if (size > capacity_) {
  ------------------
  |  Branch (708:9): [True: 4.97k, False: 0]
  ------------------
  709|  4.97k|      resize_buf(size);
  710|  4.97k|    }
  711|  4.97k|  }
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEE10resize_bufEm:
  726|  9.78k|void AutoPool<T>::resize_buf(std::size_t size) {
  727|  9.78k|  std::size_t capacity;
  728|  9.78k|  if (size >= capacity_ * 2) {
  ------------------
  |  Branch (728:7): [True: 9.69k, False: 90]
  ------------------
  729|  9.69k|    capacity = size;
  730|  9.69k|  } else {
  731|     90|    capacity = 1;
  732|  1.02k|    while (capacity < size) {
  ------------------
  |  Branch (732:12): [True: 936, False: 90]
  ------------------
  733|    936|      capacity <<= 1;
  734|    936|    }
  735|     90|  }
  736|       |
  737|  9.78k|  AutoArray<char> buf;
  738|  9.78k|  try {
  739|  9.78k|    buf.reset(new char[sizeof(T) * capacity]);
  740|  9.78k|  } catch (const std::bad_alloc &) {
  741|      0|    DARTS_THROW("failed to resize pool: std::bad_alloc");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
  742|      0|  }
  743|       |
  744|  9.78k|  if (size_ > 0) {
  ------------------
  |  Branch (744:7): [True: 340, False: 9.44k]
  ------------------
  745|    340|    T *src = reinterpret_cast<T *>(&buf_[0]);
  746|    340|    T *dest = reinterpret_cast<T *>(&buf[0]);
  747|   148k|    for (std::size_t i = 0; i < size_; ++i) {
  ------------------
  |  Branch (747:29): [True: 147k, False: 340]
  ------------------
  748|   147k|      new(&dest[i]) T(src[i]);
  749|   147k|      src[i].~T();
  750|   147k|    }
  751|    340|  }
  752|       |
  753|  9.78k|  buf_.swap(&buf);
  754|  9.78k|  capacity_ = capacity;
  755|  9.78k|}
_ZN5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEE5resetEPS2_:
  623|  4.97k|  void reset(T *array = NULL) {
  624|  4.97k|    AutoArray(array).swap(this);
  625|  4.97k|  }
_ZN5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEE4swapEPS3_:
  618|  4.97k|  void swap(AutoArray *array) {
  619|  4.97k|    T *temp = array_;
  620|  4.97k|    array_ = array->array_;
  621|  4.97k|    array->array_ = temp;
  622|  4.97k|  }
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEEixEm:
  648|  5.99M|  T &operator[](std::size_t id) {
  649|  5.99M|    return *(reinterpret_cast<T *>(&buf_[0]) + id);
  650|  5.99M|  }
_ZN5Darts7Details8AutoPoolIhE6resizeEm:
  684|   617k|  void resize(std::size_t size) {
  685|  1.77M|    while (size_ > size) {
  ------------------
  |  Branch (685:12): [True: 1.16M, False: 617k]
  ------------------
  686|  1.16M|      (*this)[--size_].~T();
  687|  1.16M|    }
  688|   617k|    if (size > capacity_) {
  ------------------
  |  Branch (688:9): [True: 0, False: 617k]
  ------------------
  689|      0|      resize_buf(size);
  690|      0|    }
  691|   617k|    while (size_ < size) {
  ------------------
  |  Branch (691:12): [True: 0, False: 617k]
  ------------------
  692|      0|      new(&(*this)[size_++]) T;
  693|      0|    }
  694|   617k|  }
_ZN5Darts7Details8AutoPoolIhE6appendERKh:
  678|   619k|  void append(const T &value) {
  679|   619k|    if (size_ == capacity_)
  ------------------
  |  Branch (679:9): [True: 11.6k, False: 607k]
  ------------------
  680|  11.6k|      resize_buf(size_ + 1);
  681|   619k|    new(&(*this)[size_++]) T(value);
  682|   619k|  }
_ZNK5Darts7Details8AutoPoolIhE4sizeEv:
  655|  1.88M|  std::size_t size() const {
  656|  1.88M|    return size_;
  657|  1.88M|  }
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEE6resizeEm:
  684|  16.9k|  void resize(std::size_t size) {
  685|  1.80M|    while (size_ > size) {
  ------------------
  |  Branch (685:12): [True: 1.78M, False: 16.9k]
  ------------------
  686|  1.78M|      (*this)[--size_].~T();
  687|  1.78M|    }
  688|  16.9k|    if (size > capacity_) {
  ------------------
  |  Branch (688:9): [True: 4.81k, False: 12.1k]
  ------------------
  689|  4.81k|      resize_buf(size);
  690|  4.81k|    }
  691|  1.80M|    while (size_ < size) {
  ------------------
  |  Branch (691:12): [True: 1.78M, False: 16.9k]
  ------------------
  692|  1.78M|      new(&(*this)[size_++]) T;
  693|  1.78M|    }
  694|  16.9k|  }
_ZN5Darts15DoubleArrayImplIvvivE5clearEv:
  194|  9.94k|  void clear() {
  195|  9.94k|    size_ = 0;
  196|  9.94k|    array_ = NULL;
  197|  9.94k|    if (buf_ != NULL) {
  ------------------
  |  Branch (197:9): [True: 4.97k, False: 4.97k]
  ------------------
  198|  4.97k|      delete[] buf_;
  199|       |      buf_ = NULL;
  200|  4.97k|    }
  201|  9.94k|  }
_ZN5Darts15DoubleArrayImplIvvivEC2Ev:
  139|  4.97k|  DoubleArrayImpl() : size_(0), array_(NULL), buf_(NULL) {}
_ZN5Darts15DoubleArrayImplIvvivED2Ev:
  142|  4.97k|  virtual ~DoubleArrayImpl() {
  143|  4.97k|    clear();
  144|  4.97k|  }
_ZNK5Darts15DoubleArrayImplIvvivE18commonPrefixSearchINS1_16result_pair_typeEEEmPKcPT_mmm:
  509|   255M|    std::size_t length, std::size_t node_pos) const {
  510|   255M|  std::size_t num_results = 0;
  511|       |
  512|   255M|  unit_type unit = array_[node_pos];
  513|   255M|  node_pos ^= unit.offset();
  514|   255M|  if (length != 0) {
  ------------------
  |  Branch (514:7): [True: 255M, False: 0]
  ------------------
  515|   335M|    for (std::size_t i = 0; i < length; ++i) {
  ------------------
  |  Branch (515:29): [True: 335M, False: 30.6k]
  ------------------
  516|   335M|      node_pos ^= static_cast<uchar_type>(key[i]);
  517|   335M|      unit = array_[node_pos];
  518|   335M|      if (unit.label() != static_cast<uchar_type>(key[i])) {
  ------------------
  |  Branch (518:11): [True: 254M, False: 80.2M]
  ------------------
  519|   254M|        return num_results;
  520|   254M|      }
  521|       |
  522|  80.2M|      node_pos ^= unit.offset();
  523|  80.2M|      if (unit.has_leaf()) {
  ------------------
  |  Branch (523:11): [True: 41.5M, False: 38.6M]
  ------------------
  524|  41.5M|        if (num_results < max_num_results) {
  ------------------
  |  Branch (524:13): [True: 41.5M, False: 0]
  ------------------
  525|  41.5M|          set_result(&results[num_results], static_cast<value_type>(
  526|  41.5M|              array_[node_pos].value()), i + 1);
  527|  41.5M|        }
  528|  41.5M|        ++num_results;
  529|  41.5M|      }
  530|  80.2M|    }
  531|   255M|  } else {
  532|      0|    for ( ; key[length] != '\0'; ++length) {
  ------------------
  |  Branch (532:13): [True: 0, False: 0]
  ------------------
  533|      0|      node_pos ^= static_cast<uchar_type>(key[length]);
  534|      0|      unit = array_[node_pos];
  535|      0|      if (unit.label() != static_cast<uchar_type>(key[length])) {
  ------------------
  |  Branch (535:11): [True: 0, False: 0]
  ------------------
  536|      0|        return num_results;
  537|      0|      }
  538|       |
  539|      0|      node_pos ^= unit.offset();
  540|      0|      if (unit.has_leaf()) {
  ------------------
  |  Branch (540:11): [True: 0, False: 0]
  ------------------
  541|      0|        if (num_results < max_num_results) {
  ------------------
  |  Branch (541:13): [True: 0, False: 0]
  ------------------
  542|      0|          set_result(&results[num_results], static_cast<value_type>(
  543|      0|              array_[node_pos].value()), length + 1);
  544|      0|        }
  545|      0|        ++num_results;
  546|      0|      }
  547|      0|    }
  548|      0|  }
  549|       |
  550|  30.6k|  return num_results;
  551|   255M|}
_ZNK5Darts15DoubleArrayImplIvvivE10set_resultEPNS1_16result_pair_typeEim:
  160|  41.5M|      value_type value, std::size_t length) const {
  161|  41.5M|    result->value = value;
  162|  41.5M|    result->length = length;
  163|  41.5M|  }
_ZN5Darts15DoubleArrayImplIvvivE5buildEmPKPKcPKmPKiPFimmE:
 1934|  4.97k|    const value_type *values, Details::progress_func_type progress_func) {
 1935|  4.97k|  Details::Keyset<value_type> keyset(num_keys, keys, lengths, values);
 1936|       |
 1937|  4.97k|  Details::DoubleArrayBuilder builder(progress_func);
 1938|  4.97k|  builder.build(keyset);
 1939|       |
 1940|  4.97k|  std::size_t size = 0;
 1941|  4.97k|  unit_type *buf = NULL;
 1942|  4.97k|  builder.copy(&size, &buf);
 1943|       |
 1944|  4.97k|  clear();
 1945|       |
 1946|  4.97k|  size_ = size;
 1947|  4.97k|  array_ = buf;
 1948|  4.97k|  buf_ = buf;
 1949|       |
 1950|  4.97k|  if (progress_func != NULL) {
  ------------------
  |  Branch (1950:7): [True: 0, False: 4.97k]
  ------------------
 1951|      0|    progress_func(num_keys + 1, num_keys + 1);
 1952|      0|  }
 1953|       |
 1954|  4.97k|  return 0;
 1955|  4.97k|}
_ZN5Darts7Details6KeysetIiEC2EmPKPKcPKmPKi:
  899|  4.97k|      num_keys_(num_keys), keys_(keys), lengths_(lengths), values_(values) {}
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEEC2Ev:
  642|  4.97k|  AutoPool() : buf_(), size_(0), capacity_(0) {}
_ZN5Darts7Details9AutoArrayIcEC2EPc:
  596|   279k|  explicit AutoArray(T *array = NULL) : array_(array) {}
_ZN5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEEC2EPS2_:
  596|  9.94k|  explicit AutoArray(T *array = NULL) : array_(array) {}
_ZN5Darts7Details8AutoPoolIhEC2Ev:
  642|  8.40k|  AutoPool() : buf_(), size_(0), capacity_(0) {}
_ZN5Darts7Details9AutoArrayIjEC2EPj:
  596|  15.2k|  explicit AutoArray(T *array = NULL) : array_(array) {}
_ZN5Darts7Details8AutoPoolIhED2Ev:
  643|  8.40k|  ~AutoPool() { clear(); }
_ZN5Darts7Details9AutoArrayIcED2Ev:
  597|   279k|  ~AutoArray() {
  598|   279k|    clear();
  599|   279k|  }
_ZN5Darts7Details9AutoArrayINS0_27DoubleArrayBuilderExtraUnitEED2Ev:
  597|  9.94k|  ~AutoArray() {
  598|  9.94k|    clear();
  599|  9.94k|  }
_ZN5Darts7Details8AutoPoolINS0_22DoubleArrayBuilderUnitEED2Ev:
  643|  4.97k|  ~AutoPool() { clear(); }
_ZN5Darts7Details18DoubleArrayBuilder5buildIiEEvRKNS0_6KeysetIT_EE:
 1558|  4.97k|void DoubleArrayBuilder::build(const Keyset<T> &keyset) {
 1559|  4.97k|  if (keyset.has_values()) {
  ------------------
  |  Branch (1559:7): [True: 3.43k, False: 1.53k]
  ------------------
 1560|  3.43k|    Details::DawgBuilder dawg_builder;
 1561|  3.43k|    build_dawg(keyset, &dawg_builder);
 1562|  3.43k|    build_from_dawg(dawg_builder);
 1563|  3.43k|    dawg_builder.clear();
 1564|  3.43k|  } else {
 1565|  1.53k|    build_from_keyset(keyset);
 1566|  1.53k|  }
 1567|  4.97k|}
_ZNK5Darts7Details6KeysetIiE10has_valuesEv:
  927|  41.6k|  bool has_values() const {
  928|       |    return values_ != NULL;
  929|  41.6k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEEC2Ev:
  642|  3.43k|  AutoPool() : buf_(), size_(0), capacity_(0) {}
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEEC2Ev:
  642|  3.43k|  AutoPool() : buf_(), size_(0), capacity_(0) {}
_ZN5Darts7Details8AutoPoolIjEC2Ev:
  642|  13.7k|  AutoPool() : buf_(), size_(0), capacity_(0) {}
_ZN5Darts7Details9AutoStackIjEC2Ev:
  764|  6.87k|  AutoStack() : pool_() {}
_ZN5Darts7Details9AutoStackIjED2Ev:
  765|  6.87k|  ~AutoStack() {
  766|  6.87k|    clear();
  767|  6.87k|  }
_ZN5Darts7Details8AutoPoolIjED2Ev:
  643|  13.7k|  ~AutoPool() { clear(); }
_ZN5Darts7Details9AutoArrayIjED2Ev:
  597|  15.2k|  ~AutoArray() {
  598|  15.2k|    clear();
  599|  15.2k|  }
_ZN5Darts7Details8AutoPoolINS0_8DawgUnitEED2Ev:
  643|  3.43k|  ~AutoPool() { clear(); }
_ZN5Darts7Details8AutoPoolINS0_8DawgNodeEED2Ev:
  643|  3.43k|  ~AutoPool() { clear(); }
_ZN5Darts7Details18DoubleArrayBuilder10build_dawgIiEEvRKNS0_6KeysetIT_EEPNS0_11DawgBuilderE:
 1593|  3.43k|    DawgBuilder *dawg_builder) {
 1594|  3.43k|  dawg_builder->init();
 1595|  31.5k|  for (std::size_t i = 0; i < keyset.num_keys(); ++i) {
  ------------------
  |  Branch (1595:27): [True: 28.1k, False: 3.43k]
  ------------------
 1596|  28.1k|    dawg_builder->insert(keyset.keys(i), keyset.lengths(i), keyset.values(i));
 1597|  28.1k|    if (progress_func_ != NULL) {
  ------------------
  |  Branch (1597:9): [True: 0, False: 28.1k]
  ------------------
 1598|      0|      progress_func_(i + 1, keyset.num_keys() + 1);
 1599|      0|    }
 1600|  28.1k|  }
 1601|  3.43k|  dawg_builder->finish();
 1602|  3.43k|}
_ZNK5Darts7Details6KeysetIiE8num_keysEv:
  901|  37.4k|  std::size_t num_keys() const {
  902|  37.4k|    return num_keys_;
  903|  37.4k|  }
_ZNK5Darts7Details6KeysetIiE4keysEm:
  904|  28.1k|  const char_type *keys(std::size_t id) const {
  905|  28.1k|    return keys_[id];
  906|  28.1k|  }
_ZNK5Darts7Details6KeysetIiE7lengthsEm:
  916|  32.4k|  std::size_t lengths(std::size_t id) const {
  917|  32.4k|    if (has_lengths()) {
  ------------------
  |  Branch (917:9): [True: 32.4k, False: 0]
  ------------------
  918|  32.4k|      return lengths_[id];
  919|  32.4k|    }
  920|      0|    std::size_t length = 0;
  921|      0|    while (keys_[id][length] != '\0') {
  ------------------
  |  Branch (921:12): [True: 0, False: 0]
  ------------------
  922|      0|      ++length;
  923|      0|    }
  924|      0|    return length;
  925|  32.4k|  }
_ZNK5Darts7Details6KeysetIiE11has_lengthsEv:
  913|   286k|  bool has_lengths() const {
  914|       |    return lengths_ != NULL;
  915|   286k|  }
_ZNK5Darts7Details6KeysetIiE6valuesEm:
  930|  36.7k|  const value_type values(std::size_t id) const {
  931|  36.7k|    if (has_values()) {
  ------------------
  |  Branch (931:9): [True: 28.1k, False: 8.59k]
  ------------------
  932|  28.1k|      return static_cast<value_type>(values_[id]);
  933|  28.1k|    }
  934|  8.59k|    return static_cast<value_type>(id);
  935|  36.7k|  }
_ZN5Darts7Details18DoubleArrayBuilder17build_from_keysetIiEEvRKNS0_6KeysetIT_EE:
 1700|  1.53k|void DoubleArrayBuilder::build_from_keyset(const Keyset<T> &keyset) {
 1701|  1.53k|  std::size_t num_units = 1;
 1702|  2.84k|  while (num_units < keyset.num_keys()) {
  ------------------
  |  Branch (1702:10): [True: 1.31k, False: 1.53k]
  ------------------
 1703|  1.31k|    num_units <<= 1;
 1704|  1.31k|  }
 1705|  1.53k|  units_.reserve(num_units);
 1706|       |
 1707|  1.53k|  extras_.reset(new extra_type[NUM_EXTRAS]);
 1708|       |
 1709|  1.53k|  reserve_id(0);
 1710|  1.53k|  extras(0).set_is_used(true);
 1711|  1.53k|  units_[0].set_offset(1);
 1712|  1.53k|  units_[0].set_label('\0');
 1713|       |
 1714|  1.53k|  if (keyset.num_keys() > 0) {
  ------------------
  |  Branch (1714:7): [True: 1.53k, False: 0]
  ------------------
 1715|  1.53k|    build_from_keyset(keyset, 0, keyset.num_keys(), 0, 0);
 1716|  1.53k|  }
 1717|       |
 1718|  1.53k|  fix_all_blocks();
 1719|       |
 1720|  1.53k|  extras_.clear();
 1721|  1.53k|  labels_.clear();
 1722|  1.53k|}
_ZN5Darts7Details18DoubleArrayBuilder17build_from_keysetIiEEvRKNS0_6KeysetIT_EEmmmj:
 1726|  77.7k|    std::size_t begin, std::size_t end, std::size_t depth, id_type dic_id) {
 1727|  77.7k|  id_type offset = arrange_from_keyset(keyset, begin, end, depth, dic_id);
 1728|       |
 1729|  82.0k|  while (begin < end) {
  ------------------
  |  Branch (1729:10): [True: 77.9k, False: 4.07k]
  ------------------
 1730|  77.9k|    if (keyset.keys(begin, depth) != '\0') {
  ------------------
  |  Branch (1730:9): [True: 73.6k, False: 4.29k]
  ------------------
 1731|  73.6k|      break;
 1732|  73.6k|    }
 1733|  4.29k|    ++begin;
 1734|  4.29k|  }
 1735|  77.7k|  if (begin == end) {
  ------------------
  |  Branch (1735:7): [True: 4.07k, False: 73.6k]
  ------------------
 1736|  4.07k|    return;
 1737|  4.07k|  }
 1738|       |
 1739|  73.6k|  std::size_t last_begin = begin;
 1740|  73.6k|  uchar_type last_label = keyset.keys(begin, depth);
 1741|  82.3k|  while (++begin < end) {
  ------------------
  |  Branch (1741:10): [True: 8.72k, False: 73.6k]
  ------------------
 1742|  8.72k|    uchar_type label = keyset.keys(begin, depth);
 1743|  8.72k|    if (label != last_label) {
  ------------------
  |  Branch (1743:9): [True: 2.54k, False: 6.18k]
  ------------------
 1744|  2.54k|      build_from_keyset(keyset, last_begin, begin,
 1745|  2.54k|          depth + 1, offset ^ last_label);
 1746|  2.54k|      last_begin = begin;
 1747|  2.54k|      last_label = keyset.keys(begin, depth);
 1748|  2.54k|    }
 1749|  8.72k|  }
 1750|  73.6k|  build_from_keyset(keyset, last_begin, end, depth + 1, offset ^ last_label);
 1751|  73.6k|}
_ZN5Darts7Details18DoubleArrayBuilder19arrange_from_keysetIiEEjRKNS0_6KeysetIT_EEmmmj:
 1755|  77.7k|    std::size_t begin, std::size_t end, std::size_t depth, id_type dic_id) {
 1756|  77.7k|  labels_.resize(0);
 1757|       |
 1758|  77.7k|  value_type value = -1;
 1759|   164k|  for (std::size_t i = begin; i < end; ++i) {
  ------------------
  |  Branch (1759:31): [True: 86.6k, False: 77.7k]
  ------------------
 1760|  86.6k|    uchar_type label = keyset.keys(i, depth);
 1761|  86.6k|    if (label == '\0') {
  ------------------
  |  Branch (1761:9): [True: 4.29k, False: 82.3k]
  ------------------
 1762|  4.29k|      if (keyset.has_lengths() && depth < keyset.lengths(i)) {
  ------------------
  |  Branch (1762:11): [True: 4.29k, False: 0]
  |  Branch (1762:35): [True: 0, False: 4.29k]
  ------------------
 1763|      0|        DARTS_THROW("failed to build double-array: "
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1764|      0|            "invalid null character");
 1765|  4.29k|      } else if (keyset.values(i) < 0) {
  ------------------
  |  Branch (1765:18): [True: 0, False: 4.29k]
  ------------------
 1766|      0|        DARTS_THROW("failed to build double-array: negative value");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1767|      0|      }
 1768|       |
 1769|  4.29k|      if (value == -1) {
  ------------------
  |  Branch (1769:11): [True: 4.29k, False: 0]
  ------------------
 1770|  4.29k|        value = keyset.values(i);
 1771|  4.29k|      }
 1772|  4.29k|      if (progress_func_ != NULL) {
  ------------------
  |  Branch (1772:11): [True: 0, False: 4.29k]
  ------------------
 1773|      0|        progress_func_(i + 1, keyset.num_keys() + 1);
 1774|      0|      }
 1775|  4.29k|    }
 1776|       |
 1777|  86.6k|    if (labels_.empty()) {
  ------------------
  |  Branch (1777:9): [True: 77.7k, False: 8.94k]
  ------------------
 1778|  77.7k|      labels_.append(label);
 1779|  77.7k|    } else if (label != labels_[labels_.size() - 1]) {
  ------------------
  |  Branch (1779:16): [True: 2.76k, False: 6.18k]
  ------------------
 1780|  2.76k|      if (label < labels_[labels_.size() - 1]) {
  ------------------
  |  Branch (1780:11): [True: 0, False: 2.76k]
  ------------------
 1781|      0|        DARTS_THROW("failed to build double-array: wrong key order");
  ------------------
  |  |   19|      0|#define DARTS_THROW(msg) throw Darts::Details::Exception( \
  |  |   20|       |  __FILE__ ":" DARTS_LINE_STR ": exception: " msg)
  ------------------
 1782|      0|      }
 1783|  2.76k|      labels_.append(label);
 1784|  2.76k|    }
 1785|  86.6k|  }
 1786|       |
 1787|  77.7k|  id_type offset = find_valid_offset(dic_id);
 1788|  77.7k|  units_[dic_id].set_offset(dic_id ^ offset);
 1789|       |
 1790|   158k|  for (std::size_t i = 0; i < labels_.size(); ++i) {
  ------------------
  |  Branch (1790:27): [True: 80.5k, False: 77.7k]
  ------------------
 1791|  80.5k|    id_type dic_child_id = offset ^ labels_[i];
 1792|  80.5k|    reserve_id(dic_child_id);
 1793|  80.5k|    if (labels_[i] == '\0') {
  ------------------
  |  Branch (1793:9): [True: 4.29k, False: 76.2k]
  ------------------
 1794|  4.29k|      units_[dic_id].set_has_leaf(true);
 1795|  4.29k|      units_[dic_child_id].set_value(value);
 1796|  76.2k|    } else {
 1797|  76.2k|      units_[dic_child_id].set_label(labels_[i]);
 1798|  76.2k|    }
 1799|  80.5k|  }
 1800|  77.7k|  extras(offset).set_is_used(true);
 1801|       |
 1802|  77.7k|  return offset;
 1803|  77.7k|}
_ZNK5Darts7Details8AutoPoolIhE5emptyEv:
  652|  86.6k|  bool empty() const {
  653|  86.6k|    return size_ == 0;
  654|  86.6k|  }
_ZNK5Darts7Details6KeysetIiE4keysEmm:
  907|   249k|  uchar_type keys(std::size_t key_id, std::size_t char_id) const {
  908|   249k|    if (has_lengths() && char_id >= lengths_[key_id])
  ------------------
  |  Branch (908:9): [True: 249k, False: 0]
  |  Branch (908:26): [True: 8.59k, False: 240k]
  ------------------
  909|  8.59k|      return '\0';
  910|   240k|    return keys_[key_id][char_id];
  911|   249k|  }
_ZNK5Darts15DoubleArrayImplIvvivE16exactMatchSearchIiEEvPKcRT_mm:
  273|  3.77M|      std::size_t length = 0, std::size_t node_pos = 0) const {
  274|  3.77M|    result = exactMatchSearch<U>(key, length, node_pos);
  275|  3.77M|  }
_ZNK5Darts15DoubleArrayImplIvvivE16exactMatchSearchIiEET_PKcmm:
  474|  3.77M|    std::size_t length, std::size_t node_pos) const {
  475|  3.77M|  U result;
  476|  3.77M|  set_result(&result, static_cast<value_type>(-1), 0);
  477|       |
  478|  3.77M|  unit_type unit = array_[node_pos];
  479|  3.77M|  if (length != 0) {
  ------------------
  |  Branch (479:7): [True: 3.77M, False: 0]
  ------------------
  480|  13.4M|    for (std::size_t i = 0; i < length; ++i) {
  ------------------
  |  Branch (480:29): [True: 9.95M, False: 3.53M]
  ------------------
  481|  9.95M|      node_pos ^= unit.offset() ^ static_cast<uchar_type>(key[i]);
  482|  9.95M|      unit = array_[node_pos];
  483|  9.95M|      if (unit.label() != static_cast<uchar_type>(key[i])) {
  ------------------
  |  Branch (483:11): [True: 232k, False: 9.71M]
  ------------------
  484|   232k|        return result;
  485|   232k|      }
  486|  9.95M|    }
  487|  3.77M|  } else {
  488|      0|    for ( ; key[length] != '\0'; ++length) {
  ------------------
  |  Branch (488:13): [True: 0, False: 0]
  ------------------
  489|      0|      node_pos ^= unit.offset() ^ static_cast<uchar_type>(key[length]);
  490|      0|      unit = array_[node_pos];
  491|      0|      if (unit.label() != static_cast<uchar_type>(key[length])) {
  ------------------
  |  Branch (491:11): [True: 0, False: 0]
  ------------------
  492|      0|        return result;
  493|      0|      }
  494|      0|    }
  495|      0|  }
  496|       |
  497|  3.53M|  if (!unit.has_leaf()) {
  ------------------
  |  Branch (497:7): [True: 4.35k, False: 3.53M]
  ------------------
  498|  4.35k|    return result;
  499|  4.35k|  }
  500|  3.53M|  unit = array_[node_pos ^ unit.offset()];
  501|  3.53M|  set_result(&result, static_cast<value_type>(unit.value()), length);
  502|  3.53M|  return result;
  503|  3.53M|}
_ZNK5Darts15DoubleArrayImplIvvivE10set_resultEPiim:
  155|  7.30M|  void set_result(value_type *result, value_type value, std::size_t) const {
  156|  7.30M|    *result = value;
  157|  7.30M|  }
_ZNK5Darts15DoubleArrayImplIvvivE8traverseEPKcRmS4_m:
  556|   195M|    std::size_t &node_pos, std::size_t &key_pos, std::size_t length) const {
  557|   195M|  id_type id = static_cast<id_type>(node_pos);
  558|   195M|  unit_type unit = array_[id];
  559|       |
  560|   195M|  if (length != 0) {
  ------------------
  |  Branch (560:7): [True: 195M, False: 0]
  ------------------
  561|   248M|    for ( ; key_pos < length; ++key_pos) {
  ------------------
  |  Branch (561:13): [True: 195M, False: 53.5M]
  ------------------
  562|   195M|      id ^= unit.offset() ^ static_cast<uchar_type>(key[key_pos]);
  563|   195M|      unit = array_[id];
  564|   195M|      if (unit.label() != static_cast<uchar_type>(key[key_pos])) {
  ------------------
  |  Branch (564:11): [True: 141M, False: 53.5M]
  ------------------
  565|   141M|        return static_cast<value_type>(-2);
  566|   141M|      }
  567|  53.5M|      node_pos = id;
  568|  53.5M|    }
  569|   195M|  } else {
  570|      0|    for ( ; key[key_pos] != '\0'; ++key_pos) {
  ------------------
  |  Branch (570:13): [True: 0, False: 0]
  ------------------
  571|      0|      id ^= unit.offset() ^ static_cast<uchar_type>(key[key_pos]);
  572|      0|      unit = array_[id];
  573|      0|      if (unit.label() != static_cast<uchar_type>(key[key_pos])) {
  ------------------
  |  Branch (573:11): [True: 0, False: 0]
  ------------------
  574|      0|        return static_cast<value_type>(-2);
  575|      0|      }
  576|      0|      node_pos = id;
  577|      0|    }
  578|      0|  }
  579|       |
  580|  53.5M|  if (!unit.has_leaf()) {
  ------------------
  |  Branch (580:7): [True: 23.7M, False: 29.7M]
  ------------------
  581|  23.7M|    return static_cast<value_type>(-1);
  582|  23.7M|  }
  583|  29.7M|  unit = array_[id ^ unit.offset()];
  584|  29.7M|  return static_cast<value_type>(unit.value());
  585|  53.5M|}

