_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12is_discardedEv:
42155|  14.9k|    {
42156|  14.9k|        return m_data.m_type == value_t::discarded;
42157|  14.9k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dumpEicbNS0_6detail15error_handler_tE:
42027|  83.0k|    {
42028|  83.0k|        string_t result;
42029|  83.0k|        detail::output_string_adapter<char, string_t> string_adapter(result);
42030|       |
42031|  83.0k|        if (indent >= 0)
  ------------------
  |  Branch (42031:13): [True: 0, False: 83.0k]
  ------------------
42032|      0|        {
42033|      0|            serializer s(string_adapter, indent_char,
42034|      0|                         true, ensure_ascii, static_cast<std::size_t>(indent), error_handler);
42035|      0|            s.dump(*this);
42036|      0|        }
42037|  83.0k|        else
42038|  83.0k|        {
42039|  83.0k|            serializer s(string_adapter, indent_char,
42040|  83.0k|                         false, ensure_ascii, 0, error_handler);
42041|  83.0k|            s.dump(*this);
42042|  83.0k|        }
42043|       |
42044|  83.0k|        return result;
42045|  83.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail21output_string_adapterIcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEC2ERS9_:
29216|  83.0k|        : str(s)
29217|  83.0k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail23output_adapter_protocolIcEC2Ev:
28874|  83.0k|    output_adapter_protocol() = default;
_ZN8nlohmann16json_abi_v3_12_06detail23output_adapter_protocolIcED2Ev:
28872|  83.0k|    virtual ~output_adapter_protocol() = default;
_ZN8nlohmann16json_abi_v3_12_06detail21output_string_adapterIcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE16write_charactersEPKcm:
29225|  86.5k|    {
29226|  86.5k|        str.append(s, length);
29227|  86.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEC2ERNS1_23output_adapter_protocolIcEEcbbmNS1_15error_handler_tE:
36767|  83.0k|        : o(&s)
36768|  83.0k|        , number_buffer() // NOLINT(readability-redundant-member-init)
36769|  83.0k|        , string_buffer() // NOLINT(readability-redundant-member-init)
36770|  83.0k|        , indent_char(ichar)
36771|  83.0k|        , pretty_print(pretty_print_)
36772|  83.0k|        , ensure_ascii(ensure_ascii_)
36773|  83.0k|        , indent_step(indent_step_)
36774|  83.0k|        , error_handler(error_handler_)
36775|  83.0k|        , write_buffer() // NOLINT(readability-redundant-member-init)
36776|  83.0k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE20uninitialized_bufferILm64EEC2Ev:
38864|  83.0k|        uninitialized_buffer() noexcept {} // NOLINT(modernize-use-equals-default,hicpp-use-equals-default,cppcoreguidelines-pro-type-member-init,hicpp-member-init): see above
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE20uninitialized_bufferILm512EEC2Ev:
38864|  83.0k|        uninitialized_buffer() noexcept {} // NOLINT(modernize-use-equals-default,hicpp-use-equals-default,cppcoreguidelines-pro-type-member-init,hicpp-member-init): see above
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE20uninitialized_bufferILm1024EEC2Ev:
38864|  83.0k|        uninitialized_buffer() noexcept {} // NOLINT(modernize-use-equals-default,hicpp-use-equals-default,cppcoreguidelines-pro-type-member-init,hicpp-member-init): see above
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE4dumpERKSG_m:
36805|  83.0k|    {
36806|  83.0k|        dump_element(val, current_indent, 0);
36807|  83.0k|        flush();
36808|  83.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_elementERKSG_mm:
36956|  1.59M|    {
36957|  1.59M|        if (val.m_data.m_type == value_t::object || val.m_data.m_type == value_t::array)
  ------------------
  |  Branch (36957:13): [True: 120k, False: 1.47M]
  |  Branch (36957:53): [True: 484k, False: 992k]
  ------------------
36958|   605k|        {
36959|   605k|            dump_container(val, current_indent, depth);
36960|   605k|        }
36961|   992k|        else
36962|   992k|        {
36963|   992k|            dump_scalar(val, current_indent);
36964|   992k|        }
36965|  1.59M|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE14dump_containerERKSG_mm:
36831|   605k|    {
36832|   605k|        JSON_ASSERT(val.m_data.m_type == value_t::object || val.m_data.m_type == value_t::array);
  ------------------
  |  | 2643|   605k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36832:9): [True: 120k, False: 484k]
  |  Branch (36832:9): [True: 484k, False: 0]
  |  Branch (36832:9): [True: 605k, False: 0]
  ------------------
36833|       |
36834|   605k|        if (JSON_HEDLEY_UNLIKELY(depth >= recursion_depth_limit()))
  ------------------
  |  | 1697|   605k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 8.14k, False: 596k]
  |  |  ------------------
  ------------------
36835|  8.14k|        {
36836|  8.14k|            dump_iteratively(val, current_indent);
36837|  8.14k|            return;
36838|  8.14k|        }
36839|       |
36840|   596k|        if (val.m_data.m_type == value_t::object)
  ------------------
  |  Branch (36840:13): [True: 115k, False: 481k]
  ------------------
36841|   115k|        {
36842|   115k|            if (val.m_data.m_value.object->empty())
  ------------------
  |  Branch (36842:17): [True: 25.7k, False: 89.4k]
  ------------------
36843|  25.7k|            {
36844|  25.7k|                put_literal("{}");
36845|  25.7k|                return;
36846|  25.7k|            }
36847|       |
36848|  89.4k|            if (pretty_print)
  ------------------
  |  Branch (36848:17): [True: 0, False: 89.4k]
  ------------------
36849|      0|            {
36850|       |                // variable to hold indentation for recursive calls
36851|      0|                const auto new_indent = next_indent(current_indent, indent_step);
36852|       |
36853|      0|                put_literal_indent("{\n", new_indent);
36854|       |
36855|       |                // first n-1 elements
36856|      0|                auto i = val.m_data.m_value.object->cbegin();
36857|      0|                for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
  ------------------
  |  Branch (36857:43): [True: 0, False: 0]
  ------------------
36858|      0|                {
36859|      0|                    put_object_key(i->first, "\": ");
36860|      0|                    dump_element(i->second, new_indent, depth + 1);
36861|      0|                    put_literal_indent(",\n", new_indent);
36862|      0|                }
36863|       |
36864|       |                // last element
36865|      0|                JSON_ASSERT(i != val.m_data.m_value.object->cend());
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36865:17): [True: 0, False: 0]
  ------------------
36866|      0|                JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36866:17): [True: 0, False: 0]
  ------------------
36867|      0|                put_object_key(i->first, "\": ");
36868|      0|                dump_element(i->second, new_indent, depth + 1);
36869|       |
36870|      0|                put_literal_indent("\n", current_indent);
36871|      0|                put_char('}');
36872|      0|            }
36873|  89.4k|            else
36874|  89.4k|            {
36875|  89.4k|                put_char('{');
36876|       |
36877|       |                // first n-1 elements
36878|  89.4k|                auto i = val.m_data.m_value.object->cbegin();
36879|   206k|                for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
  ------------------
  |  Branch (36879:43): [True: 117k, False: 89.4k]
  ------------------
36880|   117k|                {
36881|   117k|                    put_object_key(i->first, "\":");
36882|   117k|                    dump_element(i->second, 0, depth + 1);
36883|   117k|                    put_char(',');
36884|   117k|                }
36885|       |
36886|       |                // last element
36887|  89.4k|                JSON_ASSERT(i != val.m_data.m_value.object->cend());
  ------------------
  |  | 2643|  89.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36887:17): [True: 89.3k, False: 61]
  ------------------
36888|  89.3k|                JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
  ------------------
  |  | 2643|  89.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36888:17): [True: 89.3k, False: 0]
  ------------------
36889|  89.3k|                put_object_key(i->first, "\":");
36890|  89.3k|                dump_element(i->second, 0, depth + 1);
36891|       |
36892|  89.3k|                put_char('}');
36893|  89.3k|            }
36894|  89.3k|            return;
36895|  89.4k|        }
36896|       |
36897|   481k|        if (val.m_data.m_value.array->empty())
  ------------------
  |  Branch (36897:13): [True: 19.9k, False: 461k]
  ------------------
36898|  19.9k|        {
36899|  19.9k|            put_literal("[]");
36900|  19.9k|            return;
36901|  19.9k|        }
36902|       |
36903|   461k|        if (pretty_print)
  ------------------
  |  Branch (36903:13): [True: 0, False: 461k]
  ------------------
36904|      0|        {
36905|       |            // variable to hold indentation for recursive calls
36906|      0|            const auto new_indent = next_indent(current_indent, indent_step);
36907|       |
36908|      0|            put_literal_indent("[\n", new_indent);
36909|       |
36910|       |            // first n-1 elements
36911|      0|            for (auto i = val.m_data.m_value.array->cbegin();
36912|      0|                    i != val.m_data.m_value.array->cend() - 1; ++i)
  ------------------
  |  Branch (36912:21): [True: 0, False: 0]
  ------------------
36913|      0|            {
36914|      0|                dump_element(*i, new_indent, depth + 1);
36915|      0|                put_literal_indent(",\n", new_indent);
36916|      0|            }
36917|       |
36918|       |            // last element
36919|      0|            JSON_ASSERT(!val.m_data.m_value.array->empty());
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36919:13): [True: 0, False: 0]
  ------------------
36920|      0|            dump_element(val.m_data.m_value.array->back(), new_indent, depth + 1);
36921|       |
36922|      0|            put_literal_indent("\n", current_indent);
36923|      0|            put_char(']');
36924|      0|        }
36925|   461k|        else
36926|   461k|        {
36927|   461k|            put_char('[');
36928|       |
36929|       |            // first n-1 elements
36930|   461k|            for (auto i = val.m_data.m_value.array->cbegin();
36931|  1.30M|                    i != val.m_data.m_value.array->cend() - 1; ++i)
  ------------------
  |  Branch (36931:21): [True: 846k, False: 461k]
  ------------------
36932|   846k|            {
36933|   846k|                dump_element(*i, 0, depth + 1);
36934|   846k|                put_char(',');
36935|   846k|            }
36936|       |
36937|       |            // last element
36938|   461k|            JSON_ASSERT(!val.m_data.m_value.array->empty());
  ------------------
  |  | 2643|   461k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36938:13): [True: 461k, False: 506]
  ------------------
36939|   461k|            dump_element(val.m_data.m_value.array->back(), 0, depth + 1);
36940|       |
36941|   461k|            put_char(']');
36942|   461k|        }
36943|   461k|    }
_ZN8nlohmann16json_abi_v3_12_06detail21recursion_depth_limitEv:
 8688|  1.97M|{
 8689|       |    // an integer: not a floating-point number, whose range check would pass for 1.5 or 254.0
 8690|       |    // (bool and the character types are integer types, too, but true, false or 'a' are
 8691|       |    // no way to say a limit; JSON_UBJSON_VALUELESS_ELEMENTS_PER_BYTE refuses them as well)
 8692|  1.97M|    static_assert(std::is_integral<decltype(JSON_RECURSION_DEPTH_LIMIT)>::value
 8693|  1.97M|                  && !recursion_depth_limit_is_char_or_bool<typename std::remove_cv<decltype(JSON_RECURSION_DEPTH_LIMIT)>::type>::value,
 8694|  1.97M|                  "JSON_RECURSION_DEPTH_LIMIT must be an integer constant (not bool or a character type)");
 8695|  1.97M|    static_assert(JSON_RECURSION_DEPTH_LIMIT >= 0 && JSON_RECURSION_DEPTH_LIMIT <= 254,
 8696|  1.97M|                  "JSON_RECURSION_DEPTH_LIMIT must be between 0 and 254: the nesting depth is counted in a byte per thread "
 8697|  1.97M|                  "and may exceed the limit by one (see https://json.nlohmann.me/api/macros/json_recursion_depth_limit/)");
 8698|  1.97M|    return static_cast<std::size_t>(JSON_RECURSION_DEPTH_LIMIT);
  ------------------
  |  | 8623|  1.97M|    #define JSON_RECURSION_DEPTH_LIMIT 128
  ------------------
 8699|  1.97M|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE16dump_iterativelyERKSG_m:
36978|  8.14k|    {
36979|       |        // Scalars, empty containers and binary values are written by dump_value
36980|       |        // alone, so nothing is allocated for them: only a container with
36981|       |        // elements is ever pushed.
36982|  8.14k|        std::vector<dump_frame> stack;
36983|       |
36984|  8.14k|        dump_value(val, current_indent, stack);
36985|       |
36986|  45.4k|        while (!stack.empty())
  ------------------
  |  Branch (36986:16): [True: 37.3k, False: 8.14k]
  ------------------
36987|  37.3k|        {
36988|  37.3k|            dump_frame& frame = stack.back();
36989|       |
36990|  37.3k|            if (frame.value->m_data.m_type == value_t::object)
  ------------------
  |  Branch (36990:17): [True: 11.0k, False: 26.2k]
  ------------------
36991|  11.0k|            {
36992|  11.0k|                const auto* object = frame.value->m_data.m_value.object;
36993|       |
36994|  11.0k|                if (frame.object_it == object->cend())
  ------------------
  |  Branch (36994:21): [True: 3.84k, False: 7.24k]
  ------------------
36995|  3.84k|                {
36996|  3.84k|                    if (pretty_print)
  ------------------
  |  Branch (36996:25): [True: 0, False: 3.84k]
  ------------------
36997|      0|                    {
36998|      0|                        put_literal_indent("\n", frame.current_indent);
36999|      0|                    }
37000|       |
37001|  3.84k|                    put_char('}');
37002|  3.84k|                    stack.pop_back();
37003|  3.84k|                    continue;
37004|  3.84k|                }
37005|       |
37006|       |                // the separator goes in front of every element but the first,
37007|       |                // which puts exactly one between each pair and none at the end
37008|  7.24k|                if (frame.object_it != object->cbegin())
  ------------------
  |  Branch (37008:21): [True: 3.35k, False: 3.89k]
  ------------------
37009|  3.35k|                {
37010|  3.35k|                    if (pretty_print)
  ------------------
  |  Branch (37010:25): [True: 0, False: 3.35k]
  ------------------
37011|      0|                    {
37012|      0|                        put_literal(",\n");
37013|      0|                    }
37014|  3.35k|                    else
37015|  3.35k|                    {
37016|  3.35k|                        put_char(',');
37017|  3.35k|                    }
37018|  3.35k|                }
37019|       |
37020|  7.24k|                if (pretty_print)
  ------------------
  |  Branch (37020:21): [True: 0, False: 7.24k]
  ------------------
37021|      0|                {
37022|      0|                    put_indent(frame.child_indent);
37023|      0|                }
37024|       |
37025|  7.24k|                if (pretty_print)
  ------------------
  |  Branch (37025:21): [True: 0, False: 7.24k]
  ------------------
37026|      0|                {
37027|      0|                    put_object_key(frame.object_it->first, "\": ");
37028|      0|                }
37029|  7.24k|                else
37030|  7.24k|                {
37031|  7.24k|                    put_object_key(frame.object_it->first, "\":");
37032|  7.24k|                }
37033|       |
37034|  7.24k|                const BasicJsonType& element = frame.object_it->second;
37035|  7.24k|                ++frame.object_it;
37036|       |
37037|       |                // read everything needed from the frame before this: entering a
37038|       |                // container pushes another one and can move them all
37039|  7.24k|                const std::size_t element_indent = frame.child_indent;
37040|  7.24k|                dump_value(element, element_indent, stack);
37041|  7.24k|            }
37042|  26.2k|            else
37043|  26.2k|            {
37044|  26.2k|                const auto* array = frame.value->m_data.m_value.array;
37045|       |
37046|  26.2k|                if (frame.array_it == array->cend())
  ------------------
  |  Branch (37046:21): [True: 8.20k, False: 18.0k]
  ------------------
37047|  8.20k|                {
37048|  8.20k|                    if (pretty_print)
  ------------------
  |  Branch (37048:25): [True: 0, False: 8.20k]
  ------------------
37049|      0|                    {
37050|      0|                        put_literal_indent("\n", frame.current_indent);
37051|      0|                    }
37052|       |
37053|  8.20k|                    put_char(']');
37054|  8.20k|                    stack.pop_back();
37055|  8.20k|                    continue;
37056|  8.20k|                }
37057|       |
37058|  18.0k|                if (frame.array_it != array->cbegin())
  ------------------
  |  Branch (37058:21): [True: 9.73k, False: 8.26k]
  ------------------
37059|  9.73k|                {
37060|  9.73k|                    if (pretty_print)
  ------------------
  |  Branch (37060:25): [True: 0, False: 9.73k]
  ------------------
37061|      0|                    {
37062|      0|                        put_literal(",\n");
37063|      0|                    }
37064|  9.73k|                    else
37065|  9.73k|                    {
37066|  9.73k|                        put_char(',');
37067|  9.73k|                    }
37068|  9.73k|                }
37069|       |
37070|  18.0k|                if (pretty_print)
  ------------------
  |  Branch (37070:21): [True: 0, False: 18.0k]
  ------------------
37071|      0|                {
37072|      0|                    put_indent(frame.child_indent);
37073|      0|                }
37074|       |
37075|  18.0k|                const BasicJsonType& element = *frame.array_it;
37076|  18.0k|                ++frame.array_it;
37077|       |
37078|       |                // see above
37079|  18.0k|                const std::size_t element_indent = frame.child_indent;
37080|  18.0k|                dump_value(element, element_indent, stack);
37081|  18.0k|            }
37082|  37.3k|        }
37083|  8.14k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_valueERKSG_mRNS6_INSH_10dump_frameENSA_ISK_EEEE:
37121|  33.3k|    {
37122|  33.3k|        switch (val.m_data.m_type)
37123|  33.3k|        {
37124|  6.84k|            case value_t::object:
  ------------------
  |  Branch (37124:13): [True: 6.84k, False: 26.5k]
  ------------------
37125|  6.84k|            {
37126|  6.84k|                if (val.m_data.m_value.object->empty())
  ------------------
  |  Branch (37126:21): [True: 2.94k, False: 3.89k]
  ------------------
37127|  2.94k|                {
37128|  2.94k|                    put_literal("{}");
37129|  2.94k|                    return;
37130|  2.94k|                }
37131|       |
37132|  3.89k|                std::size_t child_indent = current_indent;
37133|       |
37134|  3.89k|                if (pretty_print)
  ------------------
  |  Branch (37134:21): [True: 0, False: 3.89k]
  ------------------
37135|      0|                {
37136|      0|                    put_literal("{\n");
37137|      0|                    child_indent = next_indent(current_indent, indent_step);
37138|      0|                }
37139|  3.89k|                else
37140|  3.89k|                {
37141|  3.89k|                    put_char('{');
37142|  3.89k|                }
37143|       |
37144|  3.89k|                stack.emplace_back(&val, current_indent, child_indent);
37145|  3.89k|                stack.back().object_it = val.m_data.m_value.object->cbegin();
37146|  3.89k|                return;
37147|  6.84k|            }
37148|       |
37149|  9.88k|            case value_t::array:
  ------------------
  |  Branch (37149:13): [True: 9.88k, False: 23.4k]
  ------------------
37150|  9.88k|            {
37151|  9.88k|                if (val.m_data.m_value.array->empty())
  ------------------
  |  Branch (37151:21): [True: 1.61k, False: 8.26k]
  ------------------
37152|  1.61k|                {
37153|  1.61k|                    put_literal("[]");
37154|  1.61k|                    return;
37155|  1.61k|                }
37156|       |
37157|  8.26k|                std::size_t child_indent = current_indent;
37158|       |
37159|  8.26k|                if (pretty_print)
  ------------------
  |  Branch (37159:21): [True: 0, False: 8.26k]
  ------------------
37160|      0|                {
37161|      0|                    put_literal("[\n");
37162|      0|                    child_indent = next_indent(current_indent, indent_step);
37163|      0|                }
37164|  8.26k|                else
37165|  8.26k|                {
37166|  8.26k|                    put_char('[');
37167|  8.26k|                }
37168|       |
37169|  8.26k|                stack.emplace_back(&val, current_indent, child_indent);
37170|  8.26k|                stack.back().array_it = val.m_data.m_value.array->cbegin();
37171|  8.26k|                return;
37172|  9.88k|            }
37173|       |
37174|  1.12k|            case value_t::string:
  ------------------
  |  Branch (37174:13): [True: 1.12k, False: 32.2k]
  ------------------
37175|  1.26k|            case value_t::binary:
  ------------------
  |  Branch (37175:13): [True: 138, False: 33.2k]
  ------------------
37176|  5.46k|            case value_t::boolean:
  ------------------
  |  Branch (37176:13): [True: 4.19k, False: 29.1k]
  ------------------
37177|  9.15k|            case value_t::number_integer:
  ------------------
  |  Branch (37177:13): [True: 3.69k, False: 29.6k]
  ------------------
37178|  12.2k|            case value_t::number_unsigned:
  ------------------
  |  Branch (37178:13): [True: 3.09k, False: 30.2k]
  ------------------
37179|  14.6k|            case value_t::number_float:
  ------------------
  |  Branch (37179:13): [True: 2.42k, False: 30.9k]
  ------------------
37180|  14.6k|            case value_t::discarded:
  ------------------
  |  Branch (37180:13): [True: 0, False: 33.3k]
  ------------------
37181|  16.6k|            case value_t::null:
  ------------------
  |  Branch (37181:13): [True: 1.95k, False: 31.3k]
  ------------------
37182|  16.6k|            default:
  ------------------
  |  Branch (37182:13): [True: 0, False: 33.3k]
  ------------------
37183|  16.6k|                dump_scalar(val, current_indent);
37184|  16.6k|                return;
37185|  33.3k|        }
37186|  33.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_frameC2EPKSG_mm:
37091|  12.1k|            : value(value_)
37092|  12.1k|            , current_indent(current_indent_)
37093|  12.1k|            , child_indent(child_indent_)
37094|  12.1k|        {}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm3EEEvRAT__Kc:
38134|  70.0k|    {
38135|  70.0k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
38136|       |        // the array bound counts the terminating NUL, which is not written
38137|  70.0k|        constexpr std::size_t length = N - 1;
38138|  70.0k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
38139|       |
38140|  70.0k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|  70.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 258, False: 69.7k]
  |  |  ------------------
  ------------------
38141|    258|        {
38142|    258|            flush();
38143|    258|        }
38144|  70.0k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38145|  70.0k|        write_buffer_pos += length;
38146|  70.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE18copy_plain_vectorsEPcPKcm:
37552|  4.49k|    {
37553|       |#if JSON_SCAN_NEON
37554|       |        const uint8x16_t a = vld1q_u8(reinterpret_cast<const std::uint8_t*>(p));
37555|       |        const uint8x16_t b = vld1q_u8(reinterpret_cast<const std::uint8_t*>(p + n - 16));
37556|       |        // (int8_t)(c ^ 2) < 33: the quote, the control characters and the
37557|       |        // non-ASCII bytes (see vector_plain_run())
37558|       |        const uint8x16_t flip = vdupq_n_u8(2);
37559|       |        const int8x16_t limit = vdupq_n_s8(33);
37560|       |        const uint8x16_t special = vorrq_u8(vorrq_u8(vorrq_u8(vceqq_u8(a, vdupq_n_u8('\\')), vceqq_u8(b, vdupq_n_u8('\\'))),
37561|       |                                            vorrq_u8(vceqq_u8(a, vdupq_n_u8(0x7F)), vceqq_u8(b, vdupq_n_u8(0x7F)))),
37562|       |                                            vorrq_u8(vcltq_s8(vreinterpretq_s8_u8(veorq_u8(a, flip)), limit), vcltq_s8(vreinterpretq_s8_u8(veorq_u8(b, flip)), limit)));
37563|       |        if (vmaxvq_u8(special) != 0)
37564|       |        {
37565|       |            return false;
37566|       |        }
37567|       |        vst1q_u8(reinterpret_cast<std::uint8_t*>(d), a);
37568|       |        vst1q_u8(reinterpret_cast<std::uint8_t*>(d + n - 16), b);
37569|       |#else
37570|  4.49k|        const __m128i a = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(p))); // NOLINT(bugprone-casting-through-void)
37571|  4.49k|        const __m128i b = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(p + n - 16))); // NOLINT(bugprone-casting-through-void)
37572|       |        // (int8_t)(c ^ 2) < 33: the quote, the control characters and the
37573|       |        // non-ASCII bytes (see vector_plain_run())
37574|  4.49k|        const __m128i backslash = _mm_set1_epi8('\\');
37575|  4.49k|        const __m128i del = _mm_set1_epi8(0x7F);
37576|  4.49k|        const __m128i flip = _mm_set1_epi8(2);
37577|  4.49k|        const __m128i limit = _mm_set1_epi8(33);
37578|  4.49k|        const __m128i special = _mm_or_si128(_mm_or_si128(_mm_or_si128(_mm_cmpeq_epi8(a, backslash), _mm_cmpeq_epi8(b, backslash)),
37579|  4.49k|                                             _mm_or_si128(_mm_cmpeq_epi8(a, del), _mm_cmpeq_epi8(b, del))),
37580|  4.49k|                                             _mm_or_si128(_mm_cmplt_epi8(_mm_xor_si128(a, flip), limit), _mm_cmplt_epi8(_mm_xor_si128(b, flip), limit)));
37581|  4.49k|        if (_mm_movemask_epi8(special) != 0)
  ------------------
  |  Branch (37581:13): [True: 4.24k, False: 254]
  ------------------
37582|  4.24k|        {
37583|  4.24k|            return false;
37584|  4.24k|        }
37585|    254|        _mm_storeu_si128(static_cast<__m128i*>(static_cast<void*>(d)), a); // NOLINT(bugprone-casting-through-void)
37586|    254|        _mm_storeu_si128(static_cast<__m128i*>(static_cast<void*>(d + n - 16)), b); // NOLINT(bugprone-casting-through-void)
37587|    254|#endif
37588|    254|        return true;
37589|  4.49k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE17copy_plain_halvesEPcPKcm:
37517|   133k|    {
37518|       |#if JSON_SCAN_NEON
37519|       |        const uint8x8_t lo = vld1_u8(reinterpret_cast<const std::uint8_t*>(p));
37520|       |        const uint8x8_t hi = vld1_u8(reinterpret_cast<const std::uint8_t*>(p + n - 8));
37521|       |        const uint8x16_t in = vcombine_u8(lo, hi);
37522|       |        // (int8_t)(c ^ 2) < 33: the quote, the control characters and the
37523|       |        // non-ASCII bytes (see vector_plain_run())
37524|       |        const uint8x16_t special = vorrq_u8(vorrq_u8(vceqq_u8(in, vdupq_n_u8('\\')), vceqq_u8(in, vdupq_n_u8(0x7F))),
37525|       |                                            vcltq_s8(vreinterpretq_s8_u8(veorq_u8(in, vdupq_n_u8(2))), vdupq_n_s8(33)));
37526|       |        if (vmaxvq_u8(special) != 0)
37527|       |        {
37528|       |            return false;
37529|       |        }
37530|       |        vst1_u8(reinterpret_cast<std::uint8_t*>(d), lo);
37531|       |        vst1_u8(reinterpret_cast<std::uint8_t*>(d + n - 8), hi);
37532|       |#else
37533|   133k|        const __m128i lo = _mm_loadl_epi64(static_cast<const __m128i*>(static_cast<const void*>(p))); // NOLINT(bugprone-casting-through-void)
37534|   133k|        const __m128i hi = _mm_loadl_epi64(static_cast<const __m128i*>(static_cast<const void*>(p + n - 8))); // NOLINT(bugprone-casting-through-void)
37535|   133k|        const __m128i in = _mm_unpacklo_epi64(lo, hi);
37536|   133k|        const __m128i special = _mm_or_si128(_mm_or_si128(_mm_cmpeq_epi8(in, _mm_set1_epi8('\\')), _mm_cmpeq_epi8(in, _mm_set1_epi8(0x7F))),
37537|   133k|                                             _mm_cmplt_epi8(_mm_xor_si128(in, _mm_set1_epi8(2)), _mm_set1_epi8(33)));
37538|   133k|        if (_mm_movemask_epi8(special) != 0)
  ------------------
  |  Branch (37538:13): [True: 4.18k, False: 129k]
  ------------------
37539|  4.18k|        {
37540|  4.18k|            return false;
37541|  4.18k|        }
37542|   129k|        _mm_storel_epi64(static_cast<__m128i*>(static_cast<void*>(d)), lo); // NOLINT(bugprone-casting-through-void)
37543|   129k|        _mm_storel_epi64(static_cast<__m128i*>(static_cast<void*>(d + n - 8)), hi); // NOLINT(bugprone-casting-through-void)
37544|   129k|#endif
37545|   129k|        return true;
37546|   133k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9load_wordIjEET_PKc:
37418|   104k|    {
37419|   104k|        WordType w;
37420|   104k|        std::memcpy(&w, p, sizeof(w));
37421|   104k|        return w;
37422|   104k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE14swar_not_plainEm:
37408|   167k|    {
37409|   167k|        constexpr std::uint64_t ones = 0x0101010101010101ull;
37410|   167k|        const std::uint64_t q = v ^ 0x2222222222222222ull; // '"'
37411|   167k|        const std::uint64_t b = v ^ 0x5C5C5C5C5C5C5C5Cull; // '\\'
37412|       |        // (see swar_string_special(): the bytes from 0x80 are flagged anyway)
37413|   167k|        return ((q - ones) | (b - ones) | (v - 0x2020202020202020ull) | v | (v + ones)) & 0x8080808080808080ull;
37414|   167k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10store_wordIjEEvPcT_:
37426|  87.5k|    {
37427|  87.5k|        std::memcpy(p, &w, sizeof(w));
37428|  87.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9load_wordItEET_PKc:
37418|  13.9k|    {
37419|  13.9k|        WordType w;
37420|  13.9k|        std::memcpy(&w, p, sizeof(w));
37421|  13.9k|        return w;
37422|  13.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10store_wordItEEvPcT_:
37426|  1.78k|    {
37427|  1.78k|        std::memcpy(p, &w, sizeof(w));
37428|  1.78k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_escapedERKSC_:
37611|  69.0k|    {
37612|       |        // Short strings of printable ASCII - most object keys and many values -
37613|       |        // are checked byte by byte against a table and then copied in one go.
37614|       |        // For them, this is cheaper than starting the vector scanner below,
37615|       |        // whose setup costs more than such a string takes to scan. The same
37616|       |        // check serves both values of ensure_ascii.
37617|       |        //
37618|       |        // Where put_short_quoted() exists and takes strings of up to 32 bytes,
37619|       |        // the callers have tried it already, and repeating the attempt only
37620|       |        // costs time for strings that need escaping or are not ASCII.
37621|       |#if !JSON_LITTLE_ENDIAN_TARGET || !JSON_SCAN_VECTOR
37622|       |        if (s.size() <= 32)
37623|       |        {
37624|       |            const auto& copyable = ascii_copyable();
37625|       |            const auto* const data = reinterpret_cast<const unsigned char*>(s.data());
37626|       |            const std::size_t n = s.size();
37627|       |            std::size_t k = 0;
37628|       |            while (k + 4 <= n && copyable[data[k]] != 0 && copyable[data[k + 1]] != 0
37629|       |                    && copyable[data[k + 2]] != 0 && copyable[data[k + 3]] != 0)
37630|       |            {
37631|       |                k += 4;
37632|       |            }
37633|       |            while (k < n && copyable[data[k]] != 0)
37634|       |            {
37635|       |                ++k;
37636|       |            }
37637|       |            if (k == n)
37638|       |            {
37639|       |                put_string(s, 0, n);
37640|       |                return;
37641|       |            }
37642|       |        }
37643|       |#endif
37644|       |
37645|       |        // dispatch once here rather than test the flag inside the loop: it does
37646|       |        // not change while a string is written, and folding it lets each of the
37647|       |        // two scanners be inlined into a loop of its own
37648|  69.0k|        if (ensure_ascii)
  ------------------
  |  Branch (37648:13): [True: 0, False: 69.0k]
  ------------------
37649|      0|        {
37650|      0|            dump_escaped_impl<true>(s);
37651|      0|        }
37652|  69.0k|        else
37653|  69.0k|        {
37654|  69.0k|            dump_escaped_impl<false>(s);
37655|  69.0k|        }
37656|  69.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail16read_eight_bytesEPKh:
 9148|   229k|{
 9149|   229k|#if JSON_LITTLE_ENDIAN_TARGET
 9150|       |    // the byte order already matches
 9151|   229k|    std::uint64_t result = 0;
 9152|   229k|    std::memcpy(&result, b, sizeof(result));
 9153|   229k|    return result;
 9154|       |#else
 9155|       |    return static_cast<std::uint64_t>(b[0]) | (static_cast<std::uint64_t>(b[1]) << 8u)
 9156|       |           | (static_cast<std::uint64_t>(b[2]) << 16u) | (static_cast<std::uint64_t>(b[3]) << 24u)
 9157|       |           | (static_cast<std::uint64_t>(b[4]) << 32u) | (static_cast<std::uint64_t>(b[5]) << 40u)
 9158|       |           | (static_cast<std::uint64_t>(b[6]) << 48u) | (static_cast<std::uint64_t>(b[7]) << 56u);
 9159|       |#endif
 9160|   229k|}
_ZN8nlohmann16json_abi_v3_12_06detail20count_trailing_zerosEm:
 9020|   200k|{
 9021|   200k|#if defined(__GNUC__) || defined(__clang__)
 9022|   200k|    return __builtin_ctzll(x);
 9023|       |#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64))
 9024|       |    unsigned long index = 0; // NOLINT(runtime/int): the type _BitScan*64 takes
 9025|       |    _BitScanForward64(&index, x);
 9026|       |    return static_cast<int>(index);
 9027|       |#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_ARM))
 9028|       |    unsigned long index = 0; // NOLINT(runtime/int): the type _BitScan* takes
 9029|       |    if (_BitScanForward(&index, static_cast<unsigned long>(x))) // NOLINT(runtime/int)
 9030|       |    {
 9031|       |        return static_cast<int>(index);
 9032|       |    }
 9033|       |    _BitScanForward(&index, static_cast<unsigned long>(x >> 32u)); // NOLINT(runtime/int)
 9034|       |    return 32 + static_cast<int>(index);
 9035|       |#elif defined(__cpp_lib_bitops)
 9036|       |    return std::countr_zero(x);
 9037|       |#else
 9038|       |    int n = 0;
 9039|       |    for (int shift = 32; shift != 0; shift >>= 1)
 9040|       |    {
 9041|       |        if ((x << (64 - shift)) == 0)
 9042|       |        {
 9043|       |            n += shift;
 9044|       |            x >>= shift;
 9045|       |        }
 9046|       |    }
 9047|       |    return n;
 9048|       |#endif
 9049|   200k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12emit_pendingERm:
37660|   182k|    {
37661|   182k|        if (bytes != 0)
  ------------------
  |  Branch (37661:13): [True: 28.2k, False: 153k]
  ------------------
37662|  28.2k|        {
37663|  28.2k|            put_buffer(string_buffer, bytes);
37664|  28.2k|            bytes = 0;
37665|  28.2k|        }
37666|   182k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE7put_runISC_EEvRKT_mm:
38158|  60.5k|    {
38159|       |        // a short run is the exception in text without escapes (CJK, accented
38160|       |        // Latin), for which this keeps the long path the fast one
38161|  60.5k|        if (JSON_HEDLEY_UNLIKELY(length <= 16 && start + 16 <= str.size() && write_buffer_pos + 16 <= write_buffer.size()))
  ------------------
  |  | 1697|   207k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 28.2k, False: 32.2k]
  |  |  |  Branch (1697:94): [True: 58.1k, False: 2.39k]
  |  |  |  Branch (1697:94): [True: 28.3k, False: 29.7k]
  |  |  |  Branch (1697:94): [True: 28.2k, False: 76]
  |  |  ------------------
  ------------------
38162|  28.2k|        {
38163|  28.2k|            std::memcpy(write_buffer.data() + write_buffer_pos, str.data() + start, 16);
38164|  28.2k|            write_buffer_pos += length;
38165|  28.2k|            return;
38166|  28.2k|        }
38167|  32.2k|        put_string(str, start, start + length);
38168|  32.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10put_stringISC_EEvRKT_mm:
38181|  32.2k|    {
38182|  32.2k|        JSON_ASSERT(start <= end);
  ------------------
  |  | 2643|  32.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38182:9): [True: 32.2k, False: 0]
  ------------------
38183|  32.2k|        JSON_ASSERT(end <= str.size());
  ------------------
  |  | 2643|  32.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38183:9): [True: 32.2k, False: 0]
  ------------------
38184|       |
38185|  32.2k|        const char* const s = str.data() + start;
38186|  32.2k|        const std::size_t length = end - start;
38187|       |
38188|  32.2k|        if (JSON_HEDLEY_UNLIKELY(length >= write_buffer.size()))
  ------------------
  |  | 1697|  32.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 32.2k]
  |  |  ------------------
  ------------------
38189|      0|        {
38190|      0|            flush();
38191|      0|            o->write_characters(s, length);
38192|      0|            return;
38193|      0|        }
38194|  32.2k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|  32.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 187, False: 32.0k]
  |  |  ------------------
  ------------------
38195|    187|        {
38196|    187|            flush();
38197|    187|        }
38198|  32.2k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38199|  32.2k|        write_buffer_pos += length;
38200|  32.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE13ascii_escapesEv:
38294|   121k|    {
38295|   121k|        static const std::array<std::array<char, 8>, 0x60> escapes =
38296|   121k|        {
38297|   121k|            {
38298|   121k|                {{'\\', 'u', '0', '0', '0', '0', 0, 6}}, // 0x00
38299|   121k|                {{'\\', 'u', '0', '0', '0', '1', 0, 6}}, // 0x01
38300|   121k|                {{'\\', 'u', '0', '0', '0', '2', 0, 6}}, // 0x02
38301|   121k|                {{'\\', 'u', '0', '0', '0', '3', 0, 6}}, // 0x03
38302|   121k|                {{'\\', 'u', '0', '0', '0', '4', 0, 6}}, // 0x04
38303|   121k|                {{'\\', 'u', '0', '0', '0', '5', 0, 6}}, // 0x05
38304|   121k|                {{'\\', 'u', '0', '0', '0', '6', 0, 6}}, // 0x06
38305|   121k|                {{'\\', 'u', '0', '0', '0', '7', 0, 6}}, // 0x07
38306|   121k|                {{'\\', 'b', 0, 0, 0, 0, 0, 2}}, // 0x08
38307|   121k|                {{'\\', 't', 0, 0, 0, 0, 0, 2}}, // 0x09
38308|   121k|                {{'\\', 'n', 0, 0, 0, 0, 0, 2}}, // 0x0A
38309|   121k|                {{'\\', 'u', '0', '0', '0', 'b', 0, 6}}, // 0x0B
38310|   121k|                {{'\\', 'f', 0, 0, 0, 0, 0, 2}}, // 0x0C
38311|   121k|                {{'\\', 'r', 0, 0, 0, 0, 0, 2}}, // 0x0D
38312|   121k|                {{'\\', 'u', '0', '0', '0', 'e', 0, 6}}, // 0x0E
38313|   121k|                {{'\\', 'u', '0', '0', '0', 'f', 0, 6}}, // 0x0F
38314|   121k|                {{'\\', 'u', '0', '0', '1', '0', 0, 6}}, // 0x10
38315|   121k|                {{'\\', 'u', '0', '0', '1', '1', 0, 6}}, // 0x11
38316|   121k|                {{'\\', 'u', '0', '0', '1', '2', 0, 6}}, // 0x12
38317|   121k|                {{'\\', 'u', '0', '0', '1', '3', 0, 6}}, // 0x13
38318|   121k|                {{'\\', 'u', '0', '0', '1', '4', 0, 6}}, // 0x14
38319|   121k|                {{'\\', 'u', '0', '0', '1', '5', 0, 6}}, // 0x15
38320|   121k|                {{'\\', 'u', '0', '0', '1', '6', 0, 6}}, // 0x16
38321|   121k|                {{'\\', 'u', '0', '0', '1', '7', 0, 6}}, // 0x17
38322|   121k|                {{'\\', 'u', '0', '0', '1', '8', 0, 6}}, // 0x18
38323|   121k|                {{'\\', 'u', '0', '0', '1', '9', 0, 6}}, // 0x19
38324|   121k|                {{'\\', 'u', '0', '0', '1', 'a', 0, 6}}, // 0x1A
38325|   121k|                {{'\\', 'u', '0', '0', '1', 'b', 0, 6}}, // 0x1B
38326|   121k|                {{'\\', 'u', '0', '0', '1', 'c', 0, 6}}, // 0x1C
38327|   121k|                {{'\\', 'u', '0', '0', '1', 'd', 0, 6}}, // 0x1D
38328|   121k|                {{'\\', 'u', '0', '0', '1', 'e', 0, 6}}, // 0x1E
38329|   121k|                {{'\\', 'u', '0', '0', '1', 'f', 0, 6}}, // 0x1F
38330|   121k|                {{' ', 0, 0, 0, 0, 0, 0, 1}}, // 0x20
38331|   121k|                {{'!', 0, 0, 0, 0, 0, 0, 1}}, // 0x21
38332|   121k|                {{'\\', '"', 0, 0, 0, 0, 0, 2}}, // 0x22
38333|   121k|                {{'#', 0, 0, 0, 0, 0, 0, 1}}, // 0x23
38334|   121k|                {{'$', 0, 0, 0, 0, 0, 0, 1}}, // 0x24
38335|   121k|                {{'%', 0, 0, 0, 0, 0, 0, 1}}, // 0x25
38336|   121k|                {{'&', 0, 0, 0, 0, 0, 0, 1}}, // 0x26
38337|   121k|                {{'\'', 0, 0, 0, 0, 0, 0, 1}}, // 0x27
38338|   121k|                {{'(', 0, 0, 0, 0, 0, 0, 1}}, // 0x28
38339|   121k|                {{')', 0, 0, 0, 0, 0, 0, 1}}, // 0x29
38340|   121k|                {{'*', 0, 0, 0, 0, 0, 0, 1}}, // 0x2A
38341|   121k|                {{'+', 0, 0, 0, 0, 0, 0, 1}}, // 0x2B
38342|   121k|                {{',', 0, 0, 0, 0, 0, 0, 1}}, // 0x2C
38343|   121k|                {{'-', 0, 0, 0, 0, 0, 0, 1}}, // 0x2D
38344|   121k|                {{'.', 0, 0, 0, 0, 0, 0, 1}}, // 0x2E
38345|   121k|                {{'/', 0, 0, 0, 0, 0, 0, 1}}, // 0x2F
38346|   121k|                {{'0', 0, 0, 0, 0, 0, 0, 1}}, // 0x30
38347|   121k|                {{'1', 0, 0, 0, 0, 0, 0, 1}}, // 0x31
38348|   121k|                {{'2', 0, 0, 0, 0, 0, 0, 1}}, // 0x32
38349|   121k|                {{'3', 0, 0, 0, 0, 0, 0, 1}}, // 0x33
38350|   121k|                {{'4', 0, 0, 0, 0, 0, 0, 1}}, // 0x34
38351|   121k|                {{'5', 0, 0, 0, 0, 0, 0, 1}}, // 0x35
38352|   121k|                {{'6', 0, 0, 0, 0, 0, 0, 1}}, // 0x36
38353|   121k|                {{'7', 0, 0, 0, 0, 0, 0, 1}}, // 0x37
38354|   121k|                {{'8', 0, 0, 0, 0, 0, 0, 1}}, // 0x38
38355|   121k|                {{'9', 0, 0, 0, 0, 0, 0, 1}}, // 0x39
38356|   121k|                {{':', 0, 0, 0, 0, 0, 0, 1}}, // 0x3A
38357|   121k|                {{';', 0, 0, 0, 0, 0, 0, 1}}, // 0x3B
38358|   121k|                {{'<', 0, 0, 0, 0, 0, 0, 1}}, // 0x3C
38359|   121k|                {{'=', 0, 0, 0, 0, 0, 0, 1}}, // 0x3D
38360|   121k|                {{'>', 0, 0, 0, 0, 0, 0, 1}}, // 0x3E
38361|   121k|                {{'?', 0, 0, 0, 0, 0, 0, 1}}, // 0x3F
38362|   121k|                {{'@', 0, 0, 0, 0, 0, 0, 1}}, // 0x40
38363|   121k|                {{'A', 0, 0, 0, 0, 0, 0, 1}}, // 0x41
38364|   121k|                {{'B', 0, 0, 0, 0, 0, 0, 1}}, // 0x42
38365|   121k|                {{'C', 0, 0, 0, 0, 0, 0, 1}}, // 0x43
38366|   121k|                {{'D', 0, 0, 0, 0, 0, 0, 1}}, // 0x44
38367|   121k|                {{'E', 0, 0, 0, 0, 0, 0, 1}}, // 0x45
38368|   121k|                {{'F', 0, 0, 0, 0, 0, 0, 1}}, // 0x46
38369|   121k|                {{'G', 0, 0, 0, 0, 0, 0, 1}}, // 0x47
38370|   121k|                {{'H', 0, 0, 0, 0, 0, 0, 1}}, // 0x48
38371|   121k|                {{'I', 0, 0, 0, 0, 0, 0, 1}}, // 0x49
38372|   121k|                {{'J', 0, 0, 0, 0, 0, 0, 1}}, // 0x4A
38373|   121k|                {{'K', 0, 0, 0, 0, 0, 0, 1}}, // 0x4B
38374|   121k|                {{'L', 0, 0, 0, 0, 0, 0, 1}}, // 0x4C
38375|   121k|                {{'M', 0, 0, 0, 0, 0, 0, 1}}, // 0x4D
38376|   121k|                {{'N', 0, 0, 0, 0, 0, 0, 1}}, // 0x4E
38377|   121k|                {{'O', 0, 0, 0, 0, 0, 0, 1}}, // 0x4F
38378|   121k|                {{'P', 0, 0, 0, 0, 0, 0, 1}}, // 0x50
38379|   121k|                {{'Q', 0, 0, 0, 0, 0, 0, 1}}, // 0x51
38380|   121k|                {{'R', 0, 0, 0, 0, 0, 0, 1}}, // 0x52
38381|   121k|                {{'S', 0, 0, 0, 0, 0, 0, 1}}, // 0x53
38382|   121k|                {{'T', 0, 0, 0, 0, 0, 0, 1}}, // 0x54
38383|   121k|                {{'U', 0, 0, 0, 0, 0, 0, 1}}, // 0x55
38384|   121k|                {{'V', 0, 0, 0, 0, 0, 0, 1}}, // 0x56
38385|   121k|                {{'W', 0, 0, 0, 0, 0, 0, 1}}, // 0x57
38386|   121k|                {{'X', 0, 0, 0, 0, 0, 0, 1}}, // 0x58
38387|   121k|                {{'Y', 0, 0, 0, 0, 0, 0, 1}}, // 0x59
38388|   121k|                {{'Z', 0, 0, 0, 0, 0, 0, 1}}, // 0x5A
38389|   121k|                {{'[', 0, 0, 0, 0, 0, 0, 1}}, // 0x5B
38390|   121k|                {{'\\', '\\', 0, 0, 0, 0, 0, 2}}, // 0x5C
38391|   121k|                {{']', 0, 0, 0, 0, 0, 0, 1}}, // 0x5D
38392|   121k|                {{'^', 0, 0, 0, 0, 0, 0, 1}}, // 0x5E
38393|   121k|                {{'_', 0, 0, 0, 0, 0, 0, 1}}, // 0x5F
38394|   121k|            }
38395|   121k|        };
38396|   121k|        return escapes;
38397|   121k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10put_bufferILm512EEEvRKNS4_5arrayIcXT_EEEm:
38207|  36.4k|    {
38208|  36.4k|        put_string(buffer, 0, length);
38209|  36.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10put_stringINS4_5arrayIcLm512EEEEEvRKT_mm:
38181|  36.4k|    {
38182|  36.4k|        JSON_ASSERT(start <= end);
  ------------------
  |  | 2643|  36.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38182:9): [True: 36.4k, False: 0]
  ------------------
38183|  36.4k|        JSON_ASSERT(end <= str.size());
  ------------------
  |  | 2643|  36.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38183:9): [True: 36.4k, False: 0]
  ------------------
38184|       |
38185|  36.4k|        const char* const s = str.data() + start;
38186|  36.4k|        const std::size_t length = end - start;
38187|       |
38188|  36.4k|        if (JSON_HEDLEY_UNLIKELY(length >= write_buffer.size()))
  ------------------
  |  | 1697|  36.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 36.4k]
  |  |  ------------------
  ------------------
38189|      0|        {
38190|      0|            flush();
38191|      0|            o->write_characters(s, length);
38192|      0|            return;
38193|      0|        }
38194|  36.4k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|  36.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 36, False: 36.4k]
  |  |  ------------------
  ------------------
38195|     36|        {
38196|     36|            flush();
38197|     36|        }
38198|  36.4k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38199|  36.4k|        write_buffer_pos += length;
38200|  36.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17validate_one_utf8EPKhm:
12968|   127k|{
12969|   127k|    const unsigned char c0 = data[0];
12970|   127k|    if (c0 >= 0xC2 && c0 <= 0xDF)  // U+0080..U+07FF
  ------------------
  |  Branch (12970:9): [True: 108k, False: 18.8k]
  |  Branch (12970:23): [True: 18.2k, False: 90.2k]
  ------------------
12971|  18.2k|    {
12972|  18.2k|        if (avail >= 2 && data[1] >= 0x80 && data[1] <= 0xBF)
  ------------------
  |  Branch (12972:13): [True: 16.2k, False: 1.99k]
  |  Branch (12972:27): [True: 12.6k, False: 3.69k]
  |  Branch (12972:46): [True: 4.48k, False: 8.12k]
  ------------------
12973|  4.48k|        {
12974|  4.48k|            return 2;
12975|  4.48k|        }
12976|  18.2k|    }
12977|   109k|    else if (c0 == 0xE0)  // U+0800..U+0FFF
  ------------------
  |  Branch (12977:14): [True: 6.60k, False: 102k]
  ------------------
12978|  6.60k|    {
12979|  6.60k|        if (avail >= 3 && data[1] >= 0xA0 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF)
  ------------------
  |  Branch (12979:13): [True: 5.41k, False: 1.19k]
  |  Branch (12979:27): [True: 4.31k, False: 1.09k]
  |  Branch (12979:46): [True: 1.33k, False: 2.98k]
  |  Branch (12979:65): [True: 489, False: 848]
  |  Branch (12979:84): [True: 317, False: 172]
  ------------------
12980|    317|        {
12981|    317|            return 3;
12982|    317|        }
12983|  6.60k|    }
12984|   102k|    else if ((c0 >= 0xE1 && c0 <= 0xEC) || c0 == 0xEE || c0 == 0xEF)  // U+1000..U+CFFF, U+E000..U+FFFF
  ------------------
  |  Branch (12984:15): [True: 83.6k, False: 18.8k]
  |  Branch (12984:29): [True: 10.0k, False: 73.5k]
  |  Branch (12984:44): [True: 5.21k, False: 87.1k]
  |  Branch (12984:58): [True: 3.18k, False: 83.9k]
  ------------------
12985|  18.4k|    {
12986|  18.4k|        if (avail >= 3 && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF)
  ------------------
  |  Branch (12986:13): [True: 15.1k, False: 3.31k]
  |  Branch (12986:27): [True: 12.1k, False: 2.99k]
  |  Branch (12986:46): [True: 2.89k, False: 9.30k]
  |  Branch (12986:65): [True: 2.35k, False: 540]
  |  Branch (12986:84): [True: 975, False: 1.37k]
  ------------------
12987|    975|        {
12988|    975|            return 3;
12989|    975|        }
12990|  18.4k|    }
12991|  83.9k|    else if (c0 == 0xED)  // U+D000..U+D7FF (excludes surrogates)
  ------------------
  |  Branch (12991:14): [True: 9.96k, False: 73.9k]
  ------------------
12992|  9.96k|    {
12993|  9.96k|        if (avail >= 3 && data[1] >= 0x80 && data[1] <= 0x9F && data[2] >= 0x80 && data[2] <= 0xBF)
  ------------------
  |  Branch (12993:13): [True: 8.83k, False: 1.13k]
  |  Branch (12993:27): [True: 7.16k, False: 1.66k]
  |  Branch (12993:46): [True: 1.49k, False: 5.67k]
  |  Branch (12993:65): [True: 1.36k, False: 126]
  |  Branch (12993:84): [True: 557, False: 809]
  ------------------
12994|    557|        {
12995|    557|            return 3;
12996|    557|        }
12997|  9.96k|    }
12998|  73.9k|    else if (c0 == 0xF0)  // U+10000..U+3FFFF
  ------------------
  |  Branch (12998:14): [True: 7.58k, False: 66.4k]
  ------------------
12999|  7.58k|    {
13000|  7.58k|        if (avail >= 4 && data[1] >= 0x90 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF)
  ------------------
  |  Branch (13000:13): [True: 6.10k, False: 1.48k]
  |  Branch (13000:27): [True: 5.16k, False: 941]
  |  Branch (13000:46): [True: 3.05k, False: 2.11k]
  |  Branch (13000:65): [True: 2.67k, False: 378]
  |  Branch (13000:84): [True: 2.27k, False: 401]
  |  Branch (13000:103): [True: 1.35k, False: 919]
  |  Branch (13000:122): [True: 562, False: 792]
  ------------------
13001|    562|        {
13002|    562|            return 4;
13003|    562|        }
13004|  7.58k|    }
13005|  66.4k|    else if (c0 >= 0xF1 && c0 <= 0xF3)  // U+40000..U+FFFFF
  ------------------
  |  Branch (13005:14): [True: 47.5k, False: 18.8k]
  |  Branch (13005:28): [True: 15.2k, False: 32.3k]
  ------------------
13006|  15.2k|    {
13007|  15.2k|        if (avail >= 4 && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF)
  ------------------
  |  Branch (13007:13): [True: 13.8k, False: 1.34k]
  |  Branch (13007:27): [True: 12.0k, False: 1.87k]
  |  Branch (13007:46): [True: 3.63k, False: 8.38k]
  |  Branch (13007:65): [True: 2.75k, False: 871]
  |  Branch (13007:84): [True: 1.73k, False: 1.02k]
  |  Branch (13007:103): [True: 785, False: 953]
  |  Branch (13007:122): [True: 485, False: 300]
  ------------------
13008|    485|        {
13009|    485|            return 4;
13010|    485|        }
13011|  15.2k|    }
13012|  51.1k|    else if (c0 == 0xF4)  // U+100000..U+10FFFF
  ------------------
  |  Branch (13012:14): [True: 7.09k, False: 44.0k]
  ------------------
13013|  7.09k|    {
13014|  7.09k|        if (avail >= 4 && data[1] >= 0x80 && data[1] <= 0x8F && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF)
  ------------------
  |  Branch (13014:13): [True: 6.85k, False: 246]
  |  Branch (13014:27): [True: 5.74k, False: 1.10k]
  |  Branch (13014:46): [True: 1.93k, False: 3.80k]
  |  Branch (13014:65): [True: 1.83k, False: 105]
  |  Branch (13014:84): [True: 1.05k, False: 779]
  |  Branch (13014:103): [True: 949, False: 106]
  |  Branch (13014:122): [True: 138, False: 811]
  ------------------
13015|    138|        {
13016|    138|            return 4;
13017|    138|        }
13018|  7.09k|    }
13019|   119k|    return 0; // invalid, incomplete, or must be diagnosed by the byte path
13020|   127k|}
_ZN8nlohmann16json_abi_v3_12_06detail6decodeERhRjh:
 7362|   202k|{
 7363|   202k|    static const std::array<std::uint8_t, 400> utf8d =
 7364|   202k|    {
 7365|   202k|        {
 7366|   202k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F
 7367|   202k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F
 7368|   202k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F
 7369|   202k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F
 7370|   202k|            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F
 7371|   202k|            7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF
 7372|   202k|            8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF
 7373|   202k|            0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF
 7374|   202k|            0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF
 7375|   202k|            0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0
 7376|   202k|            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2
 7377|   202k|            1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4
 7378|   202k|            1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6
 7379|   202k|            1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8
 7380|   202k|        }
 7381|   202k|    };
 7382|       |
 7383|   202k|    JSON_ASSERT(static_cast<std::size_t>(byte) < utf8d.size());
  ------------------
  |  | 2643|   202k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (7383:5): [True: 202k, False: 0]
  ------------------
 7384|   202k|    const std::uint8_t type = utf8d[byte];
 7385|       |
 7386|   202k|    codep = (state != UTF8_ACCEPT)
  ------------------
  |  Branch (7386:13): [True: 84.3k, False: 117k]
  ------------------
 7387|   202k|            ? (byte & 0x3fu) | (codep << 6u)
 7388|   202k|            : (0xFFu >> type) & (byte);
 7389|       |
 7390|   202k|    const std::size_t index = 256u + (static_cast<std::size_t>(state) * 16u) + static_cast<std::size_t>(type);
 7391|   202k|    JSON_ASSERT(index < utf8d.size());
  ------------------
  |  | 2643|   202k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (7391:5): [True: 202k, False: 0]
  ------------------
 7392|   202k|    state = utf8d[index];
 7393|   202k|    return state;
 7394|   202k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE21reserve_string_bufferERm:
37672|   111k|    {
37673|   111k|        if (string_buffer.size() - bytes < 13)
  ------------------
  |  Branch (37673:13): [True: 0, False: 111k]
  ------------------
37674|      0|        {
37675|      0|            put_buffer(string_buffer, bytes);
37676|      0|            bytes = 0;
37677|      0|        }
37678|   111k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10type_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idERKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5845|  1.28k|    {
 5846|  1.28k|        return create(static_cast<int>(id_), what_arg, context);
 5847|  1.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10type_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_iRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5838|  1.28k|    {
 5839|  1.28k|        const std::string w = exception::what_impl("type_error", id_, what_arg, context);
 5840|  1.28k|        return {id_, w.c_str()};
 5841|  1.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9exception9what_implIDnEENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKSA_iSC_T_:
 5655|  2.27k|    {
 5656|  2.27k|        return concat(name(ename, id_), diagnostics(context), what_arg);
 5657|  2.27k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_S9_RKS9_EEET_DpOT0_:
 5516|  3.88k|{
 5517|  3.88k|    OutStringType str;
 5518|  3.88k|    str.reserve(concat_length(args...));
 5519|  3.88k|    concat_into(str, std::forward<Args>(args)...);
 5520|  3.88k|    return str;
 5521|  3.88k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_S9_EEEmRKT_DpRKT0_:
 5426|  3.88k|{
 5427|  3.88k|    return str.size() + concat_length(rest...);
 5428|  3.88k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_EEEmRKT_DpRKT0_:
 5426|  45.9k|{
 5427|  45.9k|    return str.size() + concat_length(rest...);
 5428|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEmRKT_DpRKT0_:
 5426|   148k|{
 5427|   148k|    return str.size() + concat_length(rest...);
 5428|   148k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthEv:
 5402|   195k|{
 5403|   195k|    return 0;
 5404|   195k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JS9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5479|  3.88k|{
 5480|  3.88k|    out.append(std::forward<Arg>(arg));
 5481|  3.88k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  3.88k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5479|  45.9k|{
 5480|  45.9k|    out.append(std::forward<Arg>(arg));
 5481|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5479|  88.4k|{
 5480|  88.4k|    out.append(std::forward<Arg>(arg));
 5481|  88.4k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  88.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvRT_:
 5432|   195k|{}
_ZN8nlohmann16json_abi_v3_12_06detail9exception4nameERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEi:
 5648|  45.9k|    {
 5649|  45.9k|        return concat("[json.exception.", ename, '.', std::to_string(id_), "] ");
 5650|  45.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA17_KcRKS9_cS9_RA3_SA_EEET_DpOT0_:
 5516|  45.9k|{
 5517|  45.9k|    OutStringType str;
 5518|  45.9k|    str.reserve(concat_length(args...));
 5519|  45.9k|    concat_into(str, std::forward<Args>(args)...);
 5520|  45.9k|    return str;
 5521|  45.9k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcS9_A3_cEEEmPKcDpRKT_:
 5420|  45.9k|{
 5421|  45.9k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJcS9_A3_cEEEmRKT_DpRKT0_:
 5426|  45.9k|{
 5427|  45.9k|    return str.size() + concat_length(rest...);
 5428|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA3_cEEEmcDpRKT_:
 5414|  45.9k|{
 5415|  45.9k|    return 1 + concat_length(rest...);
 5416|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA3_cEEEmRKT_DpRKT0_:
 5426|  45.9k|{
 5427|  45.9k|    return str.size() + concat_length(rest...);
 5428|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJEEEmPKcDpRKT_:
 5420|  46.0k|{
 5421|  46.0k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  46.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA17_KcJRKS9_cS9_RA3_SA_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|  45.9k|{
 5480|  45.9k|    out.append(std::forward<Arg>(arg));
 5481|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JcS9_RA3_KcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  45.9k|{
 5480|  45.9k|    out.append(std::forward<Arg>(arg));
 5481|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcJS9_RA3_KcETnNS3_9enable_ifIXaantsr24detect_string_can_appendIT_T0_EE5valuesr27detect_string_can_append_opISE_SF_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5488|  45.9k|{
 5489|  45.9k|    out += std::forward<Arg>(arg);
 5490|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5491|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA3_KcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  45.9k|{
 5480|  45.9k|    out.append(std::forward<Arg>(arg));
 5481|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA3_KcJETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  45.9k|{
 5480|  45.9k|    out.append(std::forward<Arg>(arg));
 5481|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail9exception11diagnosticsEDn:
 5660|  44.3k|    {
 5661|  44.3k|        return "";
 5662|  44.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10type_errorC2EiPKc:
 5851|  1.28k|    type_error(int id_, const char* what_arg) : exception(id_, what_arg) {}
_ZN8nlohmann16json_abi_v3_12_06detail9exceptionC2EiPKc:
 5645|  45.9k|    exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing)
_ZNK8nlohmann16json_abi_v3_12_06detail9exception4whatEv:
 5636|  29.8k|    {
 5637|  29.8k|        return m.what();
 5638|  29.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA29_KcS9_RA5_SA_S9_EEET_DpOT0_:
 5516|  1.15k|{
 5517|  1.15k|    OutStringType str;
 5518|  1.15k|    str.reserve(concat_length(args...));
 5519|  1.15k|    concat_into(str, std::forward<Args>(args)...);
 5520|  1.15k|    return str;
 5521|  1.15k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA5_cS9_EEEmPKcDpRKT_:
 5420|  1.15k|{
 5421|  1.15k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  1.15k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA5_cS9_EEEmRKT_DpRKT0_:
 5426|  1.15k|{
 5427|  1.15k|    return str.size() + concat_length(rest...);
 5428|  1.15k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEmPKcDpRKT_:
 5420|   102k|{
 5421|   102k|    return ::strlen(cstr) + concat_length(rest...);
 5422|   102k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA29_KcJS9_RA5_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  1.15k|{
 5480|  1.15k|    out.append(std::forward<Arg>(arg));
 5481|  1.15k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.15k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA5_KcS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  1.15k|{
 5480|  1.15k|    out.append(std::forward<Arg>(arg));
 5481|  1.15k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.15k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA5_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  2.05k|{
 5480|  2.05k|    out.append(std::forward<Arg>(arg));
 5481|  2.05k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  2.05k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSB_OSC_DpOT1_:
 5479|  60.4k|{
 5480|  60.4k|    out.append(std::forward<Arg>(arg));
 5481|  60.4k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  60.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail8hex_byteEh:
 7173|  11.2k|{
 7174|  11.2k|    std::string result = "00";
 7175|  11.2k|    constexpr const char* nibble_to_hex = "0123456789ABCDEF";
 7176|  11.2k|    result[0] = nibble_to_hex[byte / 16];
 7177|  11.2k|    result[1] = nibble_to_hex[byte % 16];
 7178|  11.2k|    return result;
 7179|  11.2k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA39_KcS9_EEET_DpOT0_:
 5516|    124|{
 5517|    124|    OutStringType str;
 5518|    124|    str.reserve(concat_length(args...));
 5519|    124|    concat_into(str, std::forward<Args>(args)...);
 5520|    124|    return str;
 5521|    124|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA39_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|    124|{
 5480|    124|    out.append(std::forward<Arg>(arg));
 5481|    124|    concat_into(out, std::forward<Args>(rest)...);
 5482|    124|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE17dump_escaped_implILb0EEEvRKSC_:
37693|  69.0k|    {
37694|  69.0k|        std::uint32_t codepoint{};
37695|  69.0k|        std::uint8_t state = UTF8_ACCEPT;
37696|  69.0k|        std::size_t bytes = 0;  // number of bytes written to string_buffer
37697|       |
37698|       |        // number of bytes written at the point of the last valid byte
37699|  69.0k|        std::size_t bytes_after_last_accept = 0;
37700|  69.0k|        std::size_t undumped_chars = 0;
37701|       |
37702|   391k|        for (std::size_t i = 0; i < s.size(); ++i)
  ------------------
  |  Branch (37702:33): [True: 341k, False: 50.6k]
  ------------------
37703|   341k|        {
37704|       |            // Fast path: at a character boundary (state == UTF8_ACCEPT),
37705|       |            // bulk-copy the longest run of bytes that need no escaping using a
37706|       |            // SWAR scanner shared with the lexer's contiguous path. The scanner
37707|       |            // stops exactly at the first byte dump_escaped would handle
37708|       |            // individually, so that byte is left to the byte-at-a-time path
37709|       |            // below, keeping escaping output and error diagnostics unchanged.
37710|       |            //
37711|       |            // - EnsureAscii == false: string_bulk_run() copies ordinary bytes
37712|       |            //   and complete well-formed UTF-8, stopping at a quote, backslash,
37713|       |            //   control character (< 0x20), or ill-formed/truncated sequence.
37714|       |            // - EnsureAscii == true: only printable ASCII may be copied
37715|       |            //   verbatim; find_ascii_copyable_run() additionally stops at 0x7F
37716|       |            //   and every non-ASCII byte (>= 0x80), which must be \u-escaped.
37717|   341k|            if (state == UTF8_ACCEPT)
  ------------------
  |  Branch (37717:17): [True: 256k, False: 84.3k]
  ------------------
37718|   256k|            {
37719|   256k|                const auto* const data = reinterpret_cast<const unsigned char*>(s.data());
37720|       |                // A run can only be non-empty when the very first byte is one
37721|       |                // the scanner may copy, so test that single byte before paying
37722|       |                // for the scan. Without it, text whose characters all have to be
37723|       |                // escaped - CJK under ensure_ascii, where every byte is >= 0x80 -
37724|       |                // runs the scanner once per character only to be told zero.
37725|   256k|                std::size_t run = 0;
37726|   256k|                if (!EnsureAscii)
  ------------------
  |  Branch (37726:21): [True: 256k, Folded]
  ------------------
37727|   256k|                {
37728|   256k|                    run = string_bulk_run(data + i, s.size() - i);
37729|   256k|                }
37730|      0|                else if (is_ascii_copyable(data[i]))
  ------------------
  |  Branch (37730:26): [True: 0, False: 0]
  ------------------
37731|      0|                {
37732|      0|                    run = find_ascii_copyable_run(data + i, s.size() - i);
37733|      0|                }
37734|   256k|                if (run != 0)
  ------------------
  |  Branch (37734:21): [True: 60.5k, False: 196k]
  ------------------
37735|  60.5k|                {
37736|       |                    // emit any bytes still pending in string_buffer first to
37737|       |                    // preserve output order, then write the run directly
37738|  60.5k|                    emit_pending(bytes);
37739|  60.5k|                    put_run(s, i, run);
37740|  60.5k|                    bytes_after_last_accept = 0;
37741|  60.5k|                    undumped_chars = 0;
37742|  60.5k|                    i += run;
37743|  60.5k|                    if (i >= s.size())
  ------------------
  |  Branch (37743:25): [True: 17.2k, False: 43.2k]
  ------------------
37744|  17.2k|                    {
37745|  17.2k|                        break;
37746|  17.2k|                    }
37747|  60.5k|                }
37748|       |
37749|       |                // A byte below 0x60 is a complete code point and needs no
37750|       |                // UTF-8 decoding. The scanner stops only at a control
37751|       |                // character, a quote, or a backslash in that range, so look up
37752|       |                // its escape sequence and write all 8 bytes of the table entry
37753|       |                // straight into the write buffer; only the length stored in the
37754|       |                // last byte of the entry is kept.
37755|   239k|                if (data[i] < 0x60)
  ------------------
  |  Branch (37755:21): [True: 121k, False: 117k]
  ------------------
37756|   121k|                {
37757|       |                    // emit any bytes still pending in string_buffer first to
37758|       |                    // preserve output order
37759|   121k|                    emit_pending(bytes);
37760|       |                    // deliberately not put_buffer(): a fixed 8-byte memcpy
37761|       |                    // has no asserts and no write-through branch, which
37762|       |                    // matters on the hot path
37763|   121k|                    const auto& escape = ascii_escapes()[data[i]];
37764|   121k|                    if (JSON_HEDLEY_UNLIKELY(write_buffer.size() - write_buffer_pos < escape.size()))
  ------------------
  |  | 1697|   121k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 270, False: 121k]
  |  |  ------------------
  ------------------
37765|    270|                    {
37766|    270|                        flush();
37767|    270|                    }
37768|   121k|                    std::memcpy(write_buffer.data() + write_buffer_pos, escape.data(), escape.size());
37769|   121k|                    write_buffer_pos += static_cast<std::size_t>(escape[7]);
37770|   121k|                    bytes_after_last_accept = 0;
37771|   121k|                    undumped_chars = 0;
37772|   121k|                    continue;
37773|   121k|                }
37774|   239k|            }
37775|       |
37776|   202k|            const auto byte = static_cast<std::uint8_t>(s[i]);
37777|       |
37778|   202k|            if (EnsureAscii && state == UTF8_ACCEPT && byte >= 0x80)
  ------------------
  |  Branch (37778:17): [Folded, False: 202k]
  |  Branch (37778:32): [True: 0, False: 0]
  |  Branch (37778:56): [True: 0, False: 0]
  ------------------
37779|      0|            {
37780|       |                // a run of well-formed multi-byte characters is escaped
37781|       |                // straight into the write buffer; an ill-formed sequence
37782|       |                // ends the run and is left to the byte-at-a-time path
37783|      0|                if (bytes != 0)
  ------------------
  |  Branch (37783:21): [True: 0, False: 0]
  ------------------
37784|      0|                {
37785|      0|                    put_buffer(string_buffer, bytes);
37786|      0|                    bytes = 0;
37787|      0|                    bytes_after_last_accept = 0;
37788|      0|                }
37789|      0|                const std::size_t escaped = write_u_escapes(reinterpret_cast<const unsigned char*>(s.data()) + i, s.size() - i);
37790|      0|                if (escaped != 0)
  ------------------
  |  Branch (37790:21): [True: 0, False: 0]
  ------------------
37791|      0|                {
37792|      0|                    bytes_after_last_accept = 0;
37793|      0|                    undumped_chars = 0;
37794|      0|                    i += escaped - 1;
37795|      0|                    continue;
37796|      0|                }
37797|      0|            }
37798|       |
37799|   202k|            switch (decode(state, codepoint, byte))
37800|   202k|            {
37801|      0|                case UTF8_ACCEPT:  // decode found a new code point
  ------------------
  |  Branch (37801:17): [True: 0, False: 202k]
  ------------------
37802|      0|                {
37803|       |                    // the code point is at least 0x60 (smaller ones are handled
37804|       |                    // above) and is not printable ASCII (which the scanner
37805|       |                    // copies). Under EnsureAscii it is DEL (0x7F): every
37806|       |                    // well-formed multi-byte character is escaped by
37807|       |                    // write_u_escapes() above, so decode() only ever accepts a
37808|       |                    // single byte here, and nothing of it was buffered
37809|      0|                    if (EnsureAscii)
  ------------------
  |  Branch (37809:25): [Folded, False: 0]
  ------------------
37810|      0|                    {
37811|      0|                        JSON_ASSERT(codepoint == 0x7F);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (37811:25): [True: 0, False: 0]
  ------------------
37812|      0|                        JSON_ASSERT(bytes == bytes_after_last_accept);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (37812:25): [True: 0, False: 0]
  ------------------
37813|      0|                        write_u_escape(bytes, static_cast<std::uint16_t>(codepoint));
37814|      0|                    }
37815|      0|                    else
37816|      0|                    {
37817|       |                        // copy byte to buffer (all previous bytes of the
37818|       |                        // sequence have been copied in the default case below)
37819|      0|                        string_buffer[bytes++] = s[i]; // LCOV_EXCL_LINE (well-formed sequences are copied in runs)
37820|      0|                    }
37821|       |
37822|      0|                    reserve_string_buffer(bytes);
37823|       |
37824|       |                    // remember the byte position of this accept
37825|      0|                    bytes_after_last_accept = bytes;
37826|      0|                    undumped_chars = 0;
37827|      0|                    break;
37828|      0|                }
37829|       |
37830|   113k|                case UTF8_REJECT:  // decode found invalid UTF-8 byte
  ------------------
  |  Branch (37830:17): [True: 113k, False: 89.1k]
  ------------------
37831|   113k|                {
37832|   113k|                    switch (error_handler)
37833|   113k|                    {
37834|  1.15k|                        case error_handler_t::strict:
  ------------------
  |  Branch (37834:25): [True: 1.15k, False: 111k]
  ------------------
37835|  1.15k|                        {
37836|  1.15k|                            JSON_THROW(type_error::create(exception_id::invalid_utf8, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", detail::hex_byte(byte)), nullptr));
  ------------------
  |  | 2608|  1.15k|    #define JSON_THROW(exception) throw exception
  ------------------
37837|      0|                        }
37838|       |
37839|      0|                        case error_handler_t::ignore:
  ------------------
  |  Branch (37839:25): [True: 0, False: 113k]
  ------------------
37840|      0|                        case error_handler_t::replace:
  ------------------
  |  Branch (37840:25): [True: 0, False: 113k]
  ------------------
37841|      0|                        {
37842|       |                            // in case we saw this character the first time, we
37843|       |                            // would like to read it again, because the byte
37844|       |                            // may be OK for itself, but just not OK for the
37845|       |                            // previous sequence
37846|      0|                            if (undumped_chars > 0)
  ------------------
  |  Branch (37846:33): [True: 0, False: 0]
  ------------------
37847|      0|                            {
37848|      0|                                --i;
37849|      0|                            }
37850|       |
37851|       |                            // reset length buffer to the last accepted index;
37852|       |                            // thus removing/ignoring the invalid characters
37853|      0|                            bytes = bytes_after_last_accept;
37854|       |
37855|      0|                            if (error_handler == error_handler_t::replace)
  ------------------
  |  Branch (37855:33): [True: 0, False: 0]
  ------------------
37856|      0|                            {
37857|       |                                // add a replacement character
37858|      0|                                if (EnsureAscii)
  ------------------
  |  Branch (37858:37): [Folded, False: 0]
  ------------------
37859|      0|                                {
37860|      0|                                    string_buffer[bytes++] = '\\';
37861|      0|                                    string_buffer[bytes++] = 'u';
37862|      0|                                    string_buffer[bytes++] = 'f';
37863|      0|                                    string_buffer[bytes++] = 'f';
37864|      0|                                    string_buffer[bytes++] = 'f';
37865|      0|                                    string_buffer[bytes++] = 'd';
37866|      0|                                }
37867|      0|                                else
37868|      0|                                {
37869|      0|                                    string_buffer[bytes++] = '\xEF';
37870|      0|                                    string_buffer[bytes++] = '\xBF';
37871|      0|                                    string_buffer[bytes++] = '\xBD';
37872|      0|                                }
37873|       |
37874|      0|                                reserve_string_buffer(bytes);
37875|       |
37876|      0|                                bytes_after_last_accept = bytes;
37877|      0|                            }
37878|       |
37879|      0|                            undumped_chars = 0;
37880|       |
37881|       |                            // continue processing the string
37882|      0|                            state = UTF8_ACCEPT;
37883|      0|                            break;
37884|      0|                        }
37885|       |
37886|   111k|                        case error_handler_t::keep:
  ------------------
  |  Branch (37886:25): [True: 111k, False: 1.15k]
  ------------------
37887|   111k|                        {
37888|       |                            // the bytes of this (now abandoned) ill-formed
37889|       |                            // sequence seen so far are already buffered below
37890|       |                            // and are kept unchanged in the output
37891|   111k|                            if (undumped_chars > 0)
  ------------------
  |  Branch (37891:33): [True: 68.8k, False: 43.0k]
  ------------------
37892|  68.8k|                            {
37893|       |                                // the byte that ended the sequence may be OK
37894|       |                                // for itself (e.g., a quote that must still be
37895|       |                                // escaped, or the lead byte of a well-formed
37896|       |                                // code point), so read it again
37897|  68.8k|                                --i;
37898|  68.8k|                            }
37899|  43.0k|                            else
37900|  43.0k|                            {
37901|       |                                // a byte that cannot start a sequence (e.g.,
37902|       |                                // 0xFF or a stray continuation byte) is kept
37903|       |                                // as well
37904|  43.0k|                                string_buffer[bytes++] = s[i];
37905|  43.0k|                            }
37906|       |
37907|   111k|                            reserve_string_buffer(bytes);
37908|       |
37909|   111k|                            bytes_after_last_accept = bytes;
37910|   111k|                            undumped_chars = 0;
37911|       |
37912|       |                            // continue processing the string
37913|   111k|                            state = UTF8_ACCEPT;
37914|   111k|                            break;
37915|      0|                        }
37916|       |
37917|      0|                        default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (37917:25): [True: 0, False: 113k]
  ------------------
37918|      0|                            JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (37918:29): [Folded, False: 0]
  ------------------
37919|   113k|                    }
37920|   111k|                    break;
37921|   113k|                }
37922|       |
37923|   111k|                default:  // decode found yet incomplete multibyte code point
  ------------------
  |  Branch (37923:17): [True: 89.1k, False: 113k]
  ------------------
37924|  89.1k|                {
37925|  89.1k|                    if (!EnsureAscii || error_handler == error_handler_t::keep)
  ------------------
  |  Branch (37925:25): [True: 89.1k, Folded]
  |  Branch (37925:41): [True: 0, False: 0]
  ------------------
37926|  89.1k|                    {
37927|       |                        // code point will not be escaped (or will be kept as
37928|       |                        // is if it turns out to be ill-formed) - copy byte to
37929|       |                        // buffer; dropped again above if it decodes to a
37930|       |                        // well-formed code point that needs \u-escaping
37931|  89.1k|                        string_buffer[bytes++] = s[i];
37932|  89.1k|                    }
37933|  89.1k|                    ++undumped_chars;
37934|  89.1k|                    break;
37935|   113k|                }
37936|   202k|            }
37937|   202k|        }
37938|       |
37939|       |        // we finished processing the string
37940|  67.9k|        if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT))
  ------------------
  |  | 1696|  67.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 63.1k, False: 4.77k]
  |  |  ------------------
  ------------------
37941|  63.1k|        {
37942|       |            // write buffer
37943|  63.1k|            if (bytes > 0)
  ------------------
  |  Branch (37943:17): [True: 3.55k, False: 59.5k]
  ------------------
37944|  3.55k|            {
37945|  3.55k|                put_buffer(string_buffer, bytes);
37946|  3.55k|            }
37947|  63.1k|        }
37948|  4.77k|        else
37949|  4.77k|        {
37950|       |            // we finish reading, but do not accept: string was incomplete
37951|  4.77k|            switch (error_handler)
37952|  4.77k|            {
37953|    124|                case error_handler_t::strict:
  ------------------
  |  Branch (37953:17): [True: 124, False: 4.65k]
  ------------------
37954|    124|                {
37955|    124|                    JSON_THROW(type_error::create(exception_id::invalid_utf8, concat("incomplete UTF-8 string; last byte: 0x", detail::hex_byte(static_cast<std::uint8_t>(s[s.size() - 1]))), nullptr));
  ------------------
  |  | 2608|    124|    #define JSON_THROW(exception) throw exception
  ------------------
37956|      0|                }
37957|       |
37958|      0|                case error_handler_t::ignore:
  ------------------
  |  Branch (37958:17): [True: 0, False: 4.77k]
  ------------------
37959|      0|                {
37960|       |                    // write all accepted bytes
37961|      0|                    put_buffer(string_buffer, bytes_after_last_accept);
37962|      0|                    break;
37963|      0|                }
37964|       |
37965|      0|                case error_handler_t::replace:
  ------------------
  |  Branch (37965:17): [True: 0, False: 4.77k]
  ------------------
37966|      0|                {
37967|       |                    // write all accepted bytes
37968|      0|                    put_buffer(string_buffer, bytes_after_last_accept);
37969|       |                    // add a replacement character
37970|      0|                    if (EnsureAscii)
  ------------------
  |  Branch (37970:25): [Folded, False: 0]
  ------------------
37971|      0|                    {
37972|      0|                        put_literal("\\ufffd");
37973|      0|                    }
37974|      0|                    else
37975|      0|                    {
37976|      0|                        put_literal("\xEF\xBF\xBD");
37977|      0|                    }
37978|      0|                    break;
37979|      0|                }
37980|       |
37981|  4.65k|                case error_handler_t::keep:
  ------------------
  |  Branch (37981:17): [True: 4.65k, False: 124]
  ------------------
37982|  4.65k|                {
37983|       |                    // write the ill-formed trailing bytes as is; they were
37984|       |                    // buffered above regardless of EnsureAscii
37985|  4.65k|                    put_buffer(string_buffer, bytes);
37986|  4.65k|                    break;
37987|      0|                }
37988|       |
37989|      0|                default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (37989:17): [True: 0, False: 4.77k]
  ------------------
37990|       |                    JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (37990:21): [Folded, False: 0]
  ------------------
37991|  4.77k|            }
37992|  4.77k|        }
37993|  67.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail15string_bulk_runEPKhm:
13295|   266k|{
13296|       |#if defined(JSON_USE_SIMDUTF) && defined(JSON_HAS_CPP_17)
13297|       |    const std::size_t run = find_string_delimiter(data, n);
13298|       |    if (run != 0 && simdutf::validate_utf8(reinterpret_cast<const char*>(data), run))
13299|       |    {
13300|       |        return run;
13301|       |    }
13302|       |#endif
13303|   266k|    return scalar_string_bulk_run(data, n);
13304|   266k|}
_ZN8nlohmann16json_abi_v3_12_06detail22scalar_string_bulk_runEPKhm:
13216|   266k|{
13217|   266k|    const unsigned char* const e = data + n;
13218|   266k|    const unsigned char* p = data;
13219|   266k|    while (p != e)
  ------------------
  |  Branch (13219:12): [True: 266k, False: 0]
  ------------------
13220|   266k|    {
13221|   266k|#if JSON_SCAN_VECTOR
13222|   266k|        p = plain_run_end(p, e);
13223|       |#else
13224|       |        p += find_string_special(p, static_cast<std::size_t>(e - p));
13225|       |#endif
13226|   266k|        if (p == e || *p < 0x80u)
  ------------------
  |  Branch (13226:13): [True: 14.1k, False: 252k]
  |  Branch (13226:23): [True: 126k, False: 125k]
  ------------------
13227|   140k|        {
13228|   140k|            break; // end of buffer, or a quote/escape/control byte
13229|   140k|        }
13230|   125k|#if JSON_SCAN_VECTOR_UTF8
13231|   125k|#if JSON_SCAN_SSSE3_DISPATCH
13232|   125k|        if (JSON_HEDLEY_LIKELY(cpu_has_ssse3()))
  ------------------
  |  | 1696|   125k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 125k, False: 0]
  |  |  ------------------
  ------------------
13233|   125k|#endif
13234|   125k|        {
13235|   125k|            return static_cast<std::size_t>(scan_string_vector(p, e) - data);
13236|   125k|        }
13237|      0|#endif
13238|      0|#if !JSON_SCAN_VECTOR_UTF8 || JSON_SCAN_SSSE3_DISPATCH
13239|       |        // a run of multi-byte sequences (e.g. CJK text) is validated sequence
13240|       |        // by sequence without searching for the next special byte in between
13241|      0|        do
13242|      0|        {
13243|      0|            const std::size_t seq = validate_one_utf8(p, static_cast<std::size_t>(e - p));
13244|      0|            if (seq == 0)
  ------------------
  |  Branch (13244:17): [True: 0, False: 0]
  ------------------
13245|      0|            {
13246|      0|                return static_cast<std::size_t>(p - data); // ill-formed or truncated: let the byte path diagnose it
13247|      0|            }
13248|      0|            p += seq;
13249|      0|        }
13250|      0|        while (p != e && *p >= 0x80u);
  ------------------
  |  Branch (13250:16): [True: 0, False: 0]
  |  Branch (13250:26): [True: 0, False: 0]
  ------------------
13251|      0|#endif
13252|      0|    }
13253|   140k|    return static_cast<std::size_t>(p - data);
13254|   266k|}
_ZN8nlohmann16json_abi_v3_12_06detail13plain_run_endEPKhS3_:
13181|   266k|{
13182|   266k|    constexpr int prefix_words = JSON_SCAN_NEON ? 4 : 1;
  ------------------
  |  |12448|   266k|    #define JSON_SCAN_NEON 0
  |  |  ------------------
  |  |  |  Branch (12448:28): [Folded, False: 266k]
  |  |  ------------------
  ------------------
13183|   273k|    for (int words = prefix_words; words > 0 && e - p >= 8; --words)
  ------------------
  |  Branch (13183:36): [True: 266k, False: 7.48k]
  |  Branch (13183:49): [True: 163k, False: 102k]
  ------------------
13184|   163k|    {
13185|   163k|        const std::uint64_t special = swar_string_special(read_eight_bytes(p));
13186|   163k|        if (special != 0)
  ------------------
  |  Branch (13186:13): [True: 156k, False: 7.48k]
  ------------------
13187|   156k|        {
13188|   156k|            return p + (static_cast<std::size_t>(count_trailing_zeros(special)) / 8);
13189|   156k|        }
13190|  7.48k|        p += 8;
13191|  7.48k|    }
13192|       |    // the vector loop only for 16 bytes or more: the serializer passes a
13193|       |    // string without its closing quote, so most of its runs end at e, and a
13194|       |    // call of the out-of-line NEON loop for a shorter rest made dump() up to
13195|       |    // 10% slower
13196|   110k|    if (e - p >= 16)
  ------------------
  |  Branch (13196:9): [True: 4.04k, False: 106k]
  ------------------
13197|  4.04k|    {
13198|  4.04k|        p = vector_plain_run_long(p, e);
13199|  4.04k|        if (e - p >= 16)
  ------------------
  |  Branch (13199:13): [True: 3.30k, False: 740]
  ------------------
13200|  3.30k|        {
13201|  3.30k|            return p; // the vector loop stopped at a special byte
13202|  3.30k|        }
13203|  4.04k|    }
13204|   106k|    return p + find_string_special(p, static_cast<std::size_t>(e - p));
13205|   110k|}
_ZN8nlohmann16json_abi_v3_12_06detail19swar_string_specialEm:
12852|   165k|{
12853|   165k|    constexpr std::uint64_t ones = 0x0101010101010101ull;
12854|   165k|    constexpr std::uint64_t high = 0x8080808080808080ull;
12855|   165k|    const std::uint64_t q = v ^ 0x2222222222222222ull; // '"'  (0x22)
12856|   165k|    const std::uint64_t b = v ^ 0x5C5C5C5C5C5C5C5Cull; // '\\' (0x5C)
12857|       |    // The usual test for a zero byte is (x - ones) & ~x & high. The `& ~x`
12858|       |    // only removes bytes from 0x80, and `v & high` flags those anyway, so it
12859|       |    // can be dropped. Clang finds this reduction itself; GCC does not.
12860|   165k|    return ((q - ones) | (b - ones) | (v - 0x2020202020202020ull) | v) & high;
12861|   165k|}
_ZN8nlohmann16json_abi_v3_12_06detail21vector_plain_run_longEPKhS3_:
12547|  4.04k|{
12548|  4.04k|    return vector_plain_run(p, e);
12549|  4.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail16vector_plain_runEPKhS3_:
12507|  4.04k|{
12508|  6.56k|    while (e - p >= 16)
  ------------------
  |  Branch (12508:12): [True: 6.19k, False: 371]
  ------------------
12509|  6.19k|    {
12510|       |#if JSON_SCAN_NEON
12511|       |        const uint8x16_t in = vld1q_u8(p);
12512|       |        const uint8x16_t special = vorrq_u8(vceqq_u8(in, vdupq_n_u8('\\')),
12513|       |                                            vcltq_s8(vreinterpretq_s8_u8(veorq_u8(in, vdupq_n_u8(2))), vdupq_n_s8(33)));
12514|       |        // one nibble per byte (the usual NEON replacement of x86's movemask, see
12515|       |        // D. Kutenin, "Porting x86 vector bitmask optimizations to Arm NEON", 2022)
12516|       |        const std::uint64_t bits = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(special), 4)), 0);
12517|       |        if (bits != 0)
12518|       |        {
12519|       |            return p + (count_trailing_zeros(bits) >> 2u);
12520|       |        }
12521|       |#else
12522|  6.19k|        const __m128i in = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(p))); // NOLINT(bugprone-casting-through-void)
12523|  6.19k|        const __m128i special = _mm_or_si128(_mm_cmpeq_epi8(in, _mm_set1_epi8('\\')),
12524|  6.19k|                                             _mm_cmplt_epi8(_mm_xor_si128(in, _mm_set1_epi8(2)), _mm_set1_epi8(33)));
12525|  6.19k|        const auto bits = static_cast<std::uint64_t>(static_cast<unsigned>(_mm_movemask_epi8(special)));
12526|  6.19k|        if (bits != 0)
  ------------------
  |  Branch (12526:13): [True: 3.67k, False: 2.52k]
  ------------------
12527|  3.67k|        {
12528|  3.67k|            return p + count_trailing_zeros(bits);
12529|  3.67k|        }
12530|  2.52k|#endif
12531|  2.52k|        p += 16;
12532|  2.52k|    }
12533|    371|    return p;
12534|  4.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail19find_string_specialEPKhm:
12866|   106k|{
12867|   106k|    std::size_t i = 0;
12868|   107k|    for (; i + 8 <= n; i += 8)
  ------------------
  |  Branch (12868:12): [True: 2.09k, False: 105k]
  ------------------
12869|  2.09k|    {
12870|  2.09k|        const std::uint64_t special = swar_string_special(read_eight_bytes(data + i));
12871|  2.09k|        if (special != 0)
  ------------------
  |  Branch (12871:13): [True: 1.51k, False: 582]
  ------------------
12872|  1.51k|        {
12873|       |            // the lowest flagged byte is the first special one: the borrows of
12874|       |            // the subtractions can only flag bytes above a true hit
12875|  1.51k|            return i + (static_cast<std::size_t>(count_trailing_zeros(special)) / 8);
12876|  1.51k|        }
12877|  2.09k|    }
12878|   147k|    for (; i < n; ++i)
  ------------------
  |  Branch (12878:12): [True: 133k, False: 14.1k]
  ------------------
12879|   133k|    {
12880|   133k|        if (is_string_special(data[i]))
  ------------------
  |  Branch (12880:13): [True: 91.1k, False: 42.4k]
  ------------------
12881|  91.1k|        {
12882|  91.1k|            return i;
12883|  91.1k|        }
12884|   133k|    }
12885|  14.1k|    return n;
12886|   105k|}
_ZN8nlohmann16json_abi_v3_12_06detail17is_string_specialEh:
12845|   145k|{
12846|   145k|    return c == '\"' || c == '\\' || c < 0x20u || c >= 0x80u;
  ------------------
  |  Branch (12846:12): [True: 1.74k, False: 143k]
  |  Branch (12846:25): [True: 3.06k, False: 140k]
  |  Branch (12846:38): [True: 56.6k, False: 83.7k]
  |  Branch (12846:51): [True: 30.9k, False: 52.7k]
  ------------------
12847|   145k|}
_ZN8nlohmann16json_abi_v3_12_06detail13cpu_has_ssse3Ev:
12574|   125k|{
12575|   125k|    static std::atomic<int> known{0}; // 0: not asked yet, 1: no, 2: yes
12576|   125k|    int state = known.load(std::memory_order_relaxed);
12577|   125k|    if (JSON_HEDLEY_UNLIKELY(state == 0))
  ------------------
  |  | 1697|   125k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1, False: 125k]
  |  |  ------------------
  ------------------
12578|      1|    {
12579|      1|        state = cpu_ssse3() ? 2 : 1;
  ------------------
  |  Branch (12579:17): [True: 1, False: 0]
  ------------------
12580|      1|        known.store(state, std::memory_order_relaxed);
12581|      1|    }
12582|   125k|    return state == 2;
12583|   125k|}
_ZN8nlohmann16json_abi_v3_12_06detail9cpu_ssse3Ev:
12555|      1|{
12556|       |#if defined(_MSC_VER) && !defined(__clang__)
12557|       |    std::array<int, 4> regs {{}};
12558|       |    __cpuid(regs.data(), 1);
12559|       |    return (static_cast<unsigned>(regs[2]) & (1u << 9u)) != 0;
12560|       |#else
12561|      1|    unsigned eax = 0;
12562|      1|    unsigned ebx = 0;
12563|      1|    unsigned ecx = 0;
12564|      1|    unsigned edx = 0;
12565|      1|    return __get_cpuid(1, &eax, &ebx, &ecx, &edx) != 0 && (ecx & (1u << 9u)) != 0;
  ------------------
  |  Branch (12565:12): [True: 1, False: 0]
  |  Branch (12565:59): [True: 1, False: 0]
  ------------------
12566|      1|#endif
12567|      1|}
_ZN8nlohmann16json_abi_v3_12_06detail18scan_string_vectorEPKhS3_:
13164|   125k|{
13165|   125k|    const unsigned char* block = p;
13166|   125k|    if (vector_utf8_run(p, e, block))
  ------------------
  |  Branch (13166:9): [True: 669, False: 124k]
  ------------------
13167|    669|    {
13168|    669|        return block;
13169|    669|    }
13170|   124k|    return scan_string_finish(p, block, e);
13171|   125k|}
_ZN8nlohmann16json_abi_v3_12_06detail15vector_utf8_runEPKhS3_RS3_:
12650|   125k|{
12651|   125k|    using lookup = utf8_lookup4<>;
12652|   125k|    const unsigned char* block = p;
12653|       |#if JSON_SCAN_NEON
12654|       |    const uint8x16_t t1h = vld1q_u8(lookup::byte_1_high.data());
12655|       |    const uint8x16_t t1l = vld1q_u8(lookup::byte_1_low.data());
12656|       |    const uint8x16_t t2h = vld1q_u8(lookup::byte_2_high.data());
12657|       |    uint8x16_t prev = vdupq_n_u8(0);
12658|       |    while (e - block >= 16)
12659|       |    {
12660|       |        const uint8x16_t in = vld1q_u8(block);
12661|       |        // the quote and the control characters: (c ^ 2) < 33 (see vector_plain_run())
12662|       |        const uint8x16_t special = vorrq_u8(vceqq_u8(in, vdupq_n_u8('\\')), vcltq_u8(veorq_u8(in, vdupq_n_u8(2)), vdupq_n_u8(33)));
12663|       |        const uint8x16_t prev1 = vextq_u8(prev, in, 15);
12664|       |        const uint8x16_t sc = vandq_u8(vandq_u8(vqtbl1q_u8(t1h, vshrq_n_u8(prev1, 4)), vqtbl1q_u8(t1l, vandq_u8(prev1, vdupq_n_u8(0x0F)))), vqtbl1q_u8(t2h, vshrq_n_u8(in, 4)));
12665|       |        const uint8x16_t must23 = vorrq_u8(vqsubq_u8(vextq_u8(prev, in, 14), vdupq_n_u8(0xE0 - 0x80)), vqsubq_u8(vextq_u8(prev, in, 13), vdupq_n_u8(0xF0 - 0x80)));
12666|       |        const uint8x16_t err = veorq_u8(vandq_u8(must23, vdupq_n_u8(0x80)), sc);
12667|       |        const std::uint64_t special_bits = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(special), 4)), 0);
12668|       |        const std::uint64_t err_bits = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(vtstq_u8(err, err)), 4)), 0);
12669|       |        if (special_bits != 0)
12670|       |        {
12671|       |            // errors up to the special byte count (an incomplete sequence
12672|       |            // before a quote shows at the quote); the bytes after it do not
12673|       |            const unsigned k = static_cast<unsigned>(count_trailing_zeros(special_bits)) >> 2u;
12674|       |            const std::uint64_t upto = k == 15 ? ~std::uint64_t{0} :
12675|       |                                       (std::uint64_t{1} << (4u * (k + 1u))) - 1u;
12676|       |            if ((err_bits & upto) == 0)
12677|       |            {
12678|       |                block_out = block + k;
12679|       |                return true;
12680|       |            }
12681|       |            break;
12682|       |        }
12683|       |        if (err_bits != 0)
12684|       |        {
12685|       |            break;
12686|       |        }
12687|       |        prev = in;
12688|       |        block += 16;
12689|       |    }
12690|       |#else
12691|       |    // the same with SSSE3 (pshufb for the table lookups; nibbles from 16-bit
12692|       |    // shifts, as there are no byte shifts)
12693|   125k|    const __m128i t1h = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(lookup::byte_1_high.data()))); // NOLINT(bugprone-casting-through-void)
12694|   125k|    const __m128i t1l = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(lookup::byte_1_low.data()))); // NOLINT(bugprone-casting-through-void)
12695|   125k|    const __m128i t2h = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(lookup::byte_2_high.data()))); // NOLINT(bugprone-casting-through-void)
12696|   125k|    const __m128i nibble = _mm_set1_epi8(0x0F);
12697|   125k|    const __m128i zero = _mm_setzero_si128();
12698|   125k|    __m128i prev = zero;
12699|   126k|    while (e - block >= 16)
  ------------------
  |  Branch (12699:12): [True: 81.2k, False: 45.1k]
  ------------------
12700|  81.2k|    {
12701|  81.2k|        const __m128i in = _mm_loadu_si128(static_cast<const __m128i*>(static_cast<const void*>(block))); // NOLINT(bugprone-casting-through-void)
12702|       |        // the quote and the control characters: (c ^ 2) < 33, that is,
12703|       |        // (c ^ 2) - 32 saturates to 0 (see vector_plain_run())
12704|  81.2k|        const __m128i special = _mm_or_si128(_mm_cmpeq_epi8(in, _mm_set1_epi8('\\')),
12705|  81.2k|                                             _mm_cmpeq_epi8(_mm_subs_epu8(_mm_xor_si128(in, _mm_set1_epi8(2)), _mm_set1_epi8(32)), zero));
12706|  81.2k|        const __m128i prev1 = _mm_alignr_epi8(in, prev, 15);
12707|  81.2k|        const __m128i sc = _mm_and_si128(_mm_and_si128(_mm_shuffle_epi8(t1h, _mm_and_si128(_mm_srli_epi16(prev1, 4), nibble)),
12708|  81.2k|                                         _mm_shuffle_epi8(t1l, _mm_and_si128(prev1, nibble))),
12709|  81.2k|                                         _mm_shuffle_epi8(t2h, _mm_and_si128(_mm_srli_epi16(in, 4), nibble)));
12710|  81.2k|        const __m128i must23 = _mm_or_si128(_mm_subs_epu8(_mm_alignr_epi8(in, prev, 14), _mm_set1_epi8(0xE0 - 0x80)),
12711|  81.2k|                                            _mm_subs_epu8(_mm_alignr_epi8(in, prev, 13), _mm_set1_epi8(0xF0 - 0x80)));
12712|  81.2k|        const __m128i err = _mm_xor_si128(_mm_and_si128(must23, _mm_set1_epi8(static_cast<char>(-128))), sc);
12713|  81.2k|        const auto special_bits = static_cast<unsigned>(_mm_movemask_epi8(special));
12714|  81.2k|        const auto err_bits = ~static_cast<unsigned>(_mm_movemask_epi8(_mm_cmpeq_epi8(err, zero))) & 0xFFFFu;
12715|  81.2k|        if (special_bits != 0)
  ------------------
  |  Branch (12715:13): [True: 34.8k, False: 46.3k]
  ------------------
12716|  34.8k|        {
12717|  34.8k|            const auto k = static_cast<unsigned>(count_trailing_zeros(static_cast<std::uint64_t>(special_bits)));
12718|  34.8k|            if ((err_bits & ((2u << k) - 1u)) == 0)
  ------------------
  |  Branch (12718:17): [True: 669, False: 34.1k]
  ------------------
12719|    669|            {
12720|    669|                block_out = block + k;
12721|    669|                return true;
12722|    669|            }
12723|  34.1k|            break;
12724|  34.8k|        }
12725|  46.3k|        if (err_bits != 0)
  ------------------
  |  Branch (12725:13): [True: 45.3k, False: 1.04k]
  ------------------
12726|  45.3k|        {
12727|  45.3k|            break;
12728|  45.3k|        }
12729|  1.04k|        prev = in;
12730|  1.04k|        block += 16;
12731|  1.04k|    }
12732|   124k|#endif
12733|   124k|    block_out = block;
12734|   124k|    return false;
12735|   125k|}
_ZN8nlohmann16json_abi_v3_12_06detail18scan_string_finishEPKhS3_S3_:
13122|   124k|{
13123|   125k|    for (int i = 1; i <= 3 && block - i >= p; ++i)
  ------------------
  |  Branch (13123:21): [True: 125k, False: 156]
  |  Branch (13123:31): [True: 1.37k, False: 123k]
  ------------------
13124|  1.37k|    {
13125|  1.37k|        const unsigned char c = block[-i];
13126|  1.37k|        if (c < 0x80)
  ------------------
  |  Branch (13126:13): [True: 337, False: 1.03k]
  ------------------
13127|    337|        {
13128|    337|            break;
13129|    337|        }
13130|  1.03k|        if (c >= 0xC0)
  ------------------
  |  Branch (13130:13): [True: 273, False: 766]
  ------------------
13131|    273|        {
13132|    273|            const int len = 2 + static_cast<int>(c >= 0xE0) + static_cast<int>(c >= 0xF0);
13133|    273|            if (len > i)
  ------------------
  |  Branch (13133:17): [True: 139, False: 134]
  ------------------
13134|    139|            {
13135|    139|                block -= i;
13136|    139|            }
13137|    273|            break;
13138|    273|        }
13139|  1.03k|    }
13140|   142k|    for (p = block; p != e;)
  ------------------
  |  Branch (13140:21): [True: 139k, False: 3.47k]
  ------------------
13141|   139k|    {
13142|   139k|        if (*p < 0x80)
  ------------------
  |  Branch (13142:13): [True: 11.6k, False: 127k]
  ------------------
13143|  11.6k|        {
13144|  11.6k|            if (is_string_special(*p))
  ------------------
  |  Branch (13144:17): [True: 1.30k, False: 10.3k]
  ------------------
13145|  1.30k|            {
13146|  1.30k|                return p;
13147|  1.30k|            }
13148|  10.3k|            ++p;
13149|  10.3k|            continue;
13150|  11.6k|        }
13151|   127k|        const std::size_t n = validate_one_utf8(p, static_cast<std::size_t>(e - p));
13152|   127k|        if (n == 0)
  ------------------
  |  Branch (13152:13): [True: 119k, False: 7.51k]
  ------------------
13153|   119k|        {
13154|   119k|            return p;
13155|   119k|        }
13156|  7.51k|        p += n;
13157|  7.51k|    }
13158|  3.47k|    return p;
13159|   124k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE8put_charEc:
38008|  2.28M|    {
38009|  2.28M|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos == write_buffer.size()))
  ------------------
  |  | 1697|  2.28M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1.02k, False: 2.28M]
  |  |  ------------------
  ------------------
38010|  1.02k|        {
38011|  1.02k|            flush();
38012|  1.02k|        }
38013|  2.28M|        write_buffer[write_buffer_pos++] = c;
38014|  2.28M|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE14put_object_keyILm3EEEvRKSC_RAT__Kc:
37388|   214k|    {
37389|   214k|#if JSON_LITTLE_ENDIAN_TARGET
37390|   214k|        if (put_short_quoted(s, tail))
  ------------------
  |  Branch (37390:13): [True: 193k, False: 20.2k]
  ------------------
37391|   193k|        {
37392|   193k|            return;
37393|   193k|        }
37394|  20.2k|#endif
37395|  20.2k|        put_char('"');
37396|  20.2k|        dump_escaped(s);
37397|  20.2k|        put_literal(tail);
37398|  20.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE16put_short_quotedILm3EEEbRKSC_RAT__Kc:
37442|   214k|    {
37443|   214k|        const std::size_t n = s.size();
37444|   214k|        if (n > short_string_max || write_buffer_pos + n + N > write_buffer.size())
  ------------------
  |  Branch (37444:13): [True: 856, False: 213k]
  |  Branch (37444:37): [True: 345, False: 212k]
  ------------------
37445|  1.20k|        {
37446|  1.20k|            return false;
37447|  1.20k|        }
37448|       |
37449|   212k|        char* d = write_buffer.data() + write_buffer_pos + 1;
37450|   212k|        const char* const p = s.data();
37451|       |
37452|   212k|        if (n >= 8)
  ------------------
  |  Branch (37452:13): [True: 132k, False: 80.1k]
  ------------------
37453|   132k|        {
37454|   132k|#if JSON_SCAN_VECTOR
37455|   132k|            if (!(n >= 16 ? copy_plain_vectors(d, p, n) : copy_plain_halves(d, p, n)))
  ------------------
  |  Branch (37455:17): [True: 3.56k, False: 129k]
  |  Branch (37455:19): [True: 1.24k, False: 131k]
  ------------------
37456|  3.56k|            {
37457|  3.56k|                return false;
37458|  3.56k|            }
37459|       |#else
37460|       |            const auto a = load_word<std::uint64_t>(p);
37461|       |            const auto b = load_word<std::uint64_t>(p + n - 8);
37462|       |            if ((swar_not_plain(a) | swar_not_plain(b)) != 0)
37463|       |            {
37464|       |                return false;
37465|       |            }
37466|       |            store_word(d, a);
37467|       |            store_word(d + n - 8, b);
37468|       |#endif
37469|   132k|        }
37470|  80.1k|        else if (n >= 4)
  ------------------
  |  Branch (37470:18): [True: 1.26k, False: 78.8k]
  ------------------
37471|  1.26k|        {
37472|  1.26k|            const auto a = load_word<std::uint32_t>(p);
37473|  1.26k|            const auto b = load_word<std::uint32_t>(p + n - 4);
37474|       |            // the bytes above the string are filled with a plain character
37475|  1.26k|            const std::uint64_t w = a | (static_cast<std::uint64_t>(b) << (8 * (n - 4)))
37476|  1.26k|                                    | (0x4141414141414141ull << (8 * n));
37477|  1.26k|            if (swar_not_plain(w) != 0)
  ------------------
  |  Branch (37477:17): [True: 1.15k, False: 117]
  ------------------
37478|  1.15k|            {
37479|  1.15k|                return false;
37480|  1.15k|            }
37481|    117|            store_word(d, a);
37482|    117|            store_word(d + n - 4, b);
37483|    117|        }
37484|  78.8k|        else if (n >= 2)
  ------------------
  |  Branch (37484:18): [True: 3.62k, False: 75.2k]
  ------------------
37485|  3.62k|        {
37486|  3.62k|            const auto a = load_word<std::uint16_t>(p);
37487|  3.62k|            const auto b = load_word<std::uint16_t>(p + n - 2);
37488|  3.62k|            const std::uint64_t w = a | (static_cast<std::uint64_t>(b) << (8 * (n - 2)))
37489|  3.62k|                                    | (0x4141414141414141ull << (8 * n));
37490|  3.62k|            if (swar_not_plain(w) != 0)
  ------------------
  |  Branch (37490:17): [True: 2.95k, False: 663]
  ------------------
37491|  2.95k|            {
37492|  2.95k|                return false;
37493|  2.95k|            }
37494|    663|            store_word(d, a);
37495|    663|            store_word(d + n - 2, b);
37496|    663|        }
37497|  75.2k|        else if (n == 1)
  ------------------
  |  Branch (37497:18): [True: 35.0k, False: 40.1k]
  ------------------
37498|  35.0k|        {
37499|  35.0k|            const std::uint64_t w = static_cast<std::uint64_t>(static_cast<unsigned char>(p[0])) | (0x4141414141414141ull << 8u);
37500|  35.0k|            if (swar_not_plain(w) != 0)
  ------------------
  |  Branch (37500:17): [True: 11.3k, False: 23.7k]
  ------------------
37501|  11.3k|            {
37502|  11.3k|                return false;
37503|  11.3k|            }
37504|  23.7k|            *d = p[0];
37505|  23.7k|        }
37506|       |
37507|   193k|        d[-1] = '"';
37508|   193k|        std::memcpy(d + n, tail, N - 1);
37509|   193k|        write_buffer_pos += n + N;
37510|   193k|        return true;
37511|   212k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11dump_scalarERKSG_m:
37200|  1.00M|    {
37201|  1.00M|        switch (val.m_data.m_type)
37202|  1.00M|        {
37203|   138k|            case value_t::string:
  ------------------
  |  Branch (37203:13): [True: 138k, False: 870k]
  ------------------
37204|   138k|            {
37205|   138k|                dump_string_value(*val.m_data.m_value.string);
37206|   138k|                return;
37207|      0|            }
37208|       |
37209|  11.9k|            case value_t::binary:
  ------------------
  |  Branch (37209:13): [True: 11.9k, False: 997k]
  ------------------
37210|  11.9k|            {
37211|  11.9k|                dump_binary_value(current_indent, *val.m_data.m_value.binary);
37212|  11.9k|                return;
37213|      0|            }
37214|       |
37215|   118k|            case value_t::boolean:
  ------------------
  |  Branch (37215:13): [True: 118k, False: 890k]
  ------------------
37216|   118k|            {
37217|   118k|                if (val.m_data.m_value.boolean)
  ------------------
  |  Branch (37217:21): [True: 73.8k, False: 44.1k]
  ------------------
37218|  73.8k|                {
37219|  73.8k|                    put_literal("true");
37220|  73.8k|                }
37221|  44.1k|                else
37222|  44.1k|                {
37223|  44.1k|                    put_literal("false");
37224|  44.1k|                }
37225|   118k|                return;
37226|      0|            }
37227|       |
37228|   172k|            case value_t::number_integer:
  ------------------
  |  Branch (37228:13): [True: 172k, False: 836k]
  ------------------
37229|   172k|            {
37230|   172k|                dump_signed_value(val.m_data.m_value.number_integer);
37231|   172k|                return;
37232|      0|            }
37233|       |
37234|   210k|            case value_t::number_unsigned:
  ------------------
  |  Branch (37234:13): [True: 210k, False: 798k]
  ------------------
37235|   210k|            {
37236|   210k|                dump_unsigned_value(val.m_data.m_value.number_unsigned);
37237|   210k|                return;
37238|      0|            }
37239|       |
37240|   273k|            case value_t::number_float:
  ------------------
  |  Branch (37240:13): [True: 273k, False: 735k]
  ------------------
37241|   273k|            {
37242|   273k|                dump_float_value(val.m_data.m_value.number_float);
37243|   273k|                return;
37244|      0|            }
37245|       |
37246|      0|            case value_t::discarded:
  ------------------
  |  Branch (37246:13): [True: 0, False: 1.00M]
  ------------------
37247|      0|            {
37248|      0|                put_literal("<discarded>");
37249|      0|                return;
37250|      0|            }
37251|       |
37252|  83.7k|            case value_t::null:
  ------------------
  |  Branch (37252:13): [True: 83.7k, False: 925k]
  ------------------
37253|  83.7k|            {
37254|  83.7k|                put_literal("null");
37255|  83.7k|                return;
37256|      0|            }
37257|       |
37258|      0|            case value_t::object: // LCOV_EXCL_LINE
  ------------------
  |  Branch (37258:13): [True: 0, False: 1.00M]
  ------------------
37259|      0|            case value_t::array:  // LCOV_EXCL_LINE
  ------------------
  |  Branch (37259:13): [True: 0, False: 1.00M]
  ------------------
37260|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (37260:13): [True: 0, False: 1.00M]
  ------------------
37261|       |                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (37261:17): [Folded, False: 0]
  ------------------
37262|  1.00M|        }
37263|  1.00M|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE17dump_string_valueERKSC_:
37268|   138k|    {
37269|   138k|#if JSON_LITTLE_ENDIAN_TARGET
37270|   138k|        if (s.size() <= short_string_max && put_short_quoted(s, "\""))
  ------------------
  |  Branch (37270:13): [True: 136k, False: 1.66k]
  |  Branch (37270:45): [True: 89.3k, False: 47.1k]
  ------------------
37271|  89.3k|        {
37272|  89.3k|            return;
37273|  89.3k|        }
37274|  48.8k|#endif
37275|  48.8k|        put_char('"');
37276|  48.8k|        dump_escaped(s);
37277|  48.8k|        put_char('"');
37278|  48.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE16put_short_quotedILm2EEEbRKSC_RAT__Kc:
37442|   136k|    {
37443|   136k|        const std::size_t n = s.size();
37444|   136k|        if (n > short_string_max || write_buffer_pos + n + N > write_buffer.size())
  ------------------
  |  Branch (37444:13): [True: 0, False: 136k]
  |  Branch (37444:37): [True: 327, False: 136k]
  ------------------
37445|    327|        {
37446|    327|            return false;
37447|    327|        }
37448|       |
37449|   136k|        char* d = write_buffer.data() + write_buffer_pos + 1;
37450|   136k|        const char* const p = s.data();
37451|       |
37452|   136k|        if (n >= 8)
  ------------------
  |  Branch (37452:13): [True: 5.28k, False: 130k]
  ------------------
37453|  5.28k|        {
37454|  5.28k|#if JSON_SCAN_VECTOR
37455|  5.28k|            if (!(n >= 16 ? copy_plain_vectors(d, p, n) : copy_plain_halves(d, p, n)))
  ------------------
  |  Branch (37455:17): [True: 4.86k, False: 422]
  |  Branch (37455:19): [True: 3.25k, False: 2.03k]
  ------------------
37456|  4.86k|            {
37457|  4.86k|                return false;
37458|  4.86k|            }
37459|       |#else
37460|       |            const auto a = load_word<std::uint64_t>(p);
37461|       |            const auto b = load_word<std::uint64_t>(p + n - 8);
37462|       |            if ((swar_not_plain(a) | swar_not_plain(b)) != 0)
37463|       |            {
37464|       |                return false;
37465|       |            }
37466|       |            store_word(d, a);
37467|       |            store_word(d + n - 8, b);
37468|       |#endif
37469|  5.28k|        }
37470|   130k|        else if (n >= 4)
  ------------------
  |  Branch (37470:18): [True: 50.7k, False: 80.1k]
  ------------------
37471|  50.7k|        {
37472|  50.7k|            const auto a = load_word<std::uint32_t>(p);
37473|  50.7k|            const auto b = load_word<std::uint32_t>(p + n - 4);
37474|       |            // the bytes above the string are filled with a plain character
37475|  50.7k|            const std::uint64_t w = a | (static_cast<std::uint64_t>(b) << (8 * (n - 4)))
37476|  50.7k|                                    | (0x4141414141414141ull << (8 * n));
37477|  50.7k|            if (swar_not_plain(w) != 0)
  ------------------
  |  Branch (37477:17): [True: 7.07k, False: 43.6k]
  ------------------
37478|  7.07k|            {
37479|  7.07k|                return false;
37480|  7.07k|            }
37481|  43.6k|            store_word(d, a);
37482|  43.6k|            store_word(d + n - 4, b);
37483|  43.6k|        }
37484|  80.1k|        else if (n >= 2)
  ------------------
  |  Branch (37484:18): [True: 3.33k, False: 76.8k]
  ------------------
37485|  3.33k|        {
37486|  3.33k|            const auto a = load_word<std::uint16_t>(p);
37487|  3.33k|            const auto b = load_word<std::uint16_t>(p + n - 2);
37488|  3.33k|            const std::uint64_t w = a | (static_cast<std::uint64_t>(b) << (8 * (n - 2)))
37489|  3.33k|                                    | (0x4141414141414141ull << (8 * n));
37490|  3.33k|            if (swar_not_plain(w) != 0)
  ------------------
  |  Branch (37490:17): [True: 3.10k, False: 231]
  ------------------
37491|  3.10k|            {
37492|  3.10k|                return false;
37493|  3.10k|            }
37494|    231|            store_word(d, a);
37495|    231|            store_word(d + n - 2, b);
37496|    231|        }
37497|  76.8k|        else if (n == 1)
  ------------------
  |  Branch (37497:18): [True: 73.1k, False: 3.61k]
  ------------------
37498|  73.1k|        {
37499|  73.1k|            const std::uint64_t w = static_cast<std::uint64_t>(static_cast<unsigned char>(p[0])) | (0x4141414141414141ull << 8u);
37500|  73.1k|            if (swar_not_plain(w) != 0)
  ------------------
  |  Branch (37500:17): [True: 31.8k, False: 41.3k]
  ------------------
37501|  31.8k|            {
37502|  31.8k|                return false;
37503|  31.8k|            }
37504|  41.3k|            *d = p[0];
37505|  41.3k|        }
37506|       |
37507|  89.3k|        d[-1] = '"';
37508|  89.3k|        std::memcpy(d + n, tail, N - 1);
37509|  89.3k|        write_buffer_pos += n + N;
37510|  89.3k|        return true;
37511|   136k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE17dump_binary_valueEmRKNS0_27byte_container_with_subtypeISF_EE:
37300|  11.9k|    {
37301|  11.9k|        if (pretty_print)
  ------------------
  |  Branch (37301:13): [True: 0, False: 11.9k]
  ------------------
37302|      0|        {
37303|       |            // variable to hold indentation for the bytes
37304|      0|            const auto new_indent = next_indent(current_indent, indent_step);
37305|       |
37306|      0|            put_literal_indent("{\n", new_indent);
37307|      0|            put_literal("\"bytes\": [");
37308|       |
37309|      0|            if (!binary.empty())
  ------------------
  |  Branch (37309:17): [True: 0, False: 0]
  ------------------
37310|      0|            {
37311|      0|                for (auto i = binary.cbegin(); i != binary.cend() - 1; ++i)
  ------------------
  |  Branch (37311:48): [True: 0, False: 0]
  ------------------
37312|      0|                {
37313|      0|                    dump_byte(*i);
37314|      0|                    put_literal(", ");
37315|      0|                }
37316|      0|                dump_byte(binary.back());
37317|      0|            }
37318|       |
37319|      0|            put_literal_indent("],\n", new_indent);
37320|       |
37321|      0|            put_literal("\"subtype\": ");
37322|      0|            if (binary.has_subtype())
  ------------------
  |  Branch (37322:17): [True: 0, False: 0]
  ------------------
37323|      0|            {
37324|      0|                dump_integer(binary.subtype());
37325|      0|            }
37326|      0|            else
37327|      0|            {
37328|      0|                put_literal("null");
37329|      0|            }
37330|      0|            put_literal_indent("\n", current_indent);
37331|      0|            put_char('}');
37332|      0|        }
37333|  11.9k|        else
37334|  11.9k|        {
37335|  11.9k|            put_literal("{\"bytes\":[");
37336|       |
37337|  11.9k|            if (!binary.empty())
  ------------------
  |  Branch (37337:17): [True: 8.18k, False: 3.76k]
  ------------------
37338|  8.18k|            {
37339|  59.9k|                for (auto i = binary.cbegin(); i != binary.cend() - 1; ++i)
  ------------------
  |  Branch (37339:48): [True: 51.7k, False: 8.18k]
  ------------------
37340|  51.7k|                {
37341|  51.7k|                    dump_byte(*i);
37342|  51.7k|                    put_char(',');
37343|  51.7k|                }
37344|  8.18k|                dump_byte(binary.back());
37345|  8.18k|            }
37346|       |
37347|  11.9k|            put_literal("],\"subtype\":");
37348|  11.9k|            if (binary.has_subtype())
  ------------------
  |  Branch (37348:17): [True: 0, False: 11.9k]
  ------------------
37349|      0|            {
37350|      0|                dump_integer(binary.subtype());
37351|      0|                put_char('}');
37352|      0|            }
37353|  11.9k|            else
37354|  11.9k|            {
37355|  11.9k|                put_literal("null}");
37356|  11.9k|            }
37357|  11.9k|        }
37358|  11.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm11EEEvRAT__Kc:
38134|  11.9k|    {
38135|  11.9k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
38136|       |        // the array bound counts the terminating NUL, which is not written
38137|  11.9k|        constexpr std::size_t length = N - 1;
38138|  11.9k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
38139|       |
38140|  11.9k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|  11.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 126, False: 11.8k]
  |  |  ------------------
  ------------------
38141|    126|        {
38142|    126|            flush();
38143|    126|        }
38144|  11.9k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38145|  11.9k|        write_buffer_pos += length;
38146|  11.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9dump_byteIhEEvT_:
38528|  59.9k|    {
38529|  59.9k|        dump_byte(value, std::integral_constant < bool,
38530|  59.9k|                  std::is_unsigned<ByteType>::value && sizeof(ByteType) == 1
38531|  59.9k|                  && !std::is_same<ByteType, bool>::value > {});
38532|  59.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9dump_byteIhEEvT_NS4_17integral_constantIbLb1EEE:
38542|  59.9k|    {
38543|  59.9k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + 3 > write_buffer.size()))
  ------------------
  |  | 1697|  59.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 108, False: 59.8k]
  |  |  ------------------
  ------------------
38544|    108|        {
38545|    108|            flush();
38546|    108|        }
38547|       |
38548|  59.9k|        const auto byte = static_cast<unsigned>(value);
38549|       |        // Accumulate the offset in a local and store it back once. Writing
38550|       |        // through write_buffer[] is a char write, which may alias any object,
38551|       |        // so with the member updated in place the compiler has to reload and
38552|       |        // store it around every digit - measured 2.4x slower on a dump of a
38553|       |        // multi-megabyte binary value.
38554|  59.9k|        std::size_t pos = write_buffer_pos;
38555|       |
38556|  59.9k|        if (byte >= 100)
  ------------------
  |  Branch (38556:13): [True: 22.2k, False: 37.7k]
  ------------------
38557|  22.2k|        {
38558|  22.2k|            write_buffer[pos++] = static_cast<char>('0' + (byte / 100));
38559|  22.2k|            write_buffer[pos++] = static_cast<char>('0' + ((byte / 10) % 10));
38560|  22.2k|        }
38561|  37.7k|        else if (byte >= 10)
  ------------------
  |  Branch (38561:18): [True: 29.0k, False: 8.71k]
  ------------------
38562|  29.0k|        {
38563|  29.0k|            write_buffer[pos++] = static_cast<char>('0' + (byte / 10));
38564|  29.0k|        }
38565|       |
38566|  59.9k|        write_buffer[pos++] = static_cast<char>('0' + (byte % 10));
38567|       |
38568|  59.9k|        write_buffer_pos = pos;
38569|  59.9k|    }
_ZNK8nlohmann16json_abi_v3_12_027byte_container_with_subtypeINSt3__16vectorIhNS2_9allocatorIhEEEEE11has_subtypeEv:
 8516|  11.9k|    {
 8517|  11.9k|        return m_has_subtype;
 8518|  11.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_integerImTnNS4_9enable_ifIXoooosr3std11is_integralIT_EE5valuesr3std7is_sameISK_mEE5valuesr3std7is_sameISK_lEE5valueEiE4typeELi0EEEvSK_:
38587|   210k|    {
38588|   210k|        static constexpr std::array<std::array<char, 2>, 100> digits_to_99
38589|   210k|        {
38590|   210k|            {
38591|   210k|                {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
38592|   210k|                {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
38593|   210k|                {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
38594|   210k|                {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
38595|   210k|                {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
38596|   210k|                {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
38597|   210k|                {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
38598|   210k|                {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
38599|   210k|                {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
38600|   210k|                {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
38601|   210k|            }
38602|   210k|        };
38603|       |
38604|       |        // special case for "0"
38605|   210k|        if (x == 0)
  ------------------
  |  Branch (38605:13): [True: 8.37k, False: 202k]
  ------------------
38606|  8.37k|        {
38607|  8.37k|            put_char('0');
38608|  8.37k|            return;
38609|  8.37k|        }
38610|       |
38611|       |        // use a pointer to fill the buffer (room for as much as number_buffer holds)
38612|   202k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + number_buffer.size() > write_buffer.size()))
  ------------------
  |  | 1697|   202k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 987, False: 201k]
  |  |  ------------------
  ------------------
38613|    987|        {
38614|    987|            flush();
38615|    987|        }
38616|   202k|        auto* buffer_ptr = write_buffer.data() + write_buffer_pos;
38617|       |
38618|   202k|        number_magnitude_t abs_value;
38619|       |
38620|       |        // one byte for the minus sign
38621|   202k|        unsigned int n_chars = 0;
38622|       |
38623|   202k|        if (is_negative_number(x))
  ------------------
  |  Branch (38623:13): [True: 0, False: 202k]
  ------------------
38624|      0|        {
38625|      0|            *buffer_ptr = '-';
38626|      0|            abs_value = remove_sign(static_cast<number_integer_t>(x));
38627|      0|            n_chars = 1;
38628|      0|        }
38629|   202k|        else
38630|   202k|        {
38631|   202k|            abs_value = static_cast<number_magnitude_t>(x);
38632|   202k|        }
38633|       |
38634|       |        // up to 16 digits: eight at a time (as the digits of floats), written
38635|       |        // without leading zeros
38636|   202k|        if (abs_value < 10000000000000000u)
  ------------------
  |  Branch (38636:13): [True: 184k, False: 17.6k]
  ------------------
38637|   184k|        {
38638|   184k|            const auto value = static_cast<std::uint64_t>(abs_value); // fits: abs_value < 10^16
38639|   184k|            const std::uint64_t upper = value / 100000000u;
38640|   184k|            const std::uint64_t first = dtoa_impl::eight_digit_bytes(upper != 0 ? upper : value);
  ------------------
  |  Branch (38640:70): [True: 15.6k, False: 168k]
  ------------------
38641|   184k|            const auto leading = static_cast<unsigned>(count_leading_zeros(first) / 8); // (first is not 0)
38642|   184k|            char* const p = buffer_ptr + n_chars;
38643|   184k|            dtoa_impl::store_msb_first(p, (first << (8 * leading)) + 0x3030303030303030u);
38644|   184k|            n_chars += 8 - leading;
38645|   184k|            if (upper != 0)
  ------------------
  |  Branch (38645:17): [True: 15.6k, False: 168k]
  ------------------
38646|  15.6k|            {
38647|  15.6k|                dtoa_impl::store_msb_first(p + 8 - leading, dtoa_impl::eight_digit_bytes(value - (upper * 100000000u)) + 0x3030303030303030u);
38648|  15.6k|                n_chars += 8;
38649|  15.6k|            }
38650|   184k|            write_buffer_pos += n_chars;
38651|   184k|            return;
38652|   184k|        }
38653|       |
38654|       |        // 17 to 20 digits: the first one to four, then twice eight
38655|  17.6k|        if (magnitude_fits_64_bits(abs_value, std::integral_constant<bool, magnitude_has_at_most_64_bits>()))
  ------------------
  |  Branch (38655:13): [True: 17.6k, False: 0]
  ------------------
38656|  17.6k|        {
38657|  17.6k|            const auto value = static_cast<std::uint64_t>(abs_value);
38658|  17.6k|            const std::uint64_t top = value / 10000000000000000u; // 1 to 1844
38659|  17.6k|            const std::uint64_t low16 = value - (top * 10000000000000000u);
38660|  17.6k|            const std::uint64_t middle = low16 / 100000000u;
38661|  17.6k|            const std::uint64_t first = dtoa_impl::eight_digit_bytes(top);
38662|  17.6k|            const auto leading = static_cast<unsigned>(count_leading_zeros(first) / 8); // (first is not 0)
38663|  17.6k|            char* const p = buffer_ptr + n_chars;
38664|  17.6k|            dtoa_impl::store_msb_first(p, (first << (8 * leading)) + 0x3030303030303030u);
38665|  17.6k|            dtoa_impl::store_msb_first(p + 8 - leading, dtoa_impl::eight_digit_bytes(middle) + 0x3030303030303030u);
38666|  17.6k|            dtoa_impl::store_msb_first(p + 16 - leading, dtoa_impl::eight_digit_bytes(low16 - (middle * 100000000u)) + 0x3030303030303030u);
38667|  17.6k|            write_buffer_pos += n_chars + 24 - leading;
38668|  17.6k|            return;
38669|  17.6k|        }
38670|       |
38671|      0|        n_chars += count_digits(abs_value);
38672|       |
38673|       |        // spare 1 byte for '\0'
38674|      0|        JSON_ASSERT(n_chars < number_buffer.size() - 1);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38674:9): [True: 0, False: 0]
  ------------------
38675|       |
38676|       |        // jump to the end to generate the string from backward,
38677|       |        // so we later avoid reversing the result
38678|      0|        buffer_ptr += n_chars;
38679|       |
38680|       |        // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
38681|       |        // See: https://www.youtube.com/watch?v=o4-CwDo2zpg
38682|      0|        while (abs_value >= 100)
  ------------------
  |  Branch (38682:16): [True: 0, False: 0]
  ------------------
38683|      0|        {
38684|      0|            const auto digits_index = static_cast<unsigned>((abs_value % 100));
38685|      0|            abs_value /= 100;
38686|      0|            *(--buffer_ptr) = digits_to_99[digits_index][1];
38687|      0|            *(--buffer_ptr) = digits_to_99[digits_index][0];
38688|      0|        }
38689|       |
38690|      0|        if (abs_value >= 10)
  ------------------
  |  Branch (38690:13): [True: 0, False: 0]
  ------------------
38691|      0|        {
38692|      0|            const auto digits_index = static_cast<unsigned>(abs_value);
38693|      0|            *(--buffer_ptr) = digits_to_99[digits_index][1];
38694|      0|            *(--buffer_ptr) = digits_to_99[digits_index][0];
38695|      0|        }
38696|      0|        else
38697|      0|        {
38698|      0|            *(--buffer_ptr) = static_cast<char>('0' + abs_value);
38699|      0|        }
38700|       |
38701|      0|        write_buffer_pos += n_chars;
38702|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE18is_negative_numberImTnNS4_9enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeELi0EEEbSK_:
38509|   202k|    {
38510|   202k|        return false;
38511|   202k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11remove_signEl:
38847|  28.9k|    {
38848|  28.9k|        JSON_ASSERT(x < 0);
  ------------------
  |  | 2643|  28.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38848:9): [True: 28.9k, False: 0]
  ------------------
38849|  28.9k|        return static_cast<number_magnitude_t>(-(x + 1)) + 1;
38850|  28.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl17eight_digit_bytesEm:
36226|   467k|{
36227|   467k|    const std::uint64_t abcd_efgh = abcdefgh + (((std::uint64_t{1} << 32u) - 10000u) * ((abcdefgh * (((std::uint64_t{1} << 40u) / 10000u) + 1u)) >> 40u));
36228|   467k|    const std::uint64_t ab_cd_ef_gh = abcd_efgh + (((std::uint64_t{1} << 16u) - 100u) * (((abcd_efgh * (((std::uint64_t{1} << 19u) / 100u) + 1u)) >> 19u) & 0x7F0000007Fu));
36229|   467k|    return ab_cd_ef_gh + (((std::uint64_t{1} << 8u) - 10u) * (((ab_cd_ef_gh * (((std::uint64_t{1} << 10u) / 10u) + 1u)) >> 10u) & 0x000F000F000F000Fu));
36230|   467k|}
_ZN8nlohmann16json_abi_v3_12_06detail19count_leading_zerosEm:
 8987|   753k|{
 8988|   753k|#if defined(__GNUC__) || defined(__clang__)
 8989|   753k|    return __builtin_clzll(x);
 8990|       |#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64))
 8991|       |    unsigned long index = 0; // NOLINT(runtime/int): the type _BitScan*64 takes
 8992|       |    _BitScanReverse64(&index, x);
 8993|       |    return 63 - static_cast<int>(index);
 8994|       |#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_ARM))
 8995|       |    unsigned long index = 0; // NOLINT(runtime/int): the type _BitScan* takes
 8996|       |    if (_BitScanReverse(&index, static_cast<unsigned long>(x >> 32u))) // NOLINT(runtime/int)
 8997|       |    {
 8998|       |        return 31 - static_cast<int>(index);
 8999|       |    }
 9000|       |    _BitScanReverse(&index, static_cast<unsigned long>(x)); // NOLINT(runtime/int)
 9001|       |    return 63 - static_cast<int>(index);
 9002|       |#elif defined(__cpp_lib_bitops)
 9003|       |    return std::countl_zero(x);
 9004|       |#else
 9005|       |    int n = 0;
 9006|       |    for (int shift = 32; shift != 0; shift >>= 1)
 9007|       |    {
 9008|       |        if ((x >> (64 - shift)) == 0)
 9009|       |        {
 9010|       |            n += shift;
 9011|       |            x <<= shift;
 9012|       |        }
 9013|       |    }
 9014|       |    return n;
 9015|       |#endif
 9016|   753k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl15store_msb_firstEPcm:
36236|   470k|{
36237|   470k|#if JSON_LITTLE_ENDIAN_TARGET
36238|   470k|    v = byteswap(v);
36239|   470k|    std::memcpy(p, &v, sizeof(v));
36240|       |#elif JSON_BIG_ENDIAN_TARGET
36241|       |    std::memcpy(p, &v, sizeof(v));
36242|       |#else
36243|       |    for (unsigned i = 0; i < 8; ++i)
36244|       |    {
36245|       |        p[i] = static_cast<char>(v >> (56u - (8u * i)));
36246|       |    }
36247|       |#endif
36248|   470k|}
_ZN8nlohmann16json_abi_v3_12_06detail8byteswapEm:
 9097|   470k|{
 9098|   470k|#if defined(__GNUC__) || defined(__clang__)
 9099|   470k|    return __builtin_bswap64(x);
 9100|       |#elif defined(_MSC_VER)
 9101|       |    return _byteswap_uint64(x);
 9102|       |#elif defined(__cpp_lib_byteswap)
 9103|       |    return std::byteswap(x);
 9104|       |#else
 9105|       |    x = ((x & 0x00000000FFFFFFFFull) << 32u) | ((x & 0xFFFFFFFF00000000ull) >> 32u);
 9106|       |    x = ((x & 0x0000FFFF0000FFFFull) << 16u) | ((x & 0xFFFF0000FFFF0000ull) >> 16u);
 9107|       |    x = ((x & 0x00FF00FF00FF00FFull) << 8u) | ((x & 0xFF00FF00FF00FF00ull) >> 8u);
 9108|       |    return x;
 9109|       |#endif
 9110|   470k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE22magnitude_fits_64_bitsERKmNS4_17integral_constantIbLb1EEE:
38828|  31.7k|    {
38829|  31.7k|        return true;
38830|  31.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm13EEEvRAT__Kc:
38134|  11.9k|    {
38135|  11.9k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
38136|       |        // the array bound counts the terminating NUL, which is not written
38137|  11.9k|        constexpr std::size_t length = N - 1;
38138|  11.9k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
38139|       |
38140|  11.9k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|  11.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 72, False: 11.8k]
  |  |  ------------------
  ------------------
38141|     72|        {
38142|     72|            flush();
38143|     72|        }
38144|  11.9k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38145|  11.9k|        write_buffer_pos += length;
38146|  11.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm5EEEvRAT__Kc:
38134|   168k|    {
38135|   168k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
38136|       |        // the array bound counts the terminating NUL, which is not written
38137|   168k|        constexpr std::size_t length = N - 1;
38138|   168k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
38139|       |
38140|   168k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|   168k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 345, False: 168k]
  |  |  ------------------
  ------------------
38141|    345|        {
38142|    345|            flush();
38143|    345|        }
38144|   168k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38145|   168k|        write_buffer_pos += length;
38146|   168k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm6EEEvRAT__Kc:
38134|  56.1k|    {
38135|  56.1k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
38136|       |        // the array bound counts the terminating NUL, which is not written
38137|  56.1k|        constexpr std::size_t length = N - 1;
38138|  56.1k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
38139|       |
38140|  56.1k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1697|  56.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 272, False: 55.8k]
  |  |  ------------------
  ------------------
38141|    272|        {
38142|    272|            flush();
38143|    272|        }
38144|  56.1k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
38145|  56.1k|        write_buffer_pos += length;
38146|  56.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE17dump_signed_valueEl:
37285|   172k|    {
37286|   172k|        dump_integer(x);
37287|   172k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_integerIlTnNS4_9enable_ifIXoooosr3std11is_integralIT_EE5valuesr3std7is_sameISK_mEE5valuesr3std7is_sameISK_lEE5valueEiE4typeELi0EEEvSK_:
38587|   172k|    {
38588|   172k|        static constexpr std::array<std::array<char, 2>, 100> digits_to_99
38589|   172k|        {
38590|   172k|            {
38591|   172k|                {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
38592|   172k|                {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
38593|   172k|                {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
38594|   172k|                {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
38595|   172k|                {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
38596|   172k|                {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
38597|   172k|                {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
38598|   172k|                {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
38599|   172k|                {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
38600|   172k|                {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
38601|   172k|            }
38602|   172k|        };
38603|       |
38604|       |        // special case for "0"
38605|   172k|        if (x == 0)
  ------------------
  |  Branch (38605:13): [True: 11.1k, False: 161k]
  ------------------
38606|  11.1k|        {
38607|  11.1k|            put_char('0');
38608|  11.1k|            return;
38609|  11.1k|        }
38610|       |
38611|       |        // use a pointer to fill the buffer (room for as much as number_buffer holds)
38612|   161k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + number_buffer.size() > write_buffer.size()))
  ------------------
  |  | 1697|   161k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 347, False: 161k]
  |  |  ------------------
  ------------------
38613|    347|        {
38614|    347|            flush();
38615|    347|        }
38616|   161k|        auto* buffer_ptr = write_buffer.data() + write_buffer_pos;
38617|       |
38618|   161k|        number_magnitude_t abs_value;
38619|       |
38620|       |        // one byte for the minus sign
38621|   161k|        unsigned int n_chars = 0;
38622|       |
38623|   161k|        if (is_negative_number(x))
  ------------------
  |  Branch (38623:13): [True: 28.9k, False: 132k]
  ------------------
38624|  28.9k|        {
38625|  28.9k|            *buffer_ptr = '-';
38626|  28.9k|            abs_value = remove_sign(static_cast<number_integer_t>(x));
38627|  28.9k|            n_chars = 1;
38628|  28.9k|        }
38629|   132k|        else
38630|   132k|        {
38631|   132k|            abs_value = static_cast<number_magnitude_t>(x);
38632|   132k|        }
38633|       |
38634|       |        // up to 16 digits: eight at a time (as the digits of floats), written
38635|       |        // without leading zeros
38636|   161k|        if (abs_value < 10000000000000000u)
  ------------------
  |  Branch (38636:13): [True: 147k, False: 14.0k]
  ------------------
38637|   147k|        {
38638|   147k|            const auto value = static_cast<std::uint64_t>(abs_value); // fits: abs_value < 10^16
38639|   147k|            const std::uint64_t upper = value / 100000000u;
38640|   147k|            const std::uint64_t first = dtoa_impl::eight_digit_bytes(upper != 0 ? upper : value);
  ------------------
  |  Branch (38640:70): [True: 19.3k, False: 128k]
  ------------------
38641|   147k|            const auto leading = static_cast<unsigned>(count_leading_zeros(first) / 8); // (first is not 0)
38642|   147k|            char* const p = buffer_ptr + n_chars;
38643|   147k|            dtoa_impl::store_msb_first(p, (first << (8 * leading)) + 0x3030303030303030u);
38644|   147k|            n_chars += 8 - leading;
38645|   147k|            if (upper != 0)
  ------------------
  |  Branch (38645:17): [True: 19.3k, False: 128k]
  ------------------
38646|  19.3k|            {
38647|  19.3k|                dtoa_impl::store_msb_first(p + 8 - leading, dtoa_impl::eight_digit_bytes(value - (upper * 100000000u)) + 0x3030303030303030u);
38648|  19.3k|                n_chars += 8;
38649|  19.3k|            }
38650|   147k|            write_buffer_pos += n_chars;
38651|   147k|            return;
38652|   147k|        }
38653|       |
38654|       |        // 17 to 20 digits: the first one to four, then twice eight
38655|  14.0k|        if (magnitude_fits_64_bits(abs_value, std::integral_constant<bool, magnitude_has_at_most_64_bits>()))
  ------------------
  |  Branch (38655:13): [True: 14.0k, False: 0]
  ------------------
38656|  14.0k|        {
38657|  14.0k|            const auto value = static_cast<std::uint64_t>(abs_value);
38658|  14.0k|            const std::uint64_t top = value / 10000000000000000u; // 1 to 1844
38659|  14.0k|            const std::uint64_t low16 = value - (top * 10000000000000000u);
38660|  14.0k|            const std::uint64_t middle = low16 / 100000000u;
38661|  14.0k|            const std::uint64_t first = dtoa_impl::eight_digit_bytes(top);
38662|  14.0k|            const auto leading = static_cast<unsigned>(count_leading_zeros(first) / 8); // (first is not 0)
38663|  14.0k|            char* const p = buffer_ptr + n_chars;
38664|  14.0k|            dtoa_impl::store_msb_first(p, (first << (8 * leading)) + 0x3030303030303030u);
38665|  14.0k|            dtoa_impl::store_msb_first(p + 8 - leading, dtoa_impl::eight_digit_bytes(middle) + 0x3030303030303030u);
38666|  14.0k|            dtoa_impl::store_msb_first(p + 16 - leading, dtoa_impl::eight_digit_bytes(low16 - (middle * 100000000u)) + 0x3030303030303030u);
38667|  14.0k|            write_buffer_pos += n_chars + 24 - leading;
38668|  14.0k|            return;
38669|  14.0k|        }
38670|       |
38671|      0|        n_chars += count_digits(abs_value);
38672|       |
38673|       |        // spare 1 byte for '\0'
38674|      0|        JSON_ASSERT(n_chars < number_buffer.size() - 1);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (38674:9): [True: 0, False: 0]
  ------------------
38675|       |
38676|       |        // jump to the end to generate the string from backward,
38677|       |        // so we later avoid reversing the result
38678|      0|        buffer_ptr += n_chars;
38679|       |
38680|       |        // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
38681|       |        // See: https://www.youtube.com/watch?v=o4-CwDo2zpg
38682|      0|        while (abs_value >= 100)
  ------------------
  |  Branch (38682:16): [True: 0, False: 0]
  ------------------
38683|      0|        {
38684|      0|            const auto digits_index = static_cast<unsigned>((abs_value % 100));
38685|      0|            abs_value /= 100;
38686|      0|            *(--buffer_ptr) = digits_to_99[digits_index][1];
38687|      0|            *(--buffer_ptr) = digits_to_99[digits_index][0];
38688|      0|        }
38689|       |
38690|      0|        if (abs_value >= 10)
  ------------------
  |  Branch (38690:13): [True: 0, False: 0]
  ------------------
38691|      0|        {
38692|      0|            const auto digits_index = static_cast<unsigned>(abs_value);
38693|      0|            *(--buffer_ptr) = digits_to_99[digits_index][1];
38694|      0|            *(--buffer_ptr) = digits_to_99[digits_index][0];
38695|      0|        }
38696|      0|        else
38697|      0|        {
38698|      0|            *(--buffer_ptr) = static_cast<char>('0' + abs_value);
38699|      0|        }
38700|       |
38701|      0|        write_buffer_pos += n_chars;
38702|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE18is_negative_numberIlTnNS4_9enable_ifIXsr9is_signedIT_EE5valueEiE4typeELi0EEEbSK_:
38503|   161k|    {
38504|   161k|        return x < 0;
38505|   161k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE19dump_unsigned_valueEm:
37290|   210k|    {
37291|   210k|        dump_integer(x);
37292|   210k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE16dump_float_valueEd:
37295|   273k|    {
37296|   273k|        dump_float(x);
37297|   273k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_floatEd:
38712|   273k|    {
38713|       |        // NaN / inf
38714|   273k|        if (!std::isfinite(x))
  ------------------
  |  Branch (38714:13): [True: 11.0k, False: 262k]
  ------------------
38715|  11.0k|        {
38716|  11.0k|            put_literal("null");
38717|  11.0k|            return;
38718|  11.0k|        }
38719|       |
38720|       |        // If number_float_t is an IEEE-754 single or double precision number,
38721|       |        // use the Grisu2 algorithm to produce short numbers which are
38722|       |        // guaranteed to round-trip, using strtof and strtod, resp.
38723|       |        //
38724|       |        // NB: The test below works if <long double> == <double>.
38725|   262k|        static constexpr bool is_ieee_single_or_double
38726|   262k|            = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||
  ------------------
  |  Branch (38726:16): [True: 0, Folded]
  |  Branch (38726:66): [Folded, False: 0]
  |  Branch (38726:119): [Folded, False: 0]
  ------------------
38727|      0|              (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);
  ------------------
  |  Branch (38727:16): [True: 0, Folded]
  |  Branch (38727:66): [True: 0, Folded]
  |  Branch (38727:119): [True: 0, Folded]
  ------------------
38728|       |
38729|   262k|        dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());
38730|   262k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_floatEdNS4_17integral_constantIbLb1EEE:
38733|   262k|    {
38734|       |        // directly into the write buffer: copying the text from number_buffer
38735|       |        // right after to_chars() wrote it waits until its stores are done
38736|   262k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + number_buffer.size() > write_buffer.size()))
  ------------------
  |  | 1697|   262k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 731, False: 261k]
  |  |  ------------------
  ------------------
38737|    731|        {
38738|    731|            flush();
38739|    731|        }
38740|   262k|        auto* begin = write_buffer.data() + write_buffer_pos;
38741|   262k|        auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x);
38742|   262k|        write_buffer_pos += static_cast<std::size_t>(end - begin);
38743|   262k|    }
_ZN8nlohmann16json_abi_v3_12_06detail8to_charsIdEEPcS3_PKcT_:
36669|   262k|{
36670|   262k|    JSON_ASSERT(std::isfinite(value));
  ------------------
  |  | 2643|   262k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36670:5): [True: 262k, False: 0]
  ------------------
36671|       |
36672|       |    // Use signbit(value) instead of (value < 0) since signbit works for -0.
36673|   262k|    if (std::signbit(value))
  ------------------
  |  Branch (36673:9): [True: 35.4k, False: 227k]
  ------------------
36674|  35.4k|    {
36675|  35.4k|        value = -value;
36676|  35.4k|        *first++ = '-';
36677|  35.4k|    }
36678|       |
36679|   262k|#ifdef __GNUC__
36680|   262k|    JSON_HEDLEY_DIAGNOSTIC_PUSH
36681|   262k|    JSON_HEDLEY_PRAGMA(GCC diagnostic ignored "-Wfloat-equal")
36682|   262k|#endif
36683|   262k|    if (value == 0) // +-0
  ------------------
  |  Branch (36683:9): [True: 13.2k, False: 249k]
  ------------------
36684|  13.2k|    {
36685|  13.2k|        *first++ = '0';
36686|       |        // Make it look like a floating-point number (#362, #378)
36687|  13.2k|        *first++ = '.';
36688|  13.2k|        *first++ = '0';
36689|  13.2k|        return first;
36690|  13.2k|    }
36691|   249k|#ifdef __GNUC__
36692|   249k|    JSON_HEDLEY_DIAGNOSTIC_POP
36693|   249k|#endif
36694|       |
36695|   249k|    return dtoa_impl::write_positive(first, last, value);
36696|   262k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_positiveIdEEPcS4_PKcT_:
36649|   249k|{
36650|   249k|    return write_positive(first, last, value, is_binary64<FloatType> {});
36651|   249k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_positiveIdEEPcS4_PKcT_NSt3__117integral_constantIbLb1EEE:
36631|   249k|{
36632|   249k|    return write_positive_zmij(first, last, value);
36633|   249k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl19write_positive_zmijIdEEPcS4_PKcT_:
36609|   249k|{
36610|   249k|    static_assert(is_binary64<FloatType>::value,
36611|   249k|                  "internal error: the conversion of Zmij needs IEEE 754 binary64 numbers");
36612|   249k|    const auto bits = bit_cast<std::uint64_t>(value);
36613|   249k|    const zmij::shortest_decimal d = zmij::to_shortest(bits);
36614|   249k|    if (JSON_HEDLEY_LIKELY(last - first >= 41))
  ------------------
  |  | 1696|   249k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 249k, False: 0]
  |  |  ------------------
  ------------------
36615|   249k|    {
36616|   249k|        return write_shortest(first, d);
36617|   249k|    }
36618|      0|    std::array<char, 64> buf; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
36619|      0|    const auto len = static_cast<std::size_t>(write_shortest(buf.data(), d) - buf.data());
36620|      0|    JSON_ASSERT(last - first >= static_cast<std::ptrdiff_t>(len));
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36620:5): [True: 0, False: 0]
  ------------------
36621|      0|    std::memcpy(first, buf.data(), len);
36622|      0|    return first + len;
36623|      0|}
_ZN8nlohmann16json_abi_v3_12_06detail8bit_castImdEET_RKT0_:
 9054|   249k|{
 9055|   249k|    static_assert(sizeof(To) == sizeof(From), "bit_cast needs types of the same size");
 9056|       |#if defined(__cpp_lib_bit_cast)
 9057|       |    return std::bit_cast<To>(from);
 9058|       |#else
 9059|   249k|    To to {};
 9060|   249k|    std::memcpy(&to, &from, sizeof(To));
 9061|   249k|    return to;
 9062|   249k|#endif
 9063|   249k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij11to_shortestEm:
35145|   249k|{
35146|   249k|    constexpr int extra_shift = 9;
35147|   249k|    const auto raw_exp = static_cast<int>((bits >> 52u) & 0x7FFu);
35148|   249k|    std::uint64_t bin_sig = bits & ((std::uint64_t{1} << 52u) - 1);
35149|       |    // a power of two has a narrower interval below (except the smallest normal)
35150|   249k|    const bool regular = bin_sig != 0 || raw_exp <= 1;
  ------------------
  |  Branch (35150:26): [True: 241k, False: 7.82k]
  |  Branch (35150:42): [True: 0, False: 7.82k]
  ------------------
35151|   249k|    const int bin_exp = (raw_exp == 0 ? 1 : raw_exp) - 1075;
  ------------------
  |  Branch (35151:26): [True: 2.94k, False: 246k]
  ------------------
35152|   249k|    if (raw_exp != 0)
  ------------------
  |  Branch (35152:9): [True: 246k, False: 2.94k]
  ------------------
35153|   246k|    {
35154|   246k|        bin_sig |= std::uint64_t{1} << 52u;
35155|   246k|    }
35156|       |    // floor(log10(2^bin_exp)), or floor(log10(3/4 * 2^bin_exp)) for the irregular case
35157|   249k|    const int dec_exp = ((bin_exp * 315653) - (regular ? 0 : 131072)) >> 20;
  ------------------
  |  Branch (35157:48): [True: 241k, False: 7.82k]
  ------------------
35158|       |    // scaled by 10^(-dec_exp - 1): the integral part is the shorter candidate
35159|   249k|    const int shift = bin_exp + ((-(dec_exp + 1) * 217707) >> 16) + 1 + extra_shift;
35160|   249k|    const uint128_parts p10 = pow10(-dec_exp - 1);
35161|   249k|    const uint128_parts p = umul192_hi128(p10.high, p10.low, bin_sig << static_cast<unsigned>(shift));
35162|   249k|    std::uint64_t integral = p.high >> static_cast<unsigned>(extra_shift);
35163|       |    // (no casts in the shifts: MSVC 2015 warns C4554 on them despite the parentheses)
35164|   249k|    constexpr auto fractional_low_shift = static_cast<unsigned>(extra_shift);
35165|   249k|    constexpr unsigned fractional_high_shift = 64u - fractional_low_shift;
35166|   249k|    const std::uint64_t fractional = (p.high << fractional_high_shift) | (p.low >> fractional_low_shift);
35167|   249k|    std::uint64_t digit = 0;
35168|   249k|    bool round_up = false;
35169|   249k|    bool round_down = false;
35170|   249k|    if (JSON_HEDLEY_LIKELY(regular))
  ------------------
  |  | 1696|   249k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 241k, False: 7.82k]
  |  |  ------------------
  ------------------
35171|   241k|    {
35172|   241k|        const std::uint64_t half_ulp = (p10.high >> static_cast<unsigned>(extra_shift + 1 - shift)) + (1 - (bin_sig & 1u));
35173|   241k|        round_up = fractional + half_ulp < fractional;
35174|   241k|        round_down = half_ulp > fractional;
35175|       |        // the last digit of the longer candidate, rounded to nearest
35176|   241k|        digit = umul128_add_hi64(fractional, 10, (std::uint64_t{1} << 63u) + 6);
35177|   241k|        if (fractional == (std::uint64_t{1} << 62u))
  ------------------
  |  Branch (35177:13): [True: 6.10k, False: 235k]
  ------------------
35178|  6.10k|        {
35179|  6.10k|            digit = 2; // 2.5 rounds to 2
35180|  6.10k|        }
35181|   241k|    }
35182|  7.82k|    else
35183|  7.82k|    {
35184|  7.82k|        const std::uint64_t half_ulp = p10.high >> static_cast<unsigned>(extra_shift + 1 - shift);
35185|  7.82k|        round_up = half_ulp > ~std::uint64_t{0} - fractional;
35186|  7.82k|        round_down = (half_ulp >> 1u) > fractional;
35187|  7.82k|        digit = umul128_add_hi64(fractional, 10, (std::uint64_t{1} << 63u) - 1);
35188|  7.82k|        const std::uint64_t lowest = umul128_add_hi64(fractional - (half_ulp >> 1u), 10, ~std::uint64_t{0});
35189|  7.82k|        digit = digit < lowest ? lowest : digit;
  ------------------
  |  Branch (35189:17): [True: 4.77k, False: 3.05k]
  ------------------
35190|  7.82k|    }
35191|   249k|    integral += round_up ? 1u : 0u;
  ------------------
  |  Branch (35191:17): [True: 16.2k, False: 232k]
  ------------------
35192|       |    // if the shorter candidate is outside the rounding interval: one digit more
35193|   249k|    return shortest_decimal{integral, dec_exp, static_cast<unsigned char>(digit), !round_up && !round_down};
  ------------------
  |  Branch (35193:83): [True: 232k, False: 16.2k]
  |  Branch (35193:96): [True: 87.1k, False: 145k]
  ------------------
35194|   249k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij5pow10Ei:
35099|   249k|{
35100|   249k|    if (k > pow5_128_largest_power)
  ------------------
  |  Branch (35100:9): [True: 3.52k, False: 245k]
  ------------------
35101|  3.52k|    {
35102|  3.52k|        return compute_pow10(k); // (only for the smallest doubles)
35103|  3.52k|    }
35104|   245k|    const auto i = 2 * static_cast<std::size_t>(k - pow5_128_smallest_power);
35105|   245k|    uint128_parts r{pow5_128()[i + 1], pow5_128()[i]};
35106|   245k|    const std::uint64_t adjust = static_cast<unsigned>(k + 27) < 27u ? 1u : 0u;
  ------------------
  |  Branch (35106:34): [True: 11.7k, False: 233k]
  ------------------
35107|   245k|    r.high -= r.low < adjust ? 1u : 0u;
  ------------------
  |  Branch (35107:15): [True: 0, False: 245k]
  ------------------
35108|   245k|    r.low -= adjust;
35109|   245k|    return r;
35110|   249k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij13compute_pow10Ei:
35069|  3.52k|{
35070|  3.52k|    const auto i = static_cast<unsigned>(k + 307);
35071|  3.52k|    const std::uint64_t m = pow10_minor()[(i + 24) % 28];
35072|  3.52k|    const std::size_t j = 2 * static_cast<std::size_t>((i + 24) / 28);
35073|  3.52k|    const std::uint64_t h_hi = pow10_major()[j];
35074|  3.52k|    const std::uint64_t h_lo = pow10_major()[j + 1];
35075|  3.52k|    const std::uint64_t h1 = full_multiplication(h_lo, m).high;
35076|  3.52k|    const std::uint64_t c0 = h_lo * m;
35077|  3.52k|    const std::uint64_t c1 = h1 + (h_hi * m);
35078|  3.52k|    const std::uint64_t c2 = (c1 < h1 ? 1u : 0u) + full_multiplication(h_hi, m).high;
  ------------------
  |  Branch (35078:31): [True: 211, False: 3.31k]
  ------------------
35079|  3.52k|    uint128_parts r{};
35080|  3.52k|    if ((c2 >> 63u) != 0)
  ------------------
  |  Branch (35080:9): [True: 507, False: 3.01k]
  ------------------
35081|    507|    {
35082|    507|        r.high = c2;
35083|    507|        r.low = c1;
35084|    507|    }
35085|  3.01k|    else
35086|  3.01k|    {
35087|  3.01k|        r.high = (c2 << 1u) | (c1 >> 63u);
35088|  3.01k|        r.low = (c1 << 1u) | (c0 >> 63u);
35089|  3.01k|    }
35090|  3.52k|    r.low -= (pow10_fixups()[i >> 5u] >> (i & 31u)) & 1u;
35091|  3.52k|    return r;
35092|  3.52k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij11pow10_minorEv:
35017|  3.52k|{
35018|  3.52k|    static const std::array<std::uint64_t, 28> table =
35019|  3.52k|    {
35020|  3.52k|        {
35021|  3.52k|            0x8000000000000000u, 0xa000000000000000u, 0xc800000000000000u, 0xfa00000000000000u, 0x9c40000000000000u,
35022|  3.52k|            0xc350000000000000u, 0xf424000000000000u, 0x9896800000000000u, 0xbebc200000000000u, 0xee6b280000000000u,
35023|  3.52k|            0x9502f90000000000u, 0xba43b74000000000u, 0xe8d4a51000000000u, 0x9184e72a00000000u, 0xb5e620f480000000u,
35024|  3.52k|            0xe35fa931a0000000u, 0x8e1bc9bf04000000u, 0xb1a2bc2ec5000000u, 0xde0b6b3a76400000u, 0x8ac7230489e80000u,
35025|  3.52k|            0xad78ebc5ac620000u, 0xd8d726b7177a8000u, 0x878678326eac9000u, 0xa968163f0a57b400u, 0xd3c21bcecceda100u,
35026|  3.52k|            0x84595161401484a0u, 0xa56fa5b99019a5c8u, 0xcecb8f27f4200f3au
35027|  3.52k|        }
35028|  3.52k|    };
35029|  3.52k|    return table;
35030|  3.52k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij11pow10_majorEv:
35034|  7.04k|{
35035|  7.04k|    static const std::array<std::uint64_t, 50> table =
35036|  7.04k|    {
35037|  7.04k|        {
35038|  7.04k|            0xaddcb9e83c6b1793u, 0xdf4abe242a1bbf3eu, 0xaf8e5410288e1b6fu, 0x07ecf0ae5ee44ddau, 0xb1442798f49ffb4au, 0x99cd11cfdf41779du,
35039|  7.04k|            0xb2fe3f0b8599ef07u, 0x861fa7e6dcb4aa15u, 0xb4bca50b065abe63u, 0x0fed077a756b53aau, 0xb67f6455292cbf08u, 0x1a3bc84c17b1d543u,
35040|  7.04k|            0xb84687c269ef3bfbu, 0x3d5d514f40eea742u, 0xba121a4650e4ddebu, 0x92f34d62616ce413u, 0xbbe226efb628afeau, 0x890489f70a55368cu,
35041|  7.04k|            0xbdb6b8e905cb600fu, 0x5400e987bbc1c921u, 0xbf8fdb78849a5f96u, 0xde98520472bdd034u, 0xc16d9a0095928a27u, 0x75b7053c0f178294u,
35042|  7.04k|            0xc350000000000000u, 0x0000000000000000u, 0xc5371912364ce305u, 0x6c28000000000000u, 0xc722f0ef9d80aad6u, 0x424d3ad2b7b97ef6u,
35043|  7.04k|            0xc913936dd571c84cu, 0x03bc3a19cd1e38eau, 0xcb090c8001ab551cu, 0x5cadf5bfd3072cc6u, 0xcd036837130890a1u, 0x36dba887c37a8c10u,
35044|  7.04k|            0xcf02b2c21207ef2eu, 0x94f967e45e03f4bcu, 0xd106f86e69d785c7u, 0xe13336d701beba52u, 0xd31045a8341ca07cu, 0x1ede48111209a051u,
35045|  7.04k|            0xd51ea6fa85785631u, 0x552a74227f3ea566u, 0xd732290fbacaf133u, 0xa97c177947ad4096u, 0xd94ad8b1c7380874u, 0x18375281ae7822bdu,
35046|  7.04k|            0xdb68c2ca82ed2a05u, 0xa67398db9f6820e1u
35047|  7.04k|        }
35048|  7.04k|    };
35049|  7.04k|    return table;
35050|  7.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail19full_multiplicationEmm:
 9120|   785k|{
 9121|   785k|#if defined(__SIZEOF_INT128__)
 9122|   785k|    __extension__ using uint128 = unsigned __int128;
 9123|   785k|    const uint128 r = static_cast<uint128>(a) * b;
 9124|   785k|    return {static_cast<std::uint64_t>(r), static_cast<std::uint64_t>(r >> 64u)};
 9125|       |#elif defined(_MSC_VER) && defined(_M_X64)
 9126|       |    std::uint64_t high = 0;
 9127|       |    const std::uint64_t low = _umul128(a, b, &high);
 9128|       |    return {low, high};
 9129|       |#elif defined(_MSC_VER) && defined(_M_ARM64)
 9130|       |    return {a * b, __umulh(a, b)};
 9131|       |#else
 9132|       |    const std::uint64_t a_lo = a & 0xFFFFFFFFu;
 9133|       |    const std::uint64_t a_hi = a >> 32u;
 9134|       |    const std::uint64_t b_lo = b & 0xFFFFFFFFu;
 9135|       |    const std::uint64_t b_hi = b >> 32u;
 9136|       |    const std::uint64_t lo_lo = a_lo * b_lo;
 9137|       |    const std::uint64_t hi_lo = a_hi * b_lo;
 9138|       |    const std::uint64_t lo_hi = a_lo * b_hi;
 9139|       |    const std::uint64_t hi_hi = a_hi * b_hi;
 9140|       |    const std::uint64_t cross = (lo_lo >> 32u) + (hi_lo & 0xFFFFFFFFu) + lo_hi;
 9141|       |    return {(cross << 32u) | (lo_lo & 0xFFFFFFFFu), (hi_lo >> 32u) + (cross >> 32u) + hi_hi};
 9142|       |#endif
 9143|   785k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij12pow10_fixupsEv:
35054|  3.52k|{
35055|  3.52k|    static const std::array<std::uint32_t, 21> table =
35056|  3.52k|    {
35057|  3.52k|        {
35058|  3.52k|            0x8d8fc810u, 0x06100293u, 0x19000000u, 0x00100000u, 0x00000908u, 0x00000000u, 0x04e00300u, 0x3807e0b2u, 0x3d83d793u, 0x0006f5ccu,
35059|  3.52k|            0x00000000u, 0xffff0000u, 0x8076337du, 0x4ff45ba0u, 0x09405033u, 0x034376d9u, 0x09000000u, 0x4e100501u, 0x076d14dcu, 0xf964f45eu,
35060|  3.52k|            0x0000003du
35061|  3.52k|        }
35062|  3.52k|    };
35063|  3.52k|    return table;
35064|  3.52k|}
_ZN8nlohmann16json_abi_v3_12_06detail8pow5_128Ev:
10938|   514k|{
10939|   514k|    static const std::array<std::uint64_t, 1302> table =
10940|   514k|    {
10941|   514k|        {
10942|   514k|            0xeef453d6923bd65au, 0x113faa2906a13b3fu, 0x9558b4661b6565f8u, 0x4ac7ca59a424c507u,
10943|   514k|            0xbaaee17fa23ebf76u, 0x5d79bcf00d2df649u, 0xe95a99df8ace6f53u, 0xf4d82c2c107973dcu,
10944|   514k|            0x91d8a02bb6c10594u, 0x79071b9b8a4be869u, 0xb64ec836a47146f9u, 0x9748e2826cdee284u,
10945|   514k|            0xe3e27a444d8d98b7u, 0xfd1b1b2308169b25u, 0x8e6d8c6ab0787f72u, 0xfe30f0f5e50e20f7u,
10946|   514k|            0xb208ef855c969f4fu, 0xbdbd2d335e51a935u, 0xde8b2b66b3bc4723u, 0xad2c788035e61382u,
10947|   514k|            0x8b16fb203055ac76u, 0x4c3bcb5021afcc31u, 0xaddcb9e83c6b1793u, 0xdf4abe242a1bbf3du,
10948|   514k|            0xd953e8624b85dd78u, 0xd71d6dad34a2af0du, 0x87d4713d6f33aa6bu, 0x8672648c40e5ad68u,
10949|   514k|            0xa9c98d8ccb009506u, 0x680efdaf511f18c2u, 0xd43bf0effdc0ba48u, 0x0212bd1b2566def2u,
10950|   514k|            0x84a57695fe98746du, 0x014bb630f7604b57u, 0xa5ced43b7e3e9188u, 0x419ea3bd35385e2du,
10951|   514k|            0xcf42894a5dce35eau, 0x52064cac828675b9u, 0x818995ce7aa0e1b2u, 0x7343efebd1940993u,
10952|   514k|            0xa1ebfb4219491a1fu, 0x1014ebe6c5f90bf8u, 0xca66fa129f9b60a6u, 0xd41a26e077774ef6u,
10953|   514k|            0xfd00b897478238d0u, 0x8920b098955522b4u, 0x9e20735e8cb16382u, 0x55b46e5f5d5535b0u,
10954|   514k|            0xc5a890362fddbc62u, 0xeb2189f734aa831du, 0xf712b443bbd52b7bu, 0xa5e9ec7501d523e4u,
10955|   514k|            0x9a6bb0aa55653b2du, 0x47b233c92125366eu, 0xc1069cd4eabe89f8u, 0x999ec0bb696e840au,
10956|   514k|            0xf148440a256e2c76u, 0xc00670ea43ca250du, 0x96cd2a865764dbcau, 0x380406926a5e5728u,
10957|   514k|            0xbc807527ed3e12bcu, 0xc605083704f5ecf2u, 0xeba09271e88d976bu, 0xf7864a44c633682eu,
10958|   514k|            0x93445b8731587ea3u, 0x7ab3ee6afbe0211du, 0xb8157268fdae9e4cu, 0x5960ea05bad82964u,
10959|   514k|            0xe61acf033d1a45dfu, 0x6fb92487298e33bdu, 0x8fd0c16206306babu, 0xa5d3b6d479f8e056u,
10960|   514k|            0xb3c4f1ba87bc8696u, 0x8f48a4899877186cu, 0xe0b62e2929aba83cu, 0x331acdabfe94de87u,
10961|   514k|            0x8c71dcd9ba0b4925u, 0x9ff0c08b7f1d0b14u, 0xaf8e5410288e1b6fu, 0x07ecf0ae5ee44dd9u,
10962|   514k|            0xdb71e91432b1a24au, 0xc9e82cd9f69d6150u, 0x892731ac9faf056eu, 0xbe311c083a225cd2u,
10963|   514k|            0xab70fe17c79ac6cau, 0x6dbd630a48aaf406u, 0xd64d3d9db981787du, 0x092cbbccdad5b108u,
10964|   514k|            0x85f0468293f0eb4eu, 0x25bbf56008c58ea5u, 0xa76c582338ed2621u, 0xaf2af2b80af6f24eu,
10965|   514k|            0xd1476e2c07286faau, 0x1af5af660db4aee1u, 0x82cca4db847945cau, 0x50d98d9fc890ed4du,
10966|   514k|            0xa37fce126597973cu, 0xe50ff107bab528a0u, 0xcc5fc196fefd7d0cu, 0x1e53ed49a96272c8u,
10967|   514k|            0xff77b1fcbebcdc4fu, 0x25e8e89c13bb0f7au, 0x9faacf3df73609b1u, 0x77b191618c54e9acu,
10968|   514k|            0xc795830d75038c1du, 0xd59df5b9ef6a2417u, 0xf97ae3d0d2446f25u, 0x4b0573286b44ad1du,
10969|   514k|            0x9becce62836ac577u, 0x4ee367f9430aec32u, 0xc2e801fb244576d5u, 0x229c41f793cda73fu,
10970|   514k|            0xf3a20279ed56d48au, 0x6b43527578c1110fu, 0x9845418c345644d6u, 0x830a13896b78aaa9u,
10971|   514k|            0xbe5691ef416bd60cu, 0x23cc986bc656d553u, 0xedec366b11c6cb8fu, 0x2cbfbe86b7ec8aa8u,
10972|   514k|            0x94b3a202eb1c3f39u, 0x7bf7d71432f3d6a9u, 0xb9e08a83a5e34f07u, 0xdaf5ccd93fb0cc53u,
10973|   514k|            0xe858ad248f5c22c9u, 0xd1b3400f8f9cff68u, 0x91376c36d99995beu, 0x23100809b9c21fa1u,
10974|   514k|            0xb58547448ffffb2du, 0xabd40a0c2832a78au, 0xe2e69915b3fff9f9u, 0x16c90c8f323f516cu,
10975|   514k|            0x8dd01fad907ffc3bu, 0xae3da7d97f6792e3u, 0xb1442798f49ffb4au, 0x99cd11cfdf41779cu,
10976|   514k|            0xdd95317f31c7fa1du, 0x40405643d711d583u, 0x8a7d3eef7f1cfc52u, 0x482835ea666b2572u,
10977|   514k|            0xad1c8eab5ee43b66u, 0xda3243650005eecfu, 0xd863b256369d4a40u, 0x90bed43e40076a82u,
10978|   514k|            0x873e4f75e2224e68u, 0x5a7744a6e804a291u, 0xa90de3535aaae202u, 0x711515d0a205cb36u,
10979|   514k|            0xd3515c2831559a83u, 0x0d5a5b44ca873e03u, 0x8412d9991ed58091u, 0xe858790afe9486c2u,
10980|   514k|            0xa5178fff668ae0b6u, 0x626e974dbe39a872u, 0xce5d73ff402d98e3u, 0xfb0a3d212dc8128fu,
10981|   514k|            0x80fa687f881c7f8eu, 0x7ce66634bc9d0b99u, 0xa139029f6a239f72u, 0x1c1fffc1ebc44e80u,
10982|   514k|            0xc987434744ac874eu, 0xa327ffb266b56220u, 0xfbe9141915d7a922u, 0x4bf1ff9f0062baa8u,
10983|   514k|            0x9d71ac8fada6c9b5u, 0x6f773fc3603db4a9u, 0xc4ce17b399107c22u, 0xcb550fb4384d21d3u,
10984|   514k|            0xf6019da07f549b2bu, 0x7e2a53a146606a48u, 0x99c102844f94e0fbu, 0x2eda7444cbfc426du,
10985|   514k|            0xc0314325637a1939u, 0xfa911155fefb5308u, 0xf03d93eebc589f88u, 0x793555ab7eba27cau,
10986|   514k|            0x96267c7535b763b5u, 0x4bc1558b2f3458deu, 0xbbb01b9283253ca2u, 0x9eb1aaedfb016f16u,
10987|   514k|            0xea9c227723ee8bcbu, 0x465e15a979c1cadcu, 0x92a1958a7675175fu, 0x0bfacd89ec191ec9u,
10988|   514k|            0xb749faed14125d36u, 0xcef980ec671f667bu, 0xe51c79a85916f484u, 0x82b7e12780e7401au,
10989|   514k|            0x8f31cc0937ae58d2u, 0xd1b2ecb8b0908810u, 0xb2fe3f0b8599ef07u, 0x861fa7e6dcb4aa15u,
10990|   514k|            0xdfbdcece67006ac9u, 0x67a791e093e1d49au, 0x8bd6a141006042bdu, 0xe0c8bb2c5c6d24e0u,
10991|   514k|            0xaecc49914078536du, 0x58fae9f773886e18u, 0xda7f5bf590966848u, 0xaf39a475506a899eu,
10992|   514k|            0x888f99797a5e012du, 0x6d8406c952429603u, 0xaab37fd7d8f58178u, 0xc8e5087ba6d33b83u,
10993|   514k|            0xd5605fcdcf32e1d6u, 0xfb1e4a9a90880a64u, 0x855c3be0a17fcd26u, 0x5cf2eea09a55067fu,
10994|   514k|            0xa6b34ad8c9dfc06fu, 0xf42faa48c0ea481eu, 0xd0601d8efc57b08bu, 0xf13b94daf124da26u,
10995|   514k|            0x823c12795db6ce57u, 0x76c53d08d6b70858u, 0xa2cb1717b52481edu, 0x54768c4b0c64ca6eu,
10996|   514k|            0xcb7ddcdda26da268u, 0xa9942f5dcf7dfd09u, 0xfe5d54150b090b02u, 0xd3f93b35435d7c4cu,
10997|   514k|            0x9efa548d26e5a6e1u, 0xc47bc5014a1a6dafu, 0xc6b8e9b0709f109au, 0x359ab6419ca1091bu,
10998|   514k|            0xf867241c8cc6d4c0u, 0xc30163d203c94b62u, 0x9b407691d7fc44f8u, 0x79e0de63425dcf1du,
10999|   514k|            0xc21094364dfb5636u, 0x985915fc12f542e4u, 0xf294b943e17a2bc4u, 0x3e6f5b7b17b2939du,
11000|   514k|            0x979cf3ca6cec5b5au, 0xa705992ceecf9c42u, 0xbd8430bd08277231u, 0x50c6ff782a838353u,
11001|   514k|            0xece53cec4a314ebdu, 0xa4f8bf5635246428u, 0x940f4613ae5ed136u, 0x871b7795e136be99u,
11002|   514k|            0xb913179899f68584u, 0x28e2557b59846e3fu, 0xe757dd7ec07426e5u, 0x331aeada2fe589cfu,
11003|   514k|            0x9096ea6f3848984fu, 0x3ff0d2c85def7621u, 0xb4bca50b065abe63u, 0x0fed077a756b53a9u,
11004|   514k|            0xe1ebce4dc7f16dfbu, 0xd3e8495912c62894u, 0x8d3360f09cf6e4bdu, 0x64712dd7abbbd95cu,
11005|   514k|            0xb080392cc4349decu, 0xbd8d794d96aacfb3u, 0xdca04777f541c567u, 0xecf0d7a0fc5583a0u,
11006|   514k|            0x89e42caaf9491b60u, 0xf41686c49db57244u, 0xac5d37d5b79b6239u, 0x311c2875c522ced5u,
11007|   514k|            0xd77485cb25823ac7u, 0x7d633293366b828bu, 0x86a8d39ef77164bcu, 0xae5dff9c02033197u,
11008|   514k|            0xa8530886b54dbdebu, 0xd9f57f830283fdfcu, 0xd267caa862a12d66u, 0xd072df63c324fd7bu,
11009|   514k|            0x8380dea93da4bc60u, 0x4247cb9e59f71e6du, 0xa46116538d0deb78u, 0x52d9be85f074e608u,
11010|   514k|            0xcd795be870516656u, 0x67902e276c921f8bu, 0x806bd9714632dff6u, 0x00ba1cd8a3db53b6u,
11011|   514k|            0xa086cfcd97bf97f3u, 0x80e8a40eccd228a4u, 0xc8a883c0fdaf7df0u, 0x6122cd128006b2cdu,
11012|   514k|            0xfad2a4b13d1b5d6cu, 0x796b805720085f81u, 0x9cc3a6eec6311a63u, 0xcbe3303674053bb0u,
11013|   514k|            0xc3f490aa77bd60fcu, 0xbedbfc4411068a9cu, 0xf4f1b4d515acb93bu, 0xee92fb5515482d44u,
11014|   514k|            0x991711052d8bf3c5u, 0x751bdd152d4d1c4au, 0xbf5cd54678eef0b6u, 0xd262d45a78a0635du,
11015|   514k|            0xef340a98172aace4u, 0x86fb897116c87c34u, 0x9580869f0e7aac0eu, 0xd45d35e6ae3d4da0u,
11016|   514k|            0xbae0a846d2195712u, 0x8974836059cca109u, 0xe998d258869facd7u, 0x2bd1a438703fc94bu,
11017|   514k|            0x91ff83775423cc06u, 0x7b6306a34627ddcfu, 0xb67f6455292cbf08u, 0x1a3bc84c17b1d542u,
11018|   514k|            0xe41f3d6a7377eecau, 0x20caba5f1d9e4a93u, 0x8e938662882af53eu, 0x547eb47b7282ee9cu,
11019|   514k|            0xb23867fb2a35b28du, 0xe99e619a4f23aa43u, 0xdec681f9f4c31f31u, 0x6405fa00e2ec94d4u,
11020|   514k|            0x8b3c113c38f9f37eu, 0xde83bc408dd3dd04u, 0xae0b158b4738705eu, 0x9624ab50b148d445u,
11021|   514k|            0xd98ddaee19068c76u, 0x3badd624dd9b0957u, 0x87f8a8d4cfa417c9u, 0xe54ca5d70a80e5d6u,
11022|   514k|            0xa9f6d30a038d1dbcu, 0x5e9fcf4ccd211f4cu, 0xd47487cc8470652bu, 0x7647c3200069671fu,
11023|   514k|            0x84c8d4dfd2c63f3bu, 0x29ecd9f40041e073u, 0xa5fb0a17c777cf09u, 0xf468107100525890u,
11024|   514k|            0xcf79cc9db955c2ccu, 0x7182148d4066eeb4u, 0x81ac1fe293d599bfu, 0xc6f14cd848405530u,
11025|   514k|            0xa21727db38cb002fu, 0xb8ada00e5a506a7cu, 0xca9cf1d206fdc03bu, 0xa6d90811f0e4851cu,
11026|   514k|            0xfd442e4688bd304au, 0x908f4a166d1da663u, 0x9e4a9cec15763e2eu, 0x9a598e4e043287feu,
11027|   514k|            0xc5dd44271ad3cdbau, 0x40eff1e1853f29fdu, 0xf7549530e188c128u, 0xd12bee59e68ef47cu,
11028|   514k|            0x9a94dd3e8cf578b9u, 0x82bb74f8301958ceu, 0xc13a148e3032d6e7u, 0xe36a52363c1faf01u,
11029|   514k|            0xf18899b1bc3f8ca1u, 0xdc44e6c3cb279ac1u, 0x96f5600f15a7b7e5u, 0x29ab103a5ef8c0b9u,
11030|   514k|            0xbcb2b812db11a5deu, 0x7415d448f6b6f0e7u, 0xebdf661791d60f56u, 0x111b495b3464ad21u,
11031|   514k|            0x936b9fcebb25c995u, 0xcab10dd900beec34u, 0xb84687c269ef3bfbu, 0x3d5d514f40eea742u,
11032|   514k|            0xe65829b3046b0afau, 0x0cb4a5a3112a5112u, 0x8ff71a0fe2c2e6dcu, 0x47f0e785eaba72abu,
11033|   514k|            0xb3f4e093db73a093u, 0x59ed216765690f56u, 0xe0f218b8d25088b8u, 0x306869c13ec3532cu,
11034|   514k|            0x8c974f7383725573u, 0x1e414218c73a13fbu, 0xafbd2350644eeacfu, 0xe5d1929ef90898fau,
11035|   514k|            0xdbac6c247d62a583u, 0xdf45f746b74abf39u, 0x894bc396ce5da772u, 0x6b8bba8c328eb783u,
11036|   514k|            0xab9eb47c81f5114fu, 0x066ea92f3f326564u, 0xd686619ba27255a2u, 0xc80a537b0efefebdu,
11037|   514k|            0x8613fd0145877585u, 0xbd06742ce95f5f36u, 0xa798fc4196e952e7u, 0x2c48113823b73704u,
11038|   514k|            0xd17f3b51fca3a7a0u, 0xf75a15862ca504c5u, 0x82ef85133de648c4u, 0x9a984d73dbe722fbu,
11039|   514k|            0xa3ab66580d5fdaf5u, 0xc13e60d0d2e0ebbau, 0xcc963fee10b7d1b3u, 0x318df905079926a8u,
11040|   514k|            0xffbbcfe994e5c61fu, 0xfdf17746497f7052u, 0x9fd561f1fd0f9bd3u, 0xfeb6ea8bedefa633u,
11041|   514k|            0xc7caba6e7c5382c8u, 0xfe64a52ee96b8fc0u, 0xf9bd690a1b68637bu, 0x3dfdce7aa3c673b0u,
11042|   514k|            0x9c1661a651213e2du, 0x06bea10ca65c084eu, 0xc31bfa0fe5698db8u, 0x486e494fcff30a62u,
11043|   514k|            0xf3e2f893dec3f126u, 0x5a89dba3c3efccfau, 0x986ddb5c6b3a76b7u, 0xf89629465a75e01cu,
11044|   514k|            0xbe89523386091465u, 0xf6bbb397f1135823u, 0xee2ba6c0678b597fu, 0x746aa07ded582e2cu,
11045|   514k|            0x94db483840b717efu, 0xa8c2a44eb4571cdcu, 0xba121a4650e4ddebu, 0x92f34d62616ce413u,
11046|   514k|            0xe896a0d7e51e1566u, 0x77b020baf9c81d17u, 0x915e2486ef32cd60u, 0x0ace1474dc1d122eu,
11047|   514k|            0xb5b5ada8aaff80b8u, 0x0d819992132456bau, 0xe3231912d5bf60e6u, 0x10e1fff697ed6c69u,
11048|   514k|            0x8df5efabc5979c8fu, 0xca8d3ffa1ef463c1u, 0xb1736b96b6fd83b3u, 0xbd308ff8a6b17cb2u,
11049|   514k|            0xddd0467c64bce4a0u, 0xac7cb3f6d05ddbdeu, 0x8aa22c0dbef60ee4u, 0x6bcdf07a423aa96bu,
11050|   514k|            0xad4ab7112eb3929du, 0x86c16c98d2c953c6u, 0xd89d64d57a607744u, 0xe871c7bf077ba8b7u,
11051|   514k|            0x87625f056c7c4a8bu, 0x11471cd764ad4972u, 0xa93af6c6c79b5d2du, 0xd598e40d3dd89bcfu,
11052|   514k|            0xd389b47879823479u, 0x4aff1d108d4ec2c3u, 0x843610cb4bf160cbu, 0xcedf722a585139bau,
11053|   514k|            0xa54394fe1eedb8feu, 0xc2974eb4ee658828u, 0xce947a3da6a9273eu, 0x733d226229feea32u,
11054|   514k|            0x811ccc668829b887u, 0x0806357d5a3f525fu, 0xa163ff802a3426a8u, 0xca07c2dcb0cf26f7u,
11055|   514k|            0xc9bcff6034c13052u, 0xfc89b393dd02f0b5u, 0xfc2c3f3841f17c67u, 0xbbac2078d443ace2u,
11056|   514k|            0x9d9ba7832936edc0u, 0xd54b944b84aa4c0du, 0xc5029163f384a931u, 0x0a9e795e65d4df11u,
11057|   514k|            0xf64335bcf065d37du, 0x4d4617b5ff4a16d5u, 0x99ea0196163fa42eu, 0x504bced1bf8e4e45u,
11058|   514k|            0xc06481fb9bcf8d39u, 0xe45ec2862f71e1d6u, 0xf07da27a82c37088u, 0x5d767327bb4e5a4cu,
11059|   514k|            0x964e858c91ba2655u, 0x3a6a07f8d510f86fu, 0xbbe226efb628afeau, 0x890489f70a55368bu,
11060|   514k|            0xeadab0aba3b2dbe5u, 0x2b45ac74ccea842eu, 0x92c8ae6b464fc96fu, 0x3b0b8bc90012929du,
11061|   514k|            0xb77ada0617e3bbcbu, 0x09ce6ebb40173744u, 0xe55990879ddcaabdu, 0xcc420a6a101d0515u,
11062|   514k|            0x8f57fa54c2a9eab6u, 0x9fa946824a12232du, 0xb32df8e9f3546564u, 0x47939822dc96abf9u,
11063|   514k|            0xdff9772470297ebdu, 0x59787e2b93bc56f7u, 0x8bfbea76c619ef36u, 0x57eb4edb3c55b65au,
11064|   514k|            0xaefae51477a06b03u, 0xede622920b6b23f1u, 0xdab99e59958885c4u, 0xe95fab368e45ecedu,
11065|   514k|            0x88b402f7fd75539bu, 0x11dbcb0218ebb414u, 0xaae103b5fcd2a881u, 0xd652bdc29f26a119u,
11066|   514k|            0xd59944a37c0752a2u, 0x4be76d3346f0495fu, 0x857fcae62d8493a5u, 0x6f70a4400c562ddbu,
11067|   514k|            0xa6dfbd9fb8e5b88eu, 0xcb4ccd500f6bb952u, 0xd097ad07a71f26b2u, 0x7e2000a41346a7a7u,
11068|   514k|            0x825ecc24c873782fu, 0x8ed400668c0c28c8u, 0xa2f67f2dfa90563bu, 0x728900802f0f32fau,
11069|   514k|            0xcbb41ef979346bcau, 0x4f2b40a03ad2ffb9u, 0xfea126b7d78186bcu, 0xe2f610c84987bfa8u,
11070|   514k|            0x9f24b832e6b0f436u, 0x0dd9ca7d2df4d7c9u, 0xc6ede63fa05d3143u, 0x91503d1c79720dbbu,
11071|   514k|            0xf8a95fcf88747d94u, 0x75a44c6397ce912au, 0x9b69dbe1b548ce7cu, 0xc986afbe3ee11abau,
11072|   514k|            0xc24452da229b021bu, 0xfbe85badce996168u, 0xf2d56790ab41c2a2u, 0xfae27299423fb9c3u,
11073|   514k|            0x97c560ba6b0919a5u, 0xdccd879fc967d41au, 0xbdb6b8e905cb600fu, 0x5400e987bbc1c920u,
11074|   514k|            0xed246723473e3813u, 0x290123e9aab23b68u, 0x9436c0760c86e30bu, 0xf9a0b6720aaf6521u,
11075|   514k|            0xb94470938fa89bceu, 0xf808e40e8d5b3e69u, 0xe7958cb87392c2c2u, 0xb60b1d1230b20e04u,
11076|   514k|            0x90bd77f3483bb9b9u, 0xb1c6f22b5e6f48c2u, 0xb4ecd5f01a4aa828u, 0x1e38aeb6360b1af3u,
11077|   514k|            0xe2280b6c20dd5232u, 0x25c6da63c38de1b0u, 0x8d590723948a535fu, 0x579c487e5a38ad0eu,
11078|   514k|            0xb0af48ec79ace837u, 0x2d835a9df0c6d851u, 0xdcdb1b2798182244u, 0xf8e431456cf88e65u,
11079|   514k|            0x8a08f0f8bf0f156bu, 0x1b8e9ecb641b58ffu, 0xac8b2d36eed2dac5u, 0xe272467e3d222f3fu,
11080|   514k|            0xd7adf884aa879177u, 0x5b0ed81dcc6abb0fu, 0x86ccbb52ea94baeau, 0x98e947129fc2b4e9u,
11081|   514k|            0xa87fea27a539e9a5u, 0x3f2398d747b36224u, 0xd29fe4b18e88640eu, 0x8eec7f0d19a03aadu,
11082|   514k|            0x83a3eeeef9153e89u, 0x1953cf68300424acu, 0xa48ceaaab75a8e2bu, 0x5fa8c3423c052dd7u,
11083|   514k|            0xcdb02555653131b6u, 0x3792f412cb06794du, 0x808e17555f3ebf11u, 0xe2bbd88bbee40bd0u,
11084|   514k|            0xa0b19d2ab70e6ed6u, 0x5b6aceaeae9d0ec4u, 0xc8de047564d20a8bu, 0xf245825a5a445275u,
11085|   514k|            0xfb158592be068d2eu, 0xeed6e2f0f0d56712u, 0x9ced737bb6c4183du, 0x55464dd69685606bu,
11086|   514k|            0xc428d05aa4751e4cu, 0xaa97e14c3c26b886u, 0xf53304714d9265dfu, 0xd53dd99f4b3066a8u,
11087|   514k|            0x993fe2c6d07b7fabu, 0xe546a8038efe4029u, 0xbf8fdb78849a5f96u, 0xde98520472bdd033u,
11088|   514k|            0xef73d256a5c0f77cu, 0x963e66858f6d4440u, 0x95a8637627989aadu, 0xdde7001379a44aa8u,
11089|   514k|            0xbb127c53b17ec159u, 0x5560c018580d5d52u, 0xe9d71b689dde71afu, 0xaab8f01e6e10b4a6u,
11090|   514k|            0x9226712162ab070du, 0xcab3961304ca70e8u, 0xb6b00d69bb55c8d1u, 0x3d607b97c5fd0d22u,
11091|   514k|            0xe45c10c42a2b3b05u, 0x8cb89a7db77c506au, 0x8eb98a7a9a5b04e3u, 0x77f3608e92adb242u,
11092|   514k|            0xb267ed1940f1c61cu, 0x55f038b237591ed3u, 0xdf01e85f912e37a3u, 0x6b6c46dec52f6688u,
11093|   514k|            0x8b61313bbabce2c6u, 0x2323ac4b3b3da015u, 0xae397d8aa96c1b77u, 0xabec975e0a0d081au,
11094|   514k|            0xd9c7dced53c72255u, 0x96e7bd358c904a21u, 0x881cea14545c7575u, 0x7e50d64177da2e54u,
11095|   514k|            0xaa242499697392d2u, 0xdde50bd1d5d0b9e9u, 0xd4ad2dbfc3d07787u, 0x955e4ec64b44e864u,
11096|   514k|            0x84ec3c97da624ab4u, 0xbd5af13bef0b113eu, 0xa6274bbdd0fadd61u, 0xecb1ad8aeacdd58eu,
11097|   514k|            0xcfb11ead453994bau, 0x67de18eda5814af2u, 0x81ceb32c4b43fcf4u, 0x80eacf948770ced7u,
11098|   514k|            0xa2425ff75e14fc31u, 0xa1258379a94d028du, 0xcad2f7f5359a3b3eu, 0x096ee45813a04330u,
11099|   514k|            0xfd87b5f28300ca0du, 0x8bca9d6e188853fcu, 0x9e74d1b791e07e48u, 0x775ea264cf55347eu,
11100|   514k|            0xc612062576589ddau, 0x95364afe032a819eu, 0xf79687aed3eec551u, 0x3a83ddbd83f52205u,
11101|   514k|            0x9abe14cd44753b52u, 0xc4926a9672793543u, 0xc16d9a0095928a27u, 0x75b7053c0f178294u,
11102|   514k|            0xf1c90080baf72cb1u, 0x5324c68b12dd6339u, 0x971da05074da7beeu, 0xd3f6fc16ebca5e04u,
11103|   514k|            0xbce5086492111aeau, 0x88f4bb1ca6bcf585u, 0xec1e4a7db69561a5u, 0x2b31e9e3d06c32e6u,
11104|   514k|            0x9392ee8e921d5d07u, 0x3aff322e62439fd0u, 0xb877aa3236a4b449u, 0x09befeb9fad487c3u,
11105|   514k|            0xe69594bec44de15bu, 0x4c2ebe687989a9b4u, 0x901d7cf73ab0acd9u, 0x0f9d37014bf60a11u,
11106|   514k|            0xb424dc35095cd80fu, 0x538484c19ef38c95u, 0xe12e13424bb40e13u, 0x2865a5f206b06fbau,
11107|   514k|            0x8cbccc096f5088cbu, 0xf93f87b7442e45d4u, 0xafebff0bcb24aafeu, 0xf78f69a51539d749u,
11108|   514k|            0xdbe6fecebdedd5beu, 0xb573440e5a884d1cu, 0x89705f4136b4a597u, 0x31680a88f8953031u,
11109|   514k|            0xabcc77118461cefcu, 0xfdc20d2b36ba7c3eu, 0xd6bf94d5e57a42bcu, 0x3d32907604691b4du,
11110|   514k|            0x8637bd05af6c69b5u, 0xa63f9a49c2c1b110u, 0xa7c5ac471b478423u, 0x0fcf80dc33721d54u,
11111|   514k|            0xd1b71758e219652bu, 0xd3c36113404ea4a9u, 0x83126e978d4fdf3bu, 0x645a1cac083126eau,
11112|   514k|            0xa3d70a3d70a3d70au, 0x3d70a3d70a3d70a4u, 0xccccccccccccccccu, 0xcccccccccccccccdu,
11113|   514k|            0x8000000000000000u, 0x0000000000000000u, 0xa000000000000000u, 0x0000000000000000u,
11114|   514k|            0xc800000000000000u, 0x0000000000000000u, 0xfa00000000000000u, 0x0000000000000000u,
11115|   514k|            0x9c40000000000000u, 0x0000000000000000u, 0xc350000000000000u, 0x0000000000000000u,
11116|   514k|            0xf424000000000000u, 0x0000000000000000u, 0x9896800000000000u, 0x0000000000000000u,
11117|   514k|            0xbebc200000000000u, 0x0000000000000000u, 0xee6b280000000000u, 0x0000000000000000u,
11118|   514k|            0x9502f90000000000u, 0x0000000000000000u, 0xba43b74000000000u, 0x0000000000000000u,
11119|   514k|            0xe8d4a51000000000u, 0x0000000000000000u, 0x9184e72a00000000u, 0x0000000000000000u,
11120|   514k|            0xb5e620f480000000u, 0x0000000000000000u, 0xe35fa931a0000000u, 0x0000000000000000u,
11121|   514k|            0x8e1bc9bf04000000u, 0x0000000000000000u, 0xb1a2bc2ec5000000u, 0x0000000000000000u,
11122|   514k|            0xde0b6b3a76400000u, 0x0000000000000000u, 0x8ac7230489e80000u, 0x0000000000000000u,
11123|   514k|            0xad78ebc5ac620000u, 0x0000000000000000u, 0xd8d726b7177a8000u, 0x0000000000000000u,
11124|   514k|            0x878678326eac9000u, 0x0000000000000000u, 0xa968163f0a57b400u, 0x0000000000000000u,
11125|   514k|            0xd3c21bcecceda100u, 0x0000000000000000u, 0x84595161401484a0u, 0x0000000000000000u,
11126|   514k|            0xa56fa5b99019a5c8u, 0x0000000000000000u, 0xcecb8f27f4200f3au, 0x0000000000000000u,
11127|   514k|            0x813f3978f8940984u, 0x4000000000000000u, 0xa18f07d736b90be5u, 0x5000000000000000u,
11128|   514k|            0xc9f2c9cd04674edeu, 0xa400000000000000u, 0xfc6f7c4045812296u, 0x4d00000000000000u,
11129|   514k|            0x9dc5ada82b70b59du, 0xf020000000000000u, 0xc5371912364ce305u, 0x6c28000000000000u,
11130|   514k|            0xf684df56c3e01bc6u, 0xc732000000000000u, 0x9a130b963a6c115cu, 0x3c7f400000000000u,
11131|   514k|            0xc097ce7bc90715b3u, 0x4b9f100000000000u, 0xf0bdc21abb48db20u, 0x1e86d40000000000u,
11132|   514k|            0x96769950b50d88f4u, 0x1314448000000000u, 0xbc143fa4e250eb31u, 0x17d955a000000000u,
11133|   514k|            0xeb194f8e1ae525fdu, 0x5dcfab0800000000u, 0x92efd1b8d0cf37beu, 0x5aa1cae500000000u,
11134|   514k|            0xb7abc627050305adu, 0xf14a3d9e40000000u, 0xe596b7b0c643c719u, 0x6d9ccd05d0000000u,
11135|   514k|            0x8f7e32ce7bea5c6fu, 0xe4820023a2000000u, 0xb35dbf821ae4f38bu, 0xdda2802c8a800000u,
11136|   514k|            0xe0352f62a19e306eu, 0xd50b2037ad200000u, 0x8c213d9da502de45u, 0x4526f422cc340000u,
11137|   514k|            0xaf298d050e4395d6u, 0x9670b12b7f410000u, 0xdaf3f04651d47b4cu, 0x3c0cdd765f114000u,
11138|   514k|            0x88d8762bf324cd0fu, 0xa5880a69fb6ac800u, 0xab0e93b6efee0053u, 0x8eea0d047a457a00u,
11139|   514k|            0xd5d238a4abe98068u, 0x72a4904598d6d880u, 0x85a36366eb71f041u, 0x47a6da2b7f864750u,
11140|   514k|            0xa70c3c40a64e6c51u, 0x999090b65f67d924u, 0xd0cf4b50cfe20765u, 0xfff4b4e3f741cf6du,
11141|   514k|            0x82818f1281ed449fu, 0xbff8f10e7a8921a4u, 0xa321f2d7226895c7u, 0xaff72d52192b6a0du,
11142|   514k|            0xcbea6f8ceb02bb39u, 0x9bf4f8a69f764490u, 0xfee50b7025c36a08u, 0x02f236d04753d5b4u,
11143|   514k|            0x9f4f2726179a2245u, 0x01d762422c946590u, 0xc722f0ef9d80aad6u, 0x424d3ad2b7b97ef5u,
11144|   514k|            0xf8ebad2b84e0d58bu, 0xd2e0898765a7deb2u, 0x9b934c3b330c8577u, 0x63cc55f49f88eb2fu,
11145|   514k|            0xc2781f49ffcfa6d5u, 0x3cbf6b71c76b25fbu, 0xf316271c7fc3908au, 0x8bef464e3945ef7au,
11146|   514k|            0x97edd871cfda3a56u, 0x97758bf0e3cbb5acu, 0xbde94e8e43d0c8ecu, 0x3d52eeed1cbea317u,
11147|   514k|            0xed63a231d4c4fb27u, 0x4ca7aaa863ee4bddu, 0x945e455f24fb1cf8u, 0x8fe8caa93e74ef6au,
11148|   514k|            0xb975d6b6ee39e436u, 0xb3e2fd538e122b44u, 0xe7d34c64a9c85d44u, 0x60dbbca87196b616u,
11149|   514k|            0x90e40fbeea1d3a4au, 0xbc8955e946fe31cdu, 0xb51d13aea4a488ddu, 0x6babab6398bdbe41u,
11150|   514k|            0xe264589a4dcdab14u, 0xc696963c7eed2dd1u, 0x8d7eb76070a08aecu, 0xfc1e1de5cf543ca2u,
11151|   514k|            0xb0de65388cc8ada8u, 0x3b25a55f43294bcbu, 0xdd15fe86affad912u, 0x49ef0eb713f39ebeu,
11152|   514k|            0x8a2dbf142dfcc7abu, 0x6e3569326c784337u, 0xacb92ed9397bf996u, 0x49c2c37f07965404u,
11153|   514k|            0xd7e77a8f87daf7fbu, 0xdc33745ec97be906u, 0x86f0ac99b4e8dafdu, 0x69a028bb3ded71a3u,
11154|   514k|            0xa8acd7c0222311bcu, 0xc40832ea0d68ce0cu, 0xd2d80db02aabd62bu, 0xf50a3fa490c30190u,
11155|   514k|            0x83c7088e1aab65dbu, 0x792667c6da79e0fau, 0xa4b8cab1a1563f52u, 0x577001b891185938u,
11156|   514k|            0xcde6fd5e09abcf26u, 0xed4c0226b55e6f86u, 0x80b05e5ac60b6178u, 0x544f8158315b05b4u,
11157|   514k|            0xa0dc75f1778e39d6u, 0x696361ae3db1c721u, 0xc913936dd571c84cu, 0x03bc3a19cd1e38e9u,
11158|   514k|            0xfb5878494ace3a5fu, 0x04ab48a04065c723u, 0x9d174b2dcec0e47bu, 0x62eb0d64283f9c76u,
11159|   514k|            0xc45d1df942711d9au, 0x3ba5d0bd324f8394u, 0xf5746577930d6500u, 0xca8f44ec7ee36479u,
11160|   514k|            0x9968bf6abbe85f20u, 0x7e998b13cf4e1ecbu, 0xbfc2ef456ae276e8u, 0x9e3fedd8c321a67eu,
11161|   514k|            0xefb3ab16c59b14a2u, 0xc5cfe94ef3ea101eu, 0x95d04aee3b80ece5u, 0xbba1f1d158724a12u,
11162|   514k|            0xbb445da9ca61281fu, 0x2a8a6e45ae8edc97u, 0xea1575143cf97226u, 0xf52d09d71a3293bdu,
11163|   514k|            0x924d692ca61be758u, 0x593c2626705f9c56u, 0xb6e0c377cfa2e12eu, 0x6f8b2fb00c77836cu,
11164|   514k|            0xe498f455c38b997au, 0x0b6dfb9c0f956447u, 0x8edf98b59a373fecu, 0x4724bd4189bd5eacu,
11165|   514k|            0xb2977ee300c50fe7u, 0x58edec91ec2cb657u, 0xdf3d5e9bc0f653e1u, 0x2f2967b66737e3edu,
11166|   514k|            0x8b865b215899f46cu, 0xbd79e0d20082ee74u, 0xae67f1e9aec07187u, 0xecd8590680a3aa11u,
11167|   514k|            0xda01ee641a708de9u, 0xe80e6f4820cc9495u, 0x884134fe908658b2u, 0x3109058d147fdcddu,
11168|   514k|            0xaa51823e34a7eedeu, 0xbd4b46f0599fd415u, 0xd4e5e2cdc1d1ea96u, 0x6c9e18ac7007c91au,
11169|   514k|            0x850fadc09923329eu, 0x03e2cf6bc604ddb0u, 0xa6539930bf6bff45u, 0x84db8346b786151cu,
11170|   514k|            0xcfe87f7cef46ff16u, 0xe612641865679a63u, 0x81f14fae158c5f6eu, 0x4fcb7e8f3f60c07eu,
11171|   514k|            0xa26da3999aef7749u, 0xe3be5e330f38f09du, 0xcb090c8001ab551cu, 0x5cadf5bfd3072cc5u,
11172|   514k|            0xfdcb4fa002162a63u, 0x73d9732fc7c8f7f6u, 0x9e9f11c4014dda7eu, 0x2867e7fddcdd9afau,
11173|   514k|            0xc646d63501a1511du, 0xb281e1fd541501b8u, 0xf7d88bc24209a565u, 0x1f225a7ca91a4226u,
11174|   514k|            0x9ae757596946075fu, 0x3375788de9b06958u, 0xc1a12d2fc3978937u, 0x0052d6b1641c83aeu,
11175|   514k|            0xf209787bb47d6b84u, 0xc0678c5dbd23a49au, 0x9745eb4d50ce6332u, 0xf840b7ba963646e0u,
11176|   514k|            0xbd176620a501fbffu, 0xb650e5a93bc3d898u, 0xec5d3fa8ce427affu, 0xa3e51f138ab4cebeu,
11177|   514k|            0x93ba47c980e98cdfu, 0xc66f336c36b10137u, 0xb8a8d9bbe123f017u, 0xb80b0047445d4184u,
11178|   514k|            0xe6d3102ad96cec1du, 0xa60dc059157491e5u, 0x9043ea1ac7e41392u, 0x87c89837ad68db2fu,
11179|   514k|            0xb454e4a179dd1877u, 0x29babe4598c311fbu, 0xe16a1dc9d8545e94u, 0xf4296dd6fef3d67au,
11180|   514k|            0x8ce2529e2734bb1du, 0x1899e4a65f58660cu, 0xb01ae745b101e9e4u, 0x5ec05dcff72e7f8fu,
11181|   514k|            0xdc21a1171d42645du, 0x76707543f4fa1f73u, 0x899504ae72497ebau, 0x6a06494a791c53a8u,
11182|   514k|            0xabfa45da0edbde69u, 0x0487db9d17636892u, 0xd6f8d7509292d603u, 0x45a9d2845d3c42b6u,
11183|   514k|            0x865b86925b9bc5c2u, 0x0b8a2392ba45a9b2u, 0xa7f26836f282b732u, 0x8e6cac7768d7141eu,
11184|   514k|            0xd1ef0244af2364ffu, 0x3207d795430cd926u, 0x8335616aed761f1fu, 0x7f44e6bd49e807b8u,
11185|   514k|            0xa402b9c5a8d3a6e7u, 0x5f16206c9c6209a6u, 0xcd036837130890a1u, 0x36dba887c37a8c0fu,
11186|   514k|            0x802221226be55a64u, 0xc2494954da2c9789u, 0xa02aa96b06deb0fdu, 0xf2db9baa10b7bd6cu,
11187|   514k|            0xc83553c5c8965d3du, 0x6f92829494e5acc7u, 0xfa42a8b73abbf48cu, 0xcb772339ba1f17f9u,
11188|   514k|            0x9c69a97284b578d7u, 0xff2a760414536efbu, 0xc38413cf25e2d70du, 0xfef5138519684abau,
11189|   514k|            0xf46518c2ef5b8cd1u, 0x7eb258665fc25d69u, 0x98bf2f79d5993802u, 0xef2f773ffbd97a61u,
11190|   514k|            0xbeeefb584aff8603u, 0xaafb550ffacfd8fau, 0xeeaaba2e5dbf6784u, 0x95ba2a53f983cf38u,
11191|   514k|            0x952ab45cfa97a0b2u, 0xdd945a747bf26183u, 0xba756174393d88dfu, 0x94f971119aeef9e4u,
11192|   514k|            0xe912b9d1478ceb17u, 0x7a37cd5601aab85du, 0x91abb422ccb812eeu, 0xac62e055c10ab33au,
11193|   514k|            0xb616a12b7fe617aau, 0x577b986b314d6009u, 0xe39c49765fdf9d94u, 0xed5a7e85fda0b80bu,
11194|   514k|            0x8e41ade9fbebc27du, 0x14588f13be847307u, 0xb1d219647ae6b31cu, 0x596eb2d8ae258fc8u,
11195|   514k|            0xde469fbd99a05fe3u, 0x6fca5f8ed9aef3bbu, 0x8aec23d680043beeu, 0x25de7bb9480d5854u,
11196|   514k|            0xada72ccc20054ae9u, 0xaf561aa79a10ae6au, 0xd910f7ff28069da4u, 0x1b2ba1518094da04u,
11197|   514k|            0x87aa9aff79042286u, 0x90fb44d2f05d0842u, 0xa99541bf57452b28u, 0x353a1607ac744a53u,
11198|   514k|            0xd3fa922f2d1675f2u, 0x42889b8997915ce8u, 0x847c9b5d7c2e09b7u, 0x69956135febada11u,
11199|   514k|            0xa59bc234db398c25u, 0x43fab9837e699095u, 0xcf02b2c21207ef2eu, 0x94f967e45e03f4bbu,
11200|   514k|            0x8161afb94b44f57du, 0x1d1be0eebac278f5u, 0xa1ba1ba79e1632dcu, 0x6462d92a69731732u,
11201|   514k|            0xca28a291859bbf93u, 0x7d7b8f7503cfdcfeu, 0xfcb2cb35e702af78u, 0x5cda735244c3d43eu,
11202|   514k|            0x9defbf01b061adabu, 0x3a0888136afa64a7u, 0xc56baec21c7a1916u, 0x088aaa1845b8fdd0u,
11203|   514k|            0xf6c69a72a3989f5bu, 0x8aad549e57273d45u, 0x9a3c2087a63f6399u, 0x36ac54e2f678864bu,
11204|   514k|            0xc0cb28a98fcf3c7fu, 0x84576a1bb416a7ddu, 0xf0fdf2d3f3c30b9fu, 0x656d44a2a11c51d5u,
11205|   514k|            0x969eb7c47859e743u, 0x9f644ae5a4b1b325u, 0xbc4665b596706114u, 0x873d5d9f0dde1feeu,
11206|   514k|            0xeb57ff22fc0c7959u, 0xa90cb506d155a7eau, 0x9316ff75dd87cbd8u, 0x09a7f12442d588f2u,
11207|   514k|            0xb7dcbf5354e9beceu, 0x0c11ed6d538aeb2fu, 0xe5d3ef282a242e81u, 0x8f1668c8a86da5fau,
11208|   514k|            0x8fa475791a569d10u, 0xf96e017d694487bcu, 0xb38d92d760ec4455u, 0x37c981dcc395a9acu,
11209|   514k|            0xe070f78d3927556au, 0x85bbe253f47b1417u, 0x8c469ab843b89562u, 0x93956d7478ccec8eu,
11210|   514k|            0xaf58416654a6babbu, 0x387ac8d1970027b2u, 0xdb2e51bfe9d0696au, 0x06997b05fcc0319eu,
11211|   514k|            0x88fcf317f22241e2u, 0x441fece3bdf81f03u, 0xab3c2fddeeaad25au, 0xd527e81cad7626c3u,
11212|   514k|            0xd60b3bd56a5586f1u, 0x8a71e223d8d3b074u, 0x85c7056562757456u, 0xf6872d5667844e49u,
11213|   514k|            0xa738c6bebb12d16cu, 0xb428f8ac016561dbu, 0xd106f86e69d785c7u, 0xe13336d701beba52u,
11214|   514k|            0x82a45b450226b39cu, 0xecc0024661173473u, 0xa34d721642b06084u, 0x27f002d7f95d0190u,
11215|   514k|            0xcc20ce9bd35c78a5u, 0x31ec038df7b441f4u, 0xff290242c83396ceu, 0x7e67047175a15271u,
11216|   514k|            0x9f79a169bd203e41u, 0x0f0062c6e984d386u, 0xc75809c42c684dd1u, 0x52c07b78a3e60868u,
11217|   514k|            0xf92e0c3537826145u, 0xa7709a56ccdf8a82u, 0x9bbcc7a142b17ccbu, 0x88a66076400bb691u,
11218|   514k|            0xc2abf989935ddbfeu, 0x6acff893d00ea435u, 0xf356f7ebf83552feu, 0x0583f6b8c4124d43u,
11219|   514k|            0x98165af37b2153deu, 0xc3727a337a8b704au, 0xbe1bf1b059e9a8d6u, 0x744f18c0592e4c5cu,
11220|   514k|            0xeda2ee1c7064130cu, 0x1162def06f79df73u, 0x9485d4d1c63e8be7u, 0x8addcb5645ac2ba8u,
11221|   514k|            0xb9a74a0637ce2ee1u, 0x6d953e2bd7173692u, 0xe8111c87c5c1ba99u, 0xc8fa8db6ccdd0437u,
11222|   514k|            0x910ab1d4db9914a0u, 0x1d9c9892400a22a2u, 0xb54d5e4a127f59c8u, 0x2503beb6d00cab4bu,
11223|   514k|            0xe2a0b5dc971f303au, 0x2e44ae64840fd61du, 0x8da471a9de737e24u, 0x5ceaecfed289e5d2u,
11224|   514k|            0xb10d8e1456105dadu, 0x7425a83e872c5f47u, 0xdd50f1996b947518u, 0xd12f124e28f77719u,
11225|   514k|            0x8a5296ffe33cc92fu, 0x82bd6b70d99aaa6fu, 0xace73cbfdc0bfb7bu, 0x636cc64d1001550bu,
11226|   514k|            0xd8210befd30efa5au, 0x3c47f7e05401aa4eu, 0x8714a775e3e95c78u, 0x65acfaec34810a71u,
11227|   514k|            0xa8d9d1535ce3b396u, 0x7f1839a741a14d0du, 0xd31045a8341ca07cu, 0x1ede48111209a050u,
11228|   514k|            0x83ea2b892091e44du, 0x934aed0aab460432u, 0xa4e4b66b68b65d60u, 0xf81da84d5617853fu,
11229|   514k|            0xce1de40642e3f4b9u, 0x36251260ab9d668eu, 0x80d2ae83e9ce78f3u, 0xc1d72b7c6b426019u,
11230|   514k|            0xa1075a24e4421730u, 0xb24cf65b8612f81fu, 0xc94930ae1d529cfcu, 0xdee033f26797b627u,
11231|   514k|            0xfb9b7cd9a4a7443cu, 0x169840ef017da3b1u, 0x9d412e0806e88aa5u, 0x8e1f289560ee864eu,
11232|   514k|            0xc491798a08a2ad4eu, 0xf1a6f2bab92a27e2u, 0xf5b5d7ec8acb58a2u, 0xae10af696774b1dbu,
11233|   514k|            0x9991a6f3d6bf1765u, 0xacca6da1e0a8ef29u, 0xbff610b0cc6edd3fu, 0x17fd090a58d32af3u,
11234|   514k|            0xeff394dcff8a948eu, 0xddfc4b4cef07f5b0u, 0x95f83d0a1fb69cd9u, 0x4abdaf101564f98eu,
11235|   514k|            0xbb764c4ca7a4440fu, 0x9d6d1ad41abe37f1u, 0xea53df5fd18d5513u, 0x84c86189216dc5edu,
11236|   514k|            0x92746b9be2f8552cu, 0x32fd3cf5b4e49bb4u, 0xb7118682dbb66a77u, 0x3fbc8c33221dc2a1u,
11237|   514k|            0xe4d5e82392a40515u, 0x0fabaf3feaa5334au, 0x8f05b1163ba6832du, 0x29cb4d87f2a7400eu,
11238|   514k|            0xb2c71d5bca9023f8u, 0x743e20e9ef511012u, 0xdf78e4b2bd342cf6u, 0x914da9246b255416u,
11239|   514k|            0x8bab8eefb6409c1au, 0x1ad089b6c2f7548eu, 0xae9672aba3d0c320u, 0xa184ac2473b529b1u,
11240|   514k|            0xda3c0f568cc4f3e8u, 0xc9e5d72d90a2741eu, 0x8865899617fb1871u, 0x7e2fa67c7a658892u,
11241|   514k|            0xaa7eebfb9df9de8du, 0xddbb901b98feeab7u, 0xd51ea6fa85785631u, 0x552a74227f3ea565u,
11242|   514k|            0x8533285c936b35deu, 0xd53a88958f87275fu, 0xa67ff273b8460356u, 0x8a892abaf368f137u,
11243|   514k|            0xd01fef10a657842cu, 0x2d2b7569b0432d85u, 0x8213f56a67f6b29bu, 0x9c3b29620e29fc73u,
11244|   514k|            0xa298f2c501f45f42u, 0x8349f3ba91b47b8fu, 0xcb3f2f7642717713u, 0x241c70a936219a73u,
11245|   514k|            0xfe0efb53d30dd4d7u, 0xed238cd383aa0110u, 0x9ec95d1463e8a506u, 0xf4363804324a40aau,
11246|   514k|            0xc67bb4597ce2ce48u, 0xb143c6053edcd0d5u, 0xf81aa16fdc1b81dau, 0xdd94b7868e94050au,
11247|   514k|            0x9b10a4e5e9913128u, 0xca7cf2b4191c8326u, 0xc1d4ce1f63f57d72u, 0xfd1c2f611f63a3f0u,
11248|   514k|            0xf24a01a73cf2dccfu, 0xbc633b39673c8cecu, 0x976e41088617ca01u, 0xd5be0503e085d813u,
11249|   514k|            0xbd49d14aa79dbc82u, 0x4b2d8644d8a74e18u, 0xec9c459d51852ba2u, 0xddf8e7d60ed1219eu,
11250|   514k|            0x93e1ab8252f33b45u, 0xcabb90e5c942b503u, 0xb8da1662e7b00a17u, 0x3d6a751f3b936243u,
11251|   514k|            0xe7109bfba19c0c9du, 0x0cc512670a783ad4u, 0x906a617d450187e2u, 0x27fb2b80668b24c5u,
11252|   514k|            0xb484f9dc9641e9dau, 0xb1f9f660802dedf6u, 0xe1a63853bbd26451u, 0x5e7873f8a0396973u,
11253|   514k|            0x8d07e33455637eb2u, 0xdb0b487b6423e1e8u, 0xb049dc016abc5e5fu, 0x91ce1a9a3d2cda62u,
11254|   514k|            0xdc5c5301c56b75f7u, 0x7641a140cc7810fbu, 0x89b9b3e11b6329bau, 0xa9e904c87fcb0a9du,
11255|   514k|            0xac2820d9623bf429u, 0x546345fa9fbdcd44u, 0xd732290fbacaf133u, 0xa97c177947ad4095u,
11256|   514k|            0x867f59a9d4bed6c0u, 0x49ed8eabcccc485du, 0xa81f301449ee8c70u, 0x5c68f256bfff5a74u,
11257|   514k|            0xd226fc195c6a2f8cu, 0x73832eec6fff3111u, 0x83585d8fd9c25db7u, 0xc831fd53c5ff7eabu,
11258|   514k|            0xa42e74f3d032f525u, 0xba3e7ca8b77f5e55u, 0xcd3a1230c43fb26fu, 0x28ce1bd2e55f35ebu,
11259|   514k|            0x80444b5e7aa7cf85u, 0x7980d163cf5b81b3u, 0xa0555e361951c366u, 0xd7e105bcc332621fu,
11260|   514k|            0xc86ab5c39fa63440u, 0x8dd9472bf3fefaa7u, 0xfa856334878fc150u, 0xb14f98f6f0feb951u,
11261|   514k|            0x9c935e00d4b9d8d2u, 0x6ed1bf9a569f33d3u, 0xc3b8358109e84f07u, 0x0a862f80ec4700c8u,
11262|   514k|            0xf4a642e14c6262c8u, 0xcd27bb612758c0fau, 0x98e7e9cccfbd7dbdu, 0x8038d51cb897789cu,
11263|   514k|            0xbf21e44003acdd2cu, 0xe0470a63e6bd56c3u, 0xeeea5d5004981478u, 0x1858ccfce06cac74u,
11264|   514k|            0x95527a5202df0ccbu, 0x0f37801e0c43ebc8u, 0xbaa718e68396cffdu, 0xd30560258f54e6bau,
11265|   514k|            0xe950df20247c83fdu, 0x47c6b82ef32a2069u, 0x91d28b7416cdd27eu, 0x4cdc331d57fa5441u,
11266|   514k|            0xb6472e511c81471du, 0xe0133fe4adf8e952u, 0xe3d8f9e563a198e5u, 0x58180fddd97723a6u,
11267|   514k|            0x8e679c2f5e44ff8fu, 0x570f09eaa7ea7648u,
11268|   514k|        }
11269|   514k|    };
11270|   514k|    return table;
11271|   514k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij13umul192_hi128Emmm:
35114|   249k|{
35115|   249k|    const uint128_parts p = full_multiplication(x_hi, y);
35116|   249k|    uint128_parts r{};
35117|   249k|    r.low = p.low + full_multiplication(x_lo, y).high;
35118|   249k|    r.high = p.high + (r.low < p.low ? 1u : 0u);
  ------------------
  |  Branch (35118:24): [True: 961, False: 248k]
  ------------------
35119|   249k|    return r;
35120|   249k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij16umul128_add_hi64Emmm:
35124|   257k|{
35125|   257k|    const uint128_parts p = full_multiplication(x, y);
35126|   257k|    return p.high + (p.low + c < p.low ? 1u : 0u);
  ------------------
  |  Branch (35126:22): [True: 65.4k, False: 191k]
  ------------------
35127|   257k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_shortestEPcNS1_4zmij16shortest_decimalE:
36353|   249k|{
36354|   249k|    const std::uint64_t sig = d.integral;
36355|   249k|    if (JSON_HEDLEY_UNLIKELY(sig < 100000000000000u || sig >= 10000000000000000u))
  ------------------
  |  | 1697|   495k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2.67k, False: 246k]
  |  |  |  Branch (1697:94): [True: 2.67k, False: 246k]
  |  |  |  Branch (1697:94): [True: 0, False: 246k]
  |  |  ------------------
  ------------------
36356|  2.67k|    {
36357|       |        // (subnormals)
36358|  2.67k|        return d.has_digit ? write_decimal(first, (sig * 10) + d.digit, d.exponent) : write_decimal(first, sig, d.exponent + 1);
  ------------------
  |  Branch (36358:16): [True: 1.31k, False: 1.35k]
  ------------------
36359|  2.67k|    }
36360|   246k|    const bool sixteen = sig >= 1000000000000000u; // (else 15 digits)
36361|   246k|    const int last = d.has_digit ? d.digit : 0;
  ------------------
  |  Branch (36361:22): [True: 85.8k, False: 160k]
  ------------------
36362|   246k|    const std::uint64_t upper = sig / 100000000u;
36363|   246k|#if JSON_DTOA_SSE2
36364|       |    // NOLINTBEGIN(portability-simd-intrinsics)
36365|       |    // the two halves in the 64-bit lanes, each as abcd * 2^32 + efgh, then as
36366|       |    // bytes (as eight_digit_bytes(), one lane each)
36367|   246k|    const __m128i x = _mm_set_epi64x(static_cast<long long>(sig - (upper * 100000000u)), static_cast<long long>(upper)); // NOLINT(runtime/int)
36368|   246k|    const __m128i abcd = _mm_srli_epi64(_mm_mul_epu32(x, _mm_set1_epi64x(109951163)), 40); // 2^40 / 10000 + 1
36369|   246k|    const __m128i abcd_efgh = _mm_add_epi64(x, _mm_mul_epu32(abcd, _mm_set1_epi64x(4294957296))); // 2^32 - 10000
36370|       |    // 32-bit lanes in the order of the text: abcd, efgh of both halves
36371|   246k|    const __m128i fours = _mm_shuffle_epi32(abcd_efgh, _MM_SHUFFLE(2, 3, 0, 1));
36372|   246k|    const __m128i ab = _mm_srli_epi16(_mm_mulhi_epu16(fours, _mm_set1_epi32(5243)), 3);
36373|   246k|    const __m128i ab_cd = _mm_or_si128(_mm_slli_epi32(_mm_sub_epi16(fours, _mm_mullo_epi16(ab, _mm_set1_epi32(100))), 16), ab);
36374|       |    // 16-bit lanes ab (< 100) -> bytes a, b: 256 * ab - 2559 * (ab / 10)
36375|   246k|    const __m128i bytes = _mm_sub_epi16(_mm_slli_epi16(ab_cd, 8), _mm_mullo_epi16(_mm_set1_epi16(2559), _mm_mulhi_epu16(ab_cd, _mm_set1_epi16(6554))));
36376|       |    // the last digit that is not 0 (sig is not 0)
36377|   246k|    const auto nonzero = static_cast<std::uint64_t>(_mm_movemask_epi8(_mm_cmpgt_epi8(bytes, _mm_setzero_si128())));
36378|   246k|    const int digits = 63 - count_leading_zeros(nonzero) + (sixteen ? 1 : 0); // without trailing zeros
  ------------------
  |  Branch (36378:61): [True: 163k, False: 83.3k]
  ------------------
36379|   246k|    const __m128i chars = _mm_add_epi8(bytes, _mm_set1_epi8('0'));
36380|       |    // the 16 characters from the first digit
36381|   246k|    const __m128i s = sixteen ? chars : _mm_or_si128(_mm_srli_si128(chars, 1), _mm_slli_si128(_mm_cvtsi32_si128('0' + last), 15));
  ------------------
  |  Branch (36381:23): [True: 163k, False: 83.3k]
  ------------------
36382|   246k|    const char s16 = static_cast<char>(sixteen ? '0' + last : '0'); // the 17th
  ------------------
  |  Branch (36382:40): [True: 163k, False: 83.3k]
  ------------------
36383|   246k|    const auto store_16 = [&s](char* p) noexcept
36384|   246k|    {
36385|   246k|        std::memcpy(p, &s, 16);
36386|   246k|    };
36387|   246k|    const char first_digit = static_cast<char>(_mm_cvtsi128_si32(s));
36388|       |    // NOLINTEND(portability-simd-intrinsics)
36389|       |#elif JSON_DTOA_NEON
36390|       |    // as with SSE2: the halves in 32-bit lanes, then abcd, efgh of both
36391|       |    const uint32x2_t halves = vcreate_u32(upper | ((sig - (upper * 100000000u)) << 32u));
36392|       |    const uint32x2_t abcd = vmovn_u64(vshrq_n_u64(vmull_n_u32(halves, static_cast<std::uint32_t>(((std::uint64_t{1} << 40u) / 10000u) + 1u)), 40));
36393|       |    const uint32x2_t efgh = vmls_n_u32(halves, abcd, 10000u);
36394|       |    const uint32x4_t fours = vcombine_u32(vzip1_u32(abcd, efgh), vzip2_u32(abcd, efgh));
36395|       |    const uint32x4_t ab = vshrq_n_u32(vmulq_n_u32(fours, 5243u), 19);
36396|       |    const uint16x8_t ab_cd = vreinterpretq_u16_u32(vorrq_u32(ab, vshlq_n_u32(vmlsq_n_u32(fours, ab, 100u), 16)));
36397|       |    const uint16x8_t tens = vshrq_n_u16(vmulq_n_u16(ab_cd, 103u), 10);
36398|       |    const uint8x16_t bytes = vreinterpretq_u8_u16(vorrq_u16(tens, vshlq_n_u16(vmlsq_n_u16(ab_cd, tens, 10u), 8)));
36399|       |    // the last digit that is not 0 (sig is not 0): a nibble per byte
36400|       |    const std::uint64_t nonzero = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(vtstq_u8(bytes, bytes)), 4)), 0);
36401|       |    const int digits = ((63 - count_leading_zeros(nonzero)) / 4) + (sixteen ? 1 : 0); // without trailing zeros
36402|       |    const uint8x16_t chars = vaddq_u8(bytes, vdupq_n_u8('0'));
36403|       |    // the 16 characters from the first digit
36404|       |    const uint8x16_t s = sixteen ? chars : vextq_u8(chars, vdupq_n_u8(static_cast<std::uint8_t>('0' + last)), 1);
36405|       |    const char s16 = static_cast<char>(sixteen ? '0' + last : '0'); // the 17th
36406|       |    const auto store_16 = [&s](char* p) noexcept
36407|       |    {
36408|       |        vst1q_u8(reinterpret_cast<std::uint8_t*>(p), s); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
36409|       |    };
36410|       |    const auto first_digit = static_cast<char>(vgetq_lane_u8(s, 0));
36411|       |#else
36412|       |    const std::uint64_t hi = eight_digit_bytes(upper);
36413|       |    const std::uint64_t lo = eight_digit_bytes(sig - (upper * 100000000u));
36414|       |    // trailing zero digits: zero bytes (sig is not 0)
36415|       |    const int zeros = lo != 0 ? count_trailing_zeros(lo) / 8 : 8 + (count_trailing_zeros(hi) / 8);
36416|       |    const int digits = 15 - zeros + (sixteen ? 1 : 0); // without trailing zeros
36417|       |    // the 16 characters from the first digit
36418|       |    const std::uint64_t s_hi = (sixteen ? hi : (hi << 8u) | (lo >> 56u)) + 0x3030303030303030u;
36419|       |    const std::uint64_t s_lo = (sixteen ? lo : (lo << 8u) | static_cast<std::uint64_t>(last)) + 0x3030303030303030u;
36420|       |    const char s16 = static_cast<char>(sixteen ? '0' + last : '0'); // the 17th
36421|       |    const auto store_16 = [s_hi, s_lo](char* p) noexcept
36422|       |    {
36423|       |        store_msb_first(p, s_hi);
36424|       |        store_msb_first(p + 8, s_lo);
36425|       |    };
36426|       |    const auto first_digit = static_cast<char>(s_hi >> 56u);
36427|       |#endif
36428|   246k|    const int len = d.has_digit ? 16 + (sixteen ? 1 : 0) : digits; // significant digits
  ------------------
  |  Branch (36428:21): [True: 85.8k, False: 160k]
  |  Branch (36428:41): [True: 34.3k, False: 51.5k]
  ------------------
36429|   246k|    const int n = 16 + (sixteen ? 1 : 0) + d.exponent;           // digits before the point
  ------------------
  |  Branch (36429:25): [True: 163k, False: 83.3k]
  ------------------
36430|       |
36431|   246k|    if (JSON_HEDLEY_LIKELY(n >= 1 && n <= 15))
  ------------------
  |  | 1696|   340k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 78.8k, False: 167k]
  |  |  |  Branch (1696:94): [True: 93.8k, False: 152k]
  |  |  |  Branch (1696:94): [True: 78.8k, False: 15.0k]
  |  |  ------------------
  ------------------
36432|  78.8k|    {
36433|       |        // "dig.its" and "digits[000].0": the digits after the point move by
36434|       |        // one byte ('0's follow the digits)
36435|  78.8k|#if JSON_DTOA_SSE2
36436|       |        // NOLINTBEGIN(portability-simd-intrinsics)
36437|       |        // (in the register: reading the digits back from memory right after
36438|       |        // storing them waits until the stores are done)
36439|  78.8k|        const __m128i at = _mm_set1_epi8(static_cast<char>(n));
36440|  78.8k|        const __m128i index = _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
36441|  78.8k|        const __m128i before = _mm_cmpgt_epi8(at, index);
36442|  78.8k|        const __m128i after = _mm_cmpgt_epi8(index, at);
36443|  78.8k|        const __m128i text = _mm_or_si128(_mm_or_si128(_mm_and_si128(s, before), _mm_and_si128(_mm_slli_si128(s, 1), after)),
36444|  78.8k|                                          _mm_andnot_si128(_mm_or_si128(before, after), _mm_set1_epi8('.')));
36445|  78.8k|        std::memcpy(first, &text, 16);
36446|  78.8k|        first[16] = static_cast<char>(_mm_extract_epi16(s, 7) >> 8);
36447|  78.8k|        first[17] = s16;
36448|       |        // NOLINTEND(portability-simd-intrinsics)
36449|       |#elif JSON_DTOA_NEON
36450|       |        const uint8x16_t index = vcombine_u8(vcreate_u8(0x0706050403020100u), vcreate_u8(0x0F0E0D0C0B0A0908u));
36451|       |        const uint8x16_t at = vdupq_n_u8(static_cast<std::uint8_t>(n));
36452|       |        const uint8x16_t after_point = vbslq_u8(vcgtq_u8(index, at), vextq_u8(vdupq_n_u8(0), s, 15), vdupq_n_u8('.'));
36453|       |        vst1q_u8(reinterpret_cast<std::uint8_t*>(first), vbslq_u8(vcltq_u8(index, at), s, after_point)); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
36454|       |        first[16] = static_cast<char>(vgetq_lane_u8(s, 15));
36455|       |        first[17] = s16;
36456|       |#else
36457|       |        store_16(first);
36458|       |        first[16] = s16;
36459|       |        std::uint64_t after_point[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
36460|       |        std::memcpy(after_point, first + n, 16);
36461|       |        std::memcpy(first + n + 1, after_point, 16);
36462|       |        first[n] = '.';
36463|       |#endif
36464|  78.8k|        return first + (n >= len ? n + 2 : len + 1);
  ------------------
  |  Branch (36464:25): [True: 34.1k, False: 44.7k]
  ------------------
36465|  78.8k|    }
36466|   167k|    if (n <= 0 && n > -4)
  ------------------
  |  Branch (36466:9): [True: 152k, False: 15.0k]
  |  Branch (36466:19): [True: 60.4k, False: 92.1k]
  ------------------
36467|  60.4k|    {
36468|       |        // "0.[000]digits"
36469|  60.4k|        std::memset(first, '0', 8);
36470|  60.4k|        first[1] = '.';
36471|  60.4k|        store_16(first + 2 - n);
36472|  60.4k|        first[18 - n] = s16;
36473|  60.4k|        return first + 2 - n + len;
36474|  60.4k|    }
36475|       |    // d.igitse+XX, with at least two exponent digits (as append_exponent())
36476|   107k|    store_16(first + 1);
36477|   107k|    first[17] = s16;
36478|   107k|    first[0] = first_digit;
36479|   107k|    first[1] = '.';
36480|   107k|    char* const end = first + (len == 1 ? 1 : len + 1);
  ------------------
  |  Branch (36480:32): [True: 962, False: 106k]
  ------------------
36481|   107k|    const int e = n - 1;
36482|   107k|    const auto ea = e < 0 ? 0u - static_cast<unsigned>(e) : static_cast<unsigned>(e); // (unsigned: no signed overflow to assume)
  ------------------
  |  Branch (36482:21): [True: 92.1k, False: 15.0k]
  ------------------
36483|   107k|    const bool three = ea >= 100;
36484|   107k|    end[0] = 'e';
36485|   107k|    end[1] = e < 0 ? '-' : '+';
  ------------------
  |  Branch (36485:14): [True: 92.1k, False: 15.0k]
  ------------------
36486|   107k|    end[2] = static_cast<char>('0' + (three ? ea / 100 : (ea / 10) % 10));
  ------------------
  |  Branch (36486:39): [True: 5.65k, False: 101k]
  ------------------
36487|   107k|    end[3] = static_cast<char>('0' + (three ? (ea / 10) % 10 : ea % 10));
  ------------------
  |  Branch (36487:39): [True: 5.65k, False: 101k]
  ------------------
36488|   107k|    end[4] = static_cast<char>('0' + (ea % 10));
36489|   107k|    return end + (three ? 5 : 4);
  ------------------
  |  Branch (36489:19): [True: 5.65k, False: 101k]
  ------------------
36490|   167k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl13write_decimalEPcmi:
36265|  2.67k|{
36266|  2.67k|    JSON_ASSERT(digits != 0 && digits < 100000000000000000u);
  ------------------
  |  | 2643|  2.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (36266:5): [True: 2.67k, False: 0]
  |  Branch (36266:5): [True: 2.67k, False: 0]
  |  Branch (36266:5): [True: 2.67k, False: 0]
  ------------------
36267|  2.67k|    const std::uint64_t upper = digits / 100000000u;
36268|  2.67k|    const std::uint64_t b0 = upper / 100000000u; // (one digit: it is its own byte)
36269|  2.67k|    const std::uint64_t b1 = eight_digit_bytes(upper % 100000000u);
36270|  2.67k|    const std::uint64_t b2 = eight_digit_bytes(digits % 100000000u);
36271|       |    // leading and trailing zero digits: zero bytes, counted without division
36272|  2.67k|    int leading = 16;
36273|  2.67k|    int zeros = 16;
36274|  2.67k|    if (b0 != 0)
  ------------------
  |  Branch (36274:9): [True: 0, False: 2.67k]
  ------------------
36275|      0|    {
36276|      0|        leading = count_leading_zeros(b0) / 8;
36277|      0|    }
36278|  2.67k|    else if (b1 != 0)
  ------------------
  |  Branch (36278:14): [True: 2.04k, False: 631]
  ------------------
36279|  2.04k|    {
36280|  2.04k|        leading = 8 + (count_leading_zeros(b1) / 8);
36281|  2.04k|    }
36282|    631|    else
36283|    631|    {
36284|    631|        leading += count_leading_zeros(b2) / 8;
36285|    631|    }
36286|  2.67k|    if (b2 != 0)
  ------------------
  |  Branch (36286:9): [True: 2.13k, False: 546]
  ------------------
36287|  2.13k|    {
36288|  2.13k|        zeros = count_trailing_zeros(b2) / 8;
36289|  2.13k|    }
36290|    546|    else if (b1 != 0)
  ------------------
  |  Branch (36290:14): [True: 546, False: 0]
  ------------------
36291|    546|    {
36292|    546|        zeros = 8 + (count_trailing_zeros(b1) / 8);
36293|    546|    }
36294|       |    // (else: 16, b0 is the one digit that is not 0)
36295|       |    // the digits as text at text + leading, then '0's, so that fixed-size
36296|       |    // moves need not check how many digits there are
36297|  2.67k|    std::array<char, 64> text; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
36298|  2.67k|    store_msb_first(text.data(), b0 + 0x3030303030303030u);
36299|  2.67k|    store_msb_first(text.data() + 8, b1 + 0x3030303030303030u);
36300|  2.67k|    store_msb_first(text.data() + 16, b2 + 0x3030303030303030u);
36301|  2.67k|    std::memset(text.data() + 24, '0', 40);
36302|  2.67k|    const int k = 24 - leading - zeros; // significant digits
36303|  2.67k|    const int n = k + exp + zeros;      // position of the decimal point after the first digit
36304|  2.67k|    const char* const s0 = text.data() + leading;
36305|       |
36306|  2.67k|    if (-4 < n && n <= 15)
  ------------------
  |  Branch (36306:9): [True: 0, False: 2.67k]
  |  Branch (36306:19): [True: 0, False: 0]
  ------------------
36307|      0|    {
36308|       |        // "0.[000]digits" (n <= 0) is the digits after 1 - n leading '0's
36309|       |        // with the point after the first; "digits[000].0" (n >= k) and
36310|       |        // "dig.its" put the point after n characters
36311|      0|        const int pad = n <= 0 ? 1 - n : 0;
  ------------------
  |  Branch (36311:25): [True: 0, False: 0]
  ------------------
36312|      0|        const char* const s = s0 - pad;
36313|      0|        const int len = k + pad;
36314|      0|        const int point = n + pad;
36315|      0|        std::memcpy(first, s, 16);
36316|      0|        std::memcpy(first + point + 1, s + point, 24);
36317|      0|        first[point] = '.';
36318|      0|        return first + (point >= len ? point + 2 : len + 1);
  ------------------
  |  Branch (36318:25): [True: 0, False: 0]
  ------------------
36319|      0|    }
36320|       |
36321|       |    // d.igitse+XX, with at least two exponent digits (as append_exponent())
36322|  2.67k|    std::memcpy(first, s0, 16);
36323|  2.67k|    std::memcpy(first + 2, s0 + 1, 16);
36324|  2.67k|    first[1] = '.';
36325|  2.67k|    char* const end = first + (k == 1 ? 1 : k + 1);
  ------------------
  |  Branch (36325:32): [True: 726, False: 1.95k]
  ------------------
36326|  2.67k|    const int e = n - 1;
36327|  2.67k|    const auto ea = e < 0 ? 0u - static_cast<unsigned>(e) : static_cast<unsigned>(e); // (unsigned: no signed overflow to assume)
  ------------------
  |  Branch (36327:21): [True: 2.67k, False: 0]
  ------------------
36328|  2.67k|    const bool three = ea >= 100;
36329|  2.67k|    end[0] = 'e';
36330|  2.67k|    end[1] = e < 0 ? '-' : '+';
  ------------------
  |  Branch (36330:14): [True: 2.67k, False: 0]
  ------------------
36331|  2.67k|    end[2] = static_cast<char>('0' + (three ? ea / 100 : (ea / 10) % 10));
  ------------------
  |  Branch (36331:39): [True: 2.67k, False: 0]
  ------------------
36332|  2.67k|    end[3] = static_cast<char>('0' + (three ? (ea / 10) % 10 : ea % 10));
  ------------------
  |  Branch (36332:39): [True: 2.67k, False: 0]
  ------------------
36333|  2.67k|    end[4] = static_cast<char>('0' + (ea % 10));
36334|  2.67k|    return end + (three ? 5 : 4);
  ------------------
  |  Branch (36334:19): [True: 2.67k, False: 0]
  ------------------
36335|  2.67k|}
_ZZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_shortestEPcNS1_4zmij16shortest_decimalEENKUlS3_E_clES3_:
36384|   167k|    {
36385|   167k|        std::memcpy(p, &s, 16);
36386|   167k|    };
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE5flushEv:
38224|  86.5k|    {
38225|  86.5k|        o->write_characters(write_buffer.data(), write_buffer_pos);
38226|  86.5k|        write_buffer_pos = 0;
38227|  86.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail35binary_writer_default_error_handlerEv:
 6168|  42.1k|{
 6169|       |#if JSON_STRICT_BINARY_UTF8
 6170|       |    return error_handler_t::strict;
 6171|       |#else
 6172|  42.1k|    return error_handler_t::keep;
 6173|  42.1k|#endif
 6174|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvED2Ev:
42005|  3.26M|    {
42006|  3.26M|        assert_invariant(false);
42007|  3.26M|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16assert_invariantEb:
40333|  9.21M|    {
40334|  9.21M|        JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr);
  ------------------
  |  | 2643|  9.21M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40334:9): [True: 8.76M, False: 449k]
  |  Branch (40334:9): [True: 449k, False: 0]
  |  Branch (40334:9): [True: 9.21M, False: 0]
  ------------------
40335|  9.21M|        JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr);
  ------------------
  |  | 2643|  9.21M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40335:9): [True: 7.92M, False: 1.29M]
  |  Branch (40335:9): [True: 1.29M, False: 0]
  |  Branch (40335:9): [True: 9.21M, False: 0]
  ------------------
40336|  9.21M|        JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr);
  ------------------
  |  | 2643|  9.21M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40336:9): [True: 8.42M, False: 786k]
  |  Branch (40336:9): [True: 786k, False: 0]
  |  Branch (40336:9): [True: 9.21M, False: 0]
  ------------------
40337|  9.21M|        JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr);
  ------------------
  |  | 2643|  9.21M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40337:9): [True: 9.12M, False: 94.3k]
  |  Branch (40337:9): [True: 94.3k, False: 0]
  |  Branch (40337:9): [True: 9.21M, False: 0]
  ------------------
40338|       |
40339|       |#if JSON_DIAGNOSTICS
40340|       |        JSON_TRY
40341|       |        {
40342|       |            JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j)
40343|       |            {
40344|       |                return j.m_parent == this;
40345|       |            }));
40346|       |        }
40347|       |        JSON_CATCH(...) {} // LCOV_EXCL_LINE
40348|       |#endif
40349|  9.21M|        static_cast<void>(check_parents);
40350|  9.21M|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dataD2Ev:
45585|  3.41M|        {
45586|  3.41M|            m_value.destroy(m_type);
45587|  3.41M|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value7destroyENS0_6detail7value_tE:
40277|  4.59M|        {
40278|  4.59M|            if (JSON_HEDLEY_UNLIKELY(detail::owns_memory(t)))
  ------------------
  |  | 1697|  4.59M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 288k, False: 4.31M]
  |  |  ------------------
  ------------------
40279|   288k|            {
40280|   288k|                destroy_owned(t);
40281|   288k|            }
40282|  4.59M|        }
_ZN8nlohmann16json_abi_v3_12_06detail11owns_memoryENS1_7value_tE:
 3441|  4.59M|{
 3442|  4.59M|    switch (t)
 3443|  4.59M|    {
 3444|  24.5k|        case value_t::object:
  ------------------
  |  Branch (3444:9): [True: 24.5k, False: 4.57M]
  ------------------
 3445|  94.3k|        case value_t::array:
  ------------------
  |  Branch (3445:9): [True: 69.8k, False: 4.52M]
  ------------------
 3446|   270k|        case value_t::string:
  ------------------
  |  Branch (3446:9): [True: 176k, False: 4.42M]
  ------------------
 3447|   288k|        case value_t::binary:
  ------------------
  |  Branch (3447:9): [True: 17.4k, False: 4.58M]
  ------------------
 3448|   288k|            return true;
 3449|       |
 3450|  3.31M|        case value_t::null:
  ------------------
  |  Branch (3450:9): [True: 3.31M, False: 1.28M]
  ------------------
 3451|  3.46M|        case value_t::boolean:
  ------------------
  |  Branch (3451:9): [True: 158k, False: 4.44M]
  ------------------
 3452|  3.67M|        case value_t::number_integer:
  ------------------
  |  Branch (3452:9): [True: 203k, False: 4.39M]
  ------------------
 3453|  3.94M|        case value_t::number_unsigned:
  ------------------
  |  Branch (3453:9): [True: 271k, False: 4.32M]
  ------------------
 3454|  4.30M|        case value_t::number_float:
  ------------------
  |  Branch (3454:9): [True: 359k, False: 4.24M]
  ------------------
 3455|  4.31M|        case value_t::discarded:
  ------------------
  |  Branch (3455:9): [True: 7.45k, False: 4.59M]
  ------------------
 3456|  4.31M|        default:
  ------------------
  |  Branch (3456:9): [True: 0, False: 4.59M]
  ------------------
 3457|  4.31M|            return false;
 3458|  4.59M|    }
 3459|  4.59M|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value13destroy_ownedENS0_6detail7value_tE:
40285|   288k|        {
40286|   288k|            switch (t)
40287|   288k|            {
40288|   176k|                case value_t::string:
  ------------------
  |  Branch (40288:17): [True: 176k, False: 111k]
  ------------------
40289|   176k|                    destroy_pointer(string);
40290|   176k|                    break;
40291|       |
40292|  17.4k|                case value_t::binary:
  ------------------
  |  Branch (40292:17): [True: 17.4k, False: 270k]
  ------------------
40293|  17.4k|                    destroy_pointer(binary);
40294|  17.4k|                    break;
40295|       |
40296|  24.5k|                case value_t::object:
  ------------------
  |  Branch (40296:17): [True: 24.5k, False: 263k]
  ------------------
40297|  94.3k|                case value_t::array:
  ------------------
  |  Branch (40297:17): [True: 69.8k, False: 218k]
  ------------------
40298|  94.3k|                    destroy_container(t);
40299|  94.3k|                    break;
40300|       |
40301|      0|                case value_t::null: // LCOV_EXCL_LINE
  ------------------
  |  Branch (40301:17): [True: 0, False: 288k]
  ------------------
40302|      0|                case value_t::boolean:
  ------------------
  |  Branch (40302:17): [True: 0, False: 288k]
  ------------------
40303|      0|                case value_t::number_integer:
  ------------------
  |  Branch (40303:17): [True: 0, False: 288k]
  ------------------
40304|      0|                case value_t::number_unsigned:
  ------------------
  |  Branch (40304:17): [True: 0, False: 288k]
  ------------------
40305|      0|                case value_t::number_float:
  ------------------
  |  Branch (40305:17): [True: 0, False: 288k]
  ------------------
40306|      0|                case value_t::discarded:
  ------------------
  |  Branch (40306:17): [True: 0, False: 288k]
  ------------------
40307|      0|                default:
  ------------------
  |  Branch (40307:17): [True: 0, False: 288k]
  ------------------
40308|      0|                    break; // LCOV_EXCL_LINE
40309|   288k|            }
40310|   288k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value15destroy_pointerISA_EEvRPT_:
40117|   176k|        {
40118|   176k|            if (ptr == nullptr)
  ------------------
  |  Branch (40118:17): [True: 0, False: 176k]
  ------------------
40119|      0|            {
40120|       |                // not initialized (e.g., due to exception in the ctor)
40121|      0|                return;
40122|      0|            }
40123|   176k|            AllocatorType<T> alloc;
40124|   176k|            std::allocator_traits<decltype(alloc)>::destroy(alloc, ptr);
40125|   176k|            std::allocator_traits<decltype(alloc)>::deallocate(alloc, ptr, 1);
40126|   176k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value15destroy_pointerINS0_27byte_container_with_subtypeISD_EEEEvRPT_:
40117|  17.4k|        {
40118|  17.4k|            if (ptr == nullptr)
  ------------------
  |  Branch (40118:17): [True: 0, False: 17.4k]
  ------------------
40119|      0|            {
40120|       |                // not initialized (e.g., due to exception in the ctor)
40121|      0|                return;
40122|      0|            }
40123|  17.4k|            AllocatorType<T> alloc;
40124|  17.4k|            std::allocator_traits<decltype(alloc)>::destroy(alloc, ptr);
40125|  17.4k|            std::allocator_traits<decltype(alloc)>::deallocate(alloc, ptr, 1);
40126|  17.4k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value17destroy_containerENS0_6detail7value_tE:
40130|  94.3k|        {
40131|  94.3k|            if (
40132|  94.3k|                (t == value_t::object && object == nullptr) ||
  ------------------
  |  Branch (40132:18): [True: 24.5k, False: 69.8k]
  |  Branch (40132:42): [True: 0, False: 24.5k]
  ------------------
40133|  94.3k|                (t == value_t::array && array == nullptr)
  ------------------
  |  Branch (40133:18): [True: 69.8k, False: 24.5k]
  |  Branch (40133:41): [True: 0, False: 69.8k]
  ------------------
40134|  94.3k|            )
40135|      0|            {
40136|       |                // not initialized (e.g., due to exception in the ctor)
40137|      0|                return;
40138|      0|            }
40139|       |
40140|       |            // This json_value is not itself a basic_json, so the top-level
40141|       |            // container is first moved into a local stand-in ("cur"); a
40142|       |            // default-constructed data has a null pointer in its m_value
40143|       |            // (see data::m_value's initializer), so swapping it with *this
40144|       |            // leaves this union's own pointer null, and it is never looked
40145|       |            // at or freed a second time. The stand-ins are data, not
40146|       |            // basic_json, so that destroying a value never constructs a
40147|       |            // CustomBaseClass, whose constructor may allocate (#5995).
40148|  94.3k|            data cur;
40149|  94.3k|            cur.m_type = t;
40150|  94.3k|            std::swap(cur.m_value, *this);
40151|       |
40152|  94.3k|            destroy_bounded(cur, 0);
40153|  94.3k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dataC2Ev:
45578|  1.84M|        data() noexcept = default;
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value15destroy_boundedERNSE_4dataEm:
40160|   889k|        {
40161|   889k|            if (JSON_HEDLEY_UNLIKELY(depth >= detail::recursion_depth_limit()))
  ------------------
  |  | 1697|   889k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 11.4k, False: 878k]
  |  |  ------------------
  ------------------
40162|  11.4k|            {
40163|  11.4k|                destroy_walk(v);
40164|  11.4k|                return;
40165|  11.4k|            }
40166|       |
40167|   878k|            if (v.m_type == value_t::array)
  ------------------
  |  Branch (40167:17): [True: 722k, False: 155k]
  ------------------
40168|   722k|            {
40169|   722k|                for (auto& child : *v.m_value.array)
  ------------------
  |  Branch (40169:34): [True: 1.76M, False: 722k]
  ------------------
40170|  1.76M|                {
40171|  1.76M|                    if (child.m_data.m_type == value_t::array || child.m_data.m_type == value_t::object)
  ------------------
  |  Branch (40171:25): [True: 559k, False: 1.20M]
  |  Branch (40171:66): [True: 127k, False: 1.07M]
  ------------------
40172|   686k|                    {
40173|   686k|                        destroy_bounded(child.m_data, depth + 1);
40174|   686k|                    }
40175|  1.76M|                }
40176|   722k|            }
40177|   155k|            else
40178|   155k|            {
40179|   155k|                for (auto& child : *v.m_value.object)
  ------------------
  |  Branch (40179:34): [True: 252k, False: 155k]
  ------------------
40180|   252k|                {
40181|   252k|                    if (child.second.m_data.m_type == value_t::array || child.second.m_data.m_type == value_t::object)
  ------------------
  |  Branch (40181:25): [True: 97.4k, False: 155k]
  |  Branch (40181:73): [True: 11.6k, False: 143k]
  ------------------
40182|   109k|                    {
40183|   109k|                        destroy_bounded(child.second.m_data, depth + 1);
40184|   109k|                    }
40185|   252k|                }
40186|   155k|            }
40187|       |
40188|       |            // only leaves and already destroyed (null) children remain
40189|   878k|            free_container(v);
40190|   878k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value12destroy_walkERNSE_4dataE:
40214|  11.4k|        {
40215|  11.4k|            data cur;
40216|  11.4k|            take(cur, top);
40217|       |
40218|  11.4k|            data prev; // value_t::null: no parent
40219|       |
40220|       |            // true right after cur was entered: its children have not been
40221|       |            // looked at yet. If none of them has children of its own, cur is
40222|       |            // freed in one go instead of child by child; this is tried once
40223|       |            // per container, so the walk stays linear.
40224|  11.4k|            bool fresh = true;
40225|       |
40226|  48.1k|            while (true)
  ------------------
  |  Branch (40226:20): [True: 48.1k, Folded]
  ------------------
40227|  48.1k|            {
40228|  48.1k|                const bool fresh_now = fresh;
40229|  48.1k|                fresh = false;
40230|  48.1k|                if (has_no_children(cur) || (fresh_now && all_children_leaves(cur)))
  ------------------
  |  Branch (40230:21): [True: 15.2k, False: 32.9k]
  |  Branch (40230:46): [True: 20.3k, False: 12.6k]
  |  Branch (40230:59): [True: 9.86k, False: 10.4k]
  ------------------
40231|  25.1k|                {
40232|  25.1k|                    if (prev.m_type == value_t::null)
  ------------------
  |  Branch (40232:25): [True: 11.4k, False: 13.6k]
  ------------------
40233|  11.4k|                    {
40234|  11.4k|                        free_container(cur);
40235|  11.4k|                        return; // back at the top with nothing left to do
40236|  11.4k|                    }
40237|       |
40238|       |                    // ascend: detach the grandparent link from prev's
40239|       |                    // walk_child() slot, drop that (now null) slot, free cur
40240|       |                    // (it is empty), then move up one level
40241|  13.6k|                    data gp;
40242|  13.6k|                    take(gp, walk_child(prev));
40243|  13.6k|                    pop_walk_child(prev);
40244|       |
40245|  13.6k|                    free_container(cur);
40246|       |
40247|  13.6k|                    take(cur, prev);
40248|  13.6k|                    take(prev, gp);
40249|  13.6k|                    continue;
40250|  25.1k|                }
40251|       |
40252|  23.0k|                data& cur_child_ref = walk_child(cur);
40253|       |
40254|  23.0k|                if (has_no_children(cur_child_ref))
  ------------------
  |  Branch (40254:21): [True: 9.38k, False: 13.6k]
  ------------------
40255|  9.38k|                {
40256|       |                    // scalar, or already-empty array/object
40257|  9.38k|                    pop_walk_child(cur);
40258|  9.38k|                    continue;
40259|  9.38k|                }
40260|       |
40261|       |                // descend into the non-empty child, reversing the
40262|       |                // link: its slot takes over prev, and the child becomes
40263|       |                // the new cur
40264|  13.6k|                data tmp;
40265|  13.6k|                take(tmp, cur_child_ref);
40266|  13.6k|                take(cur_child_ref, prev);
40267|  13.6k|                take(prev, cur);
40268|  13.6k|                take(cur, tmp);
40269|  13.6k|                fresh = true;
40270|  13.6k|            }
40271|  11.4k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value4takeERNSE_4dataESH_:
39993|   107k|        {
39994|   107k|            dst.m_type = src.m_type;
39995|   107k|            dst.m_value = src.m_value;
39996|   107k|            src.m_type = value_t::null;
39997|   107k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value15has_no_childrenERKNSE_4dataE:
40001|  3.05M|        {
40002|  3.05M|            if (v.m_type == value_t::array)
  ------------------
  |  Branch (40002:17): [True: 785k, False: 2.26M]
  ------------------
40003|   785k|            {
40004|   785k|                return v.m_value.array->empty();
40005|   785k|            }
40006|  2.26M|            if (v.m_type == value_t::object)
  ------------------
  |  Branch (40006:17): [True: 196k, False: 2.06M]
  ------------------
40007|   196k|            {
40008|   196k|                return v.m_value.object->empty();
40009|   196k|            }
40010|  2.06M|            return true;
40011|  2.26M|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value19all_children_leavesERKNSE_4dataE:
40018|   816k|        {
40019|       |            // array_t only needs forward iterators (see custom_array_type)
40020|   816k|            if (v.m_type == value_t::array)
  ------------------
  |  Branch (40020:17): [True: 689k, False: 126k]
  ------------------
40021|   689k|            {
40022|   689k|                const auto& a = *v.m_value.array;
40023|   689k|                return std::all_of(a.begin(), a.end(), [](const basic_json & el)
40024|   689k|                {
40025|   689k|                    return has_no_children(el.m_data);
40026|   689k|                });
40027|   689k|            }
40028|   126k|            const auto& o = *v.m_value.object;
40029|   126k|            return std::all_of(o.begin(), o.end(), [](const typename object_t::value_type & el)
40030|   126k|            {
40031|   126k|                return has_no_children(el.second.m_data);
40032|   126k|            });
40033|   816k|        }
_ZZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value19all_children_leavesERKNSE_4dataEENKUlRKSE_E_clESK_:
40024|  1.80M|                {
40025|  1.80M|                    return has_no_children(el.m_data);
40026|  1.80M|                });
_ZZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value19all_children_leavesERKNSE_4dataEENKUlRKNS2_4pairIKSA_SE_EEE_clESN_:
40030|   272k|            {
40031|   272k|                return has_no_children(el.second.m_data);
40032|   272k|            });
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value10walk_childERNSE_4dataE:
40064|  36.7k|        {
40065|  36.7k|            if (v.m_type == value_t::array)
  ------------------
  |  Branch (40065:17): [True: 21.8k, False: 14.9k]
  ------------------
40066|  21.8k|            {
40067|  21.8k|                return v.m_value.array->back().m_data;
40068|  21.8k|            }
40069|  14.9k|            JSON_ASSERT(v.m_type == value_t::object);
  ------------------
  |  | 2643|  14.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40069:13): [True: 14.9k, False: 0]
  ------------------
40070|  14.9k|            return walk_child_it(*v.m_value.object)->second.m_data;
40071|  14.9k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value13walk_child_itINS3_ISA_SE_NS2_4lessISA_EENS8_INS2_4pairIKSA_SE_EEEEEEEENT_8iteratorERSO_:
40056|  26.0k|        {
40057|  26.0k|            JSON_ASSERT(!o.empty());
  ------------------
  |  | 2643|  26.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40057:13): [True: 26.0k, False: 0]
  ------------------
40058|  26.0k|            return walk_child_it(o, typename std::iterator_traits<typename ObjectType_::iterator>::iterator_category());
40059|  26.0k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value13walk_child_itINS3_ISA_SE_NS2_4lessISA_EENS8_INS2_4pairIKSA_SE_EEEEEEEENT_8iteratorERSO_NS2_26bidirectional_iterator_tagE:
40044|  26.0k|        {
40045|  26.0k|            return std::prev(o.end());
40046|  26.0k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value14pop_walk_childERNSE_4dataE:
40078|  23.0k|        {
40079|  23.0k|            if (v.m_type == value_t::array)
  ------------------
  |  Branch (40079:17): [True: 11.9k, False: 11.1k]
  ------------------
40080|  11.9k|            {
40081|  11.9k|                v.m_value.array->pop_back();
40082|  11.9k|            }
40083|  11.1k|            else
40084|  11.1k|            {
40085|  11.1k|                JSON_ASSERT(v.m_type == value_t::object);
  ------------------
  |  | 2643|  11.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40085:17): [True: 11.1k, False: 0]
  ------------------
40086|  11.1k|                v.m_value.object->erase(walk_child_it(*v.m_value.object));
40087|  11.1k|            }
40088|  23.0k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value14free_containerERNSE_4dataE:
40096|   903k|        {
40097|   903k|            JSON_ASSERT(has_no_children(v) || all_children_leaves(v));
  ------------------
  |  | 2643|   903k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40097:13): [True: 107k, False: 796k]
  |  Branch (40097:13): [True: 796k, False: 0]
  |  Branch (40097:13): [True: 903k, False: 0]
  ------------------
40098|   903k|            if (v.m_type == value_t::array)
  ------------------
  |  Branch (40098:17): [True: 736k, False: 166k]
  ------------------
40099|   736k|            {
40100|   736k|                AllocatorType<array_t> alloc;
40101|   736k|                std::allocator_traits<decltype(alloc)>::destroy(alloc, v.m_value.array);
40102|   736k|                std::allocator_traits<decltype(alloc)>::deallocate(alloc, v.m_value.array, 1);
40103|   736k|            }
40104|   166k|            else
40105|   166k|            {
40106|   166k|                JSON_ASSERT(v.m_type == value_t::object);
  ------------------
  |  | 2643|   166k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (40106:17): [True: 166k, False: 0]
  ------------------
40107|   166k|                AllocatorType<object_t> alloc;
40108|   166k|                std::allocator_traits<decltype(alloc)>::destroy(alloc, v.m_value.object);
40109|   166k|                std::allocator_traits<decltype(alloc)>::deallocate(alloc, v.m_value.object, 1);
40110|   166k|            }
40111|   903k|            v.m_type = value_t::null; // avoid a double free if v is later destructed
40112|   903k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIRKSD_EESE_OT_bbNS0_6detail15error_handler_tE:
46010|  52.1k|    {
46011|  52.1k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
46012|  52.1k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail22iterator_input_adapterIPKhSJ_EEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
45629|  86.9k|    {
45630|  86.9k|        basic_json result;
45631|  86.9k|        detail::json_sax_dom_binary_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
45632|  86.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
45633|  86.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (45633:13): [True: 7.45k, False: 79.4k]
  ------------------
45634|  7.45k|        {
45635|  7.45k|            result = value_t::discarded;
45636|  7.45k|        }
45637|  86.9k|        return result;
45638|  86.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2EDn:
41578|   513k|    {
41579|   513k|        assert_invariant();
41580|   513k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEEC2ERSG_bPNS1_5lexerISG_SK_Lb0EEE:
17426|  86.9k|        : json_sax_dom_error_state(allow_exceptions_), root(r), m_lexer_ref(lexer_)
17427|  86.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail24json_sax_dom_error_stateC2Eb:
16324|   131k|        : allow_exceptions(allow_exceptions_)
16325|   131k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEEC2EOSK_NS1_14input_format_tENS1_15error_handler_tE:
18477|  86.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
18478|  86.9k|    {
18479|  86.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
18480|  86.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11char_traitsIhE3eofEv:
 4442|  1.24M|    {
 4443|  1.24M|        return static_cast<int_type>(std::char_traits<char>::eof());
 4444|  1.24M|    }
_ZN8nlohmann16json_abi_v3_12_06detail17little_endiannessEi:
18415|   173k|{
18416|   173k|    return *reinterpret_cast<char*>(&num) == 1;
18417|   173k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9sax_parseEPSM_bNS1_18cbor_tag_handler_tE:
18502|  86.9k|    {
18503|  86.9k|        sax = sax_;
18504|  86.9k|        container_stack.clear();
18505|  86.9k|        bon8_pushback_size = 0;
18506|  86.9k|        bool result = false;
18507|       |
18508|  86.9k|        switch (input_format)
18509|  86.9k|        {
18510|      0|            case input_format_t::bson:
  ------------------
  |  Branch (18510:13): [True: 0, False: 86.9k]
  ------------------
18511|      0|                result = parse_bson_internal();
18512|      0|                break;
18513|       |
18514|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (18514:13): [True: 0, False: 86.9k]
  ------------------
18515|      0|                result = parse_cbor_internal(tag_handler);
18516|      0|                break;
18517|       |
18518|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (18518:13): [True: 0, False: 86.9k]
  ------------------
18519|      0|                result = parse_msgpack_internal();
18520|      0|                break;
18521|       |
18522|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (18522:13): [True: 0, False: 86.9k]
  ------------------
18523|  86.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (18523:13): [True: 86.9k, False: 0]
  ------------------
18524|  86.9k|                result = parse_ubjson_internal();
18525|  86.9k|                break;
18526|       |
18527|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (18527:13): [True: 0, False: 86.9k]
  ------------------
18528|      0|                result = parse_bon8_internal();
18529|      0|                break;
18530|       |
18531|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (18531:13): [True: 0, False: 86.9k]
  ------------------
18532|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (18532:13): [True: 0, False: 86.9k]
  ------------------
18533|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18533:17): [Folded, False: 0]
  ------------------
18534|  86.9k|        }
18535|       |
18536|       |        // strict mode: next byte must be EOF
18537|  72.2k|        if (result && strict)
  ------------------
  |  Branch (18537:13): [True: 64.9k, False: 7.34k]
  |  Branch (18537:23): [True: 64.9k, False: 0]
  ------------------
18538|  64.9k|        {
18539|  64.9k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (18539:17): [True: 0, False: 64.9k]
  |  Branch (18539:59): [True: 64.9k, False: 0]
  ------------------
18540|  64.9k|            {
18541|  64.9k|                get_ignore_noop();
18542|  64.9k|            }
18543|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (18543:22): [True: 0, False: 0]
  ------------------
18544|      0|            {
18545|       |                // a string that ends a container hands back the byte after it
18546|      0|                get_bon8();
18547|      0|            }
18548|      0|            else
18549|      0|            {
18550|      0|                get();
18551|      0|            }
18552|       |
18553|  64.9k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1697|  64.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 333, False: 64.5k]
  |  |  ------------------
  ------------------
18554|    333|            {
18555|    333|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
18556|    333|            }
18557|  64.9k|        }
18558|       |
18559|  71.9k|        return result;
18560|  72.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIiEEbRT_PKc:
22855|  14.4k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  14.4k|        auto new_chars_read = ia.get_elements(&dest);
22859|  14.4k|        chars_read += new_chars_read;
22860|  14.4k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  14.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 399, False: 14.0k]
  |  |  ------------------
  ------------------
22861|    399|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    399|            ++chars_read;
22864|    399|            static_cast<void>(report_eof(context));
22865|    399|            return false;
22866|    399|        }
22867|  14.0k|        return true;
22868|  14.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIiEEmPT_m:
10174|  14.4k|    {
10175|  14.4k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  14.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIiEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  14.4k|    {
10233|  14.4k|        const std::size_t wanted = count * sizeof(T);
10234|  14.4k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  14.4k|        const std::size_t copied = (std::min)(wanted, available);
10236|  14.4k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  14.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 14.1k, False: 294]
  |  |  ------------------
  ------------------
10237|  14.1k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  14.1k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  14.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 14.1k, False: 0]
  ------------------
10242|  14.1k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  14.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 14.1k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  14.1k|            std::memcpy(dest, &*current, copied);
10246|  14.1k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  14.1k|        }
10248|  14.4k|        return copied;
10249|  14.4k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E15remaining_countEv:
10193|  1.03M|    {
10194|       |#if JSON_HAS_RANGES && defined(__cpp_lib_concepts) && defined(JSON_HAS_CPP_20)
10195|       |        // std::ranges::distance also supports sized sentinels of a different
10196|       |        // type (e.g. std::counted_iterator + std::default_sentinel_t)
10197|       |        return static_cast<std::size_t>(std::ranges::distance(current, end));
10198|       |#else
10199|  1.03M|        return static_cast<std::size_t>(std::distance(current, end));
10200|  1.03M|#endif
10201|  1.03M|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10report_eofEPKc:
23343|  12.2k|    {
23344|  12.2k|        return sax->parse_error(chars_read, "<end of file>",
23345|  12.2k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
23346|  12.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail24json_sax_dom_error_state11parse_errorINS1_11parse_errorEEEbmRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKT_:
16337|  42.1k|    {
16338|  42.1k|        errored = true;
16339|  42.1k|        static_cast<void>(ex);
16340|  42.1k|        if (allow_exceptions)
  ------------------
  |  Branch (16340:13): [True: 35.0k, False: 7.01k]
  ------------------
16341|  35.0k|        {
16342|  35.0k|            JSON_THROW(ex);
  ------------------
  |  | 2608|  35.0k|    #define JSON_THROW(exception) throw exception
  ------------------
16343|  35.0k|        }
16344|  7.01k|        return false;
16345|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11parse_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idEmRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5781|  42.1k|    {
 5782|  42.1k|        return create(static_cast<int>(id_), byte_, what_arg, context);
 5783|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11parse_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_imRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5766|  42.1k|    {
 5767|  42.1k|        const std::string w = concat(exception::name("parse_error", id_), "parse error",
 5768|  42.1k|                                     (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
  ------------------
  |  Branch (5768:39): [True: 42.1k, False: 0]
  ------------------
 5769|  42.1k|                                     ": ", exception::diagnostics(context), what_arg);
 5770|  42.1k|        return {id_, byte_, w.c_str()};
 5771|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_RA12_KcS9_RA3_SA_S9_RKS9_EEET_DpOT0_:
 5516|  42.1k|{
 5517|  42.1k|    OutStringType str;
 5518|  42.1k|    str.reserve(concat_length(args...));
 5519|  42.1k|    concat_into(str, std::forward<Args>(args)...);
 5520|  42.1k|    return str;
 5521|  42.1k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA12_cS9_A3_cS9_S9_EEEmRKT_DpRKT0_:
 5426|  42.1k|{
 5427|  42.1k|    return str.size() + concat_length(rest...);
 5428|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA3_cS9_S9_EEEmPKcDpRKT_:
 5420|  42.1k|{
 5421|  42.1k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA3_cS9_S9_EEEmRKT_DpRKT0_:
 5426|  42.1k|{
 5427|  42.1k|    return str.size() + concat_length(rest...);
 5428|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EEEmPKcDpRKT_:
 5420|  42.1k|{
 5421|  42.1k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA12_KcS9_RA3_SA_S9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|  42.1k|{
 5480|  42.1k|    out.append(std::forward<Arg>(arg));
 5481|  42.1k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA12_KcJS9_RA3_SA_S9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|  42.1k|{
 5480|  42.1k|    out.append(std::forward<Arg>(arg));
 5481|  42.1k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA3_KcS9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  42.1k|{
 5480|  42.1k|    out.append(std::forward<Arg>(arg));
 5481|  42.1k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA3_KcJS9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  42.1k|{
 5480|  42.1k|    out.append(std::forward<Arg>(arg));
 5481|  42.1k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA10_KcS9_EEET_DpOT0_:
 5516|  42.1k|{
 5517|  42.1k|    OutStringType str;
 5518|  42.1k|    str.reserve(concat_length(args...));
 5519|  42.1k|    concat_into(str, std::forward<Args>(args)...);
 5520|  42.1k|    return str;
 5521|  42.1k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA10_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  42.1k|{
 5480|  42.1k|    out.append(std::forward<Arg>(arg));
 5481|  42.1k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail11parse_errorC2EimPKc:
 5798|  42.1k|        : exception(id_, what_arg), byte(byte_) {}
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17exception_messageERKSC_SP_:
23454|  21.2k|    {
23455|  21.2k|        std::string error_msg = "syntax error while parsing ";
23456|  21.2k|        error_msg += input_format_name(input_format);
23457|       |
23458|  21.2k|        return concat(error_msg, ' ', context, ": ", detail);
23459|  21.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17input_format_nameENS1_14input_format_tE:
 9263|  42.4k|{
 9264|  42.4k|    switch (format)
 9265|  42.4k|    {
 9266|      0|        case input_format_t::cbor:
  ------------------
  |  Branch (9266:9): [True: 0, False: 42.4k]
  ------------------
 9267|      0|            return "CBOR";
 9268|      0|        case input_format_t::msgpack:
  ------------------
  |  Branch (9268:9): [True: 0, False: 42.4k]
  ------------------
 9269|      0|            return "MessagePack";
 9270|      0|        case input_format_t::ubjson:
  ------------------
  |  Branch (9270:9): [True: 0, False: 42.4k]
  ------------------
 9271|      0|            return "UBJSON";
 9272|      0|        case input_format_t::bson:
  ------------------
  |  Branch (9272:9): [True: 0, False: 42.4k]
  ------------------
 9273|      0|            return "BSON";
 9274|  42.4k|        case input_format_t::bjdata:
  ------------------
  |  Branch (9274:9): [True: 42.4k, False: 0]
  ------------------
 9275|  42.4k|            return "BJData";
 9276|      0|        case input_format_t::bon8:
  ------------------
  |  Branch (9276:9): [True: 0, False: 42.4k]
  ------------------
 9277|      0|            return "BON8";
 9278|      0|        case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (9278:9): [True: 0, False: 42.4k]
  ------------------
 9279|      0|        default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (9279:9): [True: 0, False: 42.4k]
  ------------------
 9280|      0|            JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (9280:13): [Folded, False: 0]
  ------------------
 9281|      0|            return ""; // LCOV_EXCL_LINE
 9282|  42.4k|    }
 9283|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRS9_cRKS9_RA3_KcSC_EEET_DpOT0_:
 5516|  42.4k|{
 5517|  42.4k|    OutStringType str;
 5518|  42.4k|    str.reserve(concat_length(args...));
 5519|  42.4k|    concat_into(str, std::forward<Args>(args)...);
 5520|  42.4k|    return str;
 5521|  42.4k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJcS9_A3_cS9_EEEmRKT_DpRKT0_:
 5426|  42.4k|{
 5427|  42.4k|    return str.size() + concat_length(rest...);
 5428|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA3_cS9_EEEmcDpRKT_:
 5414|  42.4k|{
 5415|  42.4k|    return 1 + concat_length(rest...);
 5416|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA3_cS9_EEEmRKT_DpRKT0_:
 5426|  42.4k|{
 5427|  42.4k|    return str.size() + concat_length(rest...);
 5428|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERS9_JcRKS9_RA3_KcSC_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSH_OSI_DpOT1_:
 5479|  42.4k|{
 5480|  42.4k|    out.append(std::forward<Arg>(arg));
 5481|  42.4k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcJRKS9_RA3_KcSB_ETnNS3_9enable_ifIXaantsr24detect_string_can_appendIT_T0_EE5valuesr27detect_string_can_append_opISG_SH_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5488|  42.4k|{
 5489|  42.4k|    out += std::forward<Arg>(arg);
 5490|  42.4k|    concat_into(out, std::forward<Args>(rest)...);
 5491|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JRA3_KcSB_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  42.4k|{
 5480|  42.4k|    out.append(std::forward<Arg>(arg));
 5481|  42.4k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA3_KcJRKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  42.4k|{
 5480|  42.4k|    out.append(std::forward<Arg>(arg));
 5481|  42.4k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  42.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE15enter_containerEbmm:
18618|   551k|    {
18619|   551k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1697|  1.10M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 267, False: 550k]
  |  |  |  Branch (1697:94): [True: 94.2k, False: 456k]
  |  |  ------------------
  ------------------
18620|    267|        {
18621|    267|            return false;
18622|    267|        }
18623|       |
18624|   550k|        container_stack.emplace_back(len, is_object, type_marker);
18625|   550k|        return true;
18626|   551k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12start_objectEm:
17483|   115k|    {
17484|   115k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
17485|       |
17486|       |#if JSON_DIAGNOSTIC_POSITIONS
17487|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17488|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17489|       |#endif
17490|       |
17491|   115k|        return check_container_size(*this, len, "object", ref_stack.back());
17492|   115k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueINS1_7value_tEEEPSG_OT_:
17566|   612k|    {
17567|   612k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 56.6k, False: 556k]
  ------------------
17568|  56.6k|        {
17569|  56.6k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  56.6k|            return &root;
17576|  56.6k|        }
17577|       |
17578|   556k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|   556k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 473k, False: 82.8k]
  |  Branch (17578:9): [True: 82.8k, False: 0]
  |  Branch (17578:9): [True: 556k, False: 0]
  ------------------
17579|       |
17580|   556k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 473k, False: 82.8k]
  ------------------
17581|   473k|        {
17582|   473k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|   473k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|   473k|        }
17590|       |
17591|  82.8k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  82.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 82.8k, False: 0]
  ------------------
17592|  82.8k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  82.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 82.8k, False: 0]
  ------------------
17593|  82.8k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  82.8k|        return object_element;
17600|  82.8k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8is_arrayEv:
42131|  5.40M|    {
42132|  5.40M|        return m_data.m_type == value_t::array;
42133|  5.40M|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9is_objectEv:
42123|  1.64M|    {
42124|  1.64M|        return m_data.m_type == value_t::object;
42125|  1.64M|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2EOSE_:
41950|   656k|        : json_base_class_t(std::move(static_cast<json_base_class_t&>(other))),
41951|   656k|          m_data(std::move(other.m_data))
41952|       |#if JSON_DIAGNOSTIC_POSITIONS
41953|       |        , start_position(other.start_position)
41954|       |        , end_position(other.end_position)
41955|       |#endif
41956|   656k|    {
41957|       |        // check that the passed value is valid
41958|   656k|        other.assert_invariant(false);
41959|       |
41960|       |        // invalidate payload
41961|   656k|        other.m_data.m_type = value_t::null;
41962|   656k|        other.m_data.m_value = {};
41963|       |
41964|       |#if JSON_DIAGNOSTIC_POSITIONS
41965|       |        other.start_position = std::string::npos;
41966|       |        other.end_position = std::string::npos;
41967|       |#endif
41968|       |
41969|   656k|        set_parents();
41970|   656k|        assert_invariant();
41971|   656k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11set_parentsEv:
40353|  4.16M|    {
40354|       |#if JSON_DIAGNOSTICS
40355|       |        if (m_data.m_type == value_t::array)
40356|       |        {
40357|       |            for (auto& element : *m_data.m_value.array)
40358|       |            {
40359|       |                element.m_parent = this;
40360|       |            }
40361|       |        }
40362|       |        else if (m_data.m_type == value_t::object)
40363|       |        {
40364|       |            for (auto& element : *m_data.m_value.object)
40365|       |            {
40366|       |                element.second.m_parent = this;
40367|       |            }
40368|       |        }
40369|       |#endif
40370|  4.16M|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterIPKhSK_EEEESH_EEbRT_mPKcPT0_:
16179|   612k|{
16180|   612k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1697|   873k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 804, False: 612k]
  |  |  |  Branch (1697:94): [True: 260k, False: 352k]
  |  |  |  Branch (1697:94): [True: 804, False: 259k]
  |  |  ------------------
  ------------------
16181|    804|    {
16182|    804|        return container_too_large_error(sax, len, kind, ref);
16183|    804|    }
16184|   612k|    return true;
16185|   612k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8max_sizeEv:
44002|   306k|    {
44003|   306k|        if (m_data.m_type == value_t::array)
  ------------------
  |  Branch (44003:13): [True: 241k, False: 64.8k]
  ------------------
44004|   241k|        {
44005|       |            // delegate call to array_t::max_size()
44006|   241k|            return m_data.m_value.array->max_size();
44007|   241k|        }
44008|       |
44009|  64.8k|        if (m_data.m_type == value_t::object)
  ------------------
  |  Branch (44009:13): [True: 64.8k, False: 0]
  ------------------
44010|  64.8k|        {
44011|       |            // delegate call to object_t::max_size()
44012|  64.8k|            return m_data.m_value.object->max_size();
44013|  64.8k|        }
44014|       |
44015|       |        // all other types have max_size() == size()
44016|      0|        return size();
44017|  64.8k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4sizeEv:
43962|  81.9k|    {
43963|  81.9k|        switch (m_data.m_type)
43964|  81.9k|        {
43965|      0|            case value_t::null:
  ------------------
  |  Branch (43965:13): [True: 0, False: 81.9k]
  ------------------
43966|      0|            {
43967|       |                // null values are empty
43968|      0|                return 0;
43969|      0|            }
43970|       |
43971|  76.1k|            case value_t::array:
  ------------------
  |  Branch (43971:13): [True: 76.1k, False: 5.78k]
  ------------------
43972|  76.1k|            {
43973|       |                // delegate call to array_t::size()
43974|  76.1k|                return m_data.m_value.array->size();
43975|      0|            }
43976|       |
43977|  5.78k|            case value_t::object:
  ------------------
  |  Branch (43977:13): [True: 5.78k, False: 76.1k]
  ------------------
43978|  5.78k|            {
43979|       |                // delegate call to object_t::size()
43980|  5.78k|                return m_data.m_value.object->size();
43981|      0|            }
43982|       |
43983|      0|            case value_t::string:
  ------------------
  |  Branch (43983:13): [True: 0, False: 81.9k]
  ------------------
43984|      0|            case value_t::boolean:
  ------------------
  |  Branch (43984:13): [True: 0, False: 81.9k]
  ------------------
43985|      0|            case value_t::number_integer:
  ------------------
  |  Branch (43985:13): [True: 0, False: 81.9k]
  ------------------
43986|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (43986:13): [True: 0, False: 81.9k]
  ------------------
43987|      0|            case value_t::number_float:
  ------------------
  |  Branch (43987:13): [True: 0, False: 81.9k]
  ------------------
43988|      0|            case value_t::binary:
  ------------------
  |  Branch (43988:13): [True: 0, False: 81.9k]
  ------------------
43989|      0|            case value_t::discarded:
  ------------------
  |  Branch (43989:13): [True: 0, False: 81.9k]
  ------------------
43990|      0|            default:
  ------------------
  |  Branch (43990:13): [True: 0, False: 81.9k]
  ------------------
43991|      0|            {
43992|       |                // all other types have size 1
43993|      0|                return 1;
43994|      0|            }
43995|  81.9k|        }
43996|  81.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterIPKhSK_EEEESH_EEbRT_mPKcPT0_:
16173|    804|{
16174|    804|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
16175|    804|}
_ZN8nlohmann16json_abi_v3_12_06detail24json_sax_dom_error_state11parse_errorINS1_12out_of_rangeEEEbmRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKT_:
16337|  2.60k|    {
16338|  2.60k|        errored = true;
16339|  2.60k|        static_cast<void>(ex);
16340|  2.60k|        if (allow_exceptions)
  ------------------
  |  Branch (16340:13): [True: 2.17k, False: 434]
  ------------------
16341|  2.17k|        {
16342|  2.17k|            JSON_THROW(ex);
  ------------------
  |  | 2608|  2.17k|    #define JSON_THROW(exception) throw exception
  ------------------
16343|  2.17k|        }
16344|    434|        return false;
16345|  2.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIPNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEETnNS5_9enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idERKSD_SK_:
 5868|  1.60k|    {
 5869|  1.60k|        return create(static_cast<int>(id_), what_arg, context);
 5870|  1.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIPNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEETnNS5_9enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_iRKSD_SK_:
 5861|  1.60k|    {
 5862|  1.60k|        const std::string w = exception::what_impl("out_of_range", id_, what_arg, context);
 5863|  1.60k|        return {id_, w.c_str()};
 5864|  1.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9exception9what_implIPNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEEEESD_RKSD_iSK_T_:
 5655|  1.60k|    {
 5656|  1.60k|        return concat(name(ename, id_), diagnostics(context), what_arg);
 5657|  1.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9exception11diagnosticsINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEEEESD_PKT_:
 5666|  1.60k|    {
 5667|       |#if JSON_DIAGNOSTICS
 5668|       |        std::vector<std::string> tokens;
 5669|       |        for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent)
 5670|       |        {
 5671|       |            const auto* parent = current->m_parent;
 5672|       |            if (parent->is_array())
 5673|       |            {
 5674|       |                for (std::size_t i = 0; i < parent->m_data.m_value.array->size(); ++i)
 5675|       |                {
 5676|       |                    if (&parent->m_data.m_value.array->operator[](i) == current)
 5677|       |                    {
 5678|       |                        tokens.emplace_back(std::to_string(i));
 5679|       |                        break;
 5680|       |                    }
 5681|       |                }
 5682|       |            }
 5683|       |            else if (parent->is_object())
 5684|       |            {
 5685|       |                for (const auto& element : *parent->m_data.m_value.object)
 5686|       |                {
 5687|       |                    if (&element.second == current)
 5688|       |                    {
 5689|       |                        // data() is null-terminated, so a key containing
 5690|       |                        // a null byte is cut short here rather than
 5691|       |                        // truncating the whole message at what()
 5692|       |                        tokens.emplace_back(element.first.data());
 5693|       |                        break;
 5694|       |                    }
 5695|       |                }
 5696|       |            }
 5697|       |            // all other parent types (primitives) contribute no token
 5698|       |        }
 5699|       |
 5700|       |        // the root value has no path, but still has a byte range
 5701|       |        std::string prefix;
 5702|       |        if (!tokens.empty())
 5703|       |        {
 5704|       |            const auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},
 5705|       |                                             [](const std::string & a, const std::string & b)
 5706|       |            {
 5707|       |                return concat(a, '/', detail::escape(b));
 5708|       |            });
 5709|       |            prefix = concat('(', str, ") ");
 5710|       |        }
 5711|       |
 5712|       |        return concat(prefix, get_byte_positions(leaf_element));
 5713|       |#else
 5714|  1.60k|        return get_byte_positions(leaf_element);
 5715|  1.60k|#endif
 5716|  1.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9exception18get_byte_positionsINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEEEESD_PKT_:
 5735|  1.60k|    {
 5736|  1.60k|        static_cast<void>(leaf_element);
 5737|  1.60k|        return "";
 5738|  1.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_rangeC2EiPKc:
 5874|  2.60k|    out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {}
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA11_KcRPSA_RA8_SA_S9_EEET_DpOT0_:
 5516|  1.60k|{
 5517|  1.60k|    OutStringType str;
 5518|  1.60k|    str.reserve(concat_length(args...));
 5519|  1.60k|    concat_into(str, std::forward<Args>(args)...);
 5520|  1.60k|    return str;
 5521|  1.60k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJPKcA8_cNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEmS4_DpRKT_:
 5420|  1.60k|{
 5421|  1.60k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  1.60k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA8_cNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEmPKcDpRKT_:
 5420|  1.60k|{
 5421|  1.60k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  1.60k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA11_KcJRPSA_RA8_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|  1.60k|{
 5480|  1.60k|    out.append(std::forward<Arg>(arg));
 5481|  1.60k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.60k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA8_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  1.60k|{
 5480|  1.60k|    out.append(std::forward<Arg>(arg));
 5481|  1.60k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.60k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA8_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  1.60k|{
 5480|  1.60k|    out.append(std::forward<Arg>(arg));
 5481|  1.60k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.60k|}
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE11start_arrayEm:
17520|   497k|    {
17521|   497k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
17522|       |
17523|       |#if JSON_DIAGNOSTIC_POSITIONS
17524|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17525|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17526|       |#endif
17527|       |
17528|   497k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1697|   497k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 128, False: 497k]
  |  |  ------------------
  ------------------
17529|    128|        {
17530|    128|            return false;
17531|    128|        }
17532|       |
17533|   497k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (17533:13): [True: 205k, False: 291k]
  ------------------
17534|   205k|        {
17535|   205k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
17536|   205k|        }
17537|       |
17538|   497k|        return true;
17539|   497k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13reserve_arrayINSt3__16vectorINS0_10basic_jsonINS3_3mapES4_NS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS4_IhNSA_IhEEEEvEENSA_ISG_EEEEEEDTcmcldtfp_7reservefp0_Ecvv_EERT_mNS1_12priority_tagILj1EEE:
16150|   240k|{
16151|   240k|    constexpr std::size_t reserve_cap = 16384;
16152|   240k|    arr.reserve((std::min)(len, reserve_cap));
16153|   240k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE15container_frameC2Embm:
18584|   550k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail12unknown_sizeEv:
16132|  2.23M|{
16133|  2.23M|    return (std::numeric_limits<std::size_t>::max)();
16134|  2.23M|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE15leave_containerEv:
18650|   457k|    {
18651|   457k|        const bool is_object = container_stack.back().is_object;
18652|   457k|        container_stack.pop_back();
18653|   457k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (18653:16): [True: 84.2k, False: 373k]
  ------------------
18654|   457k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE10end_objectEv:
17506|   103k|    {
17507|   103k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|   103k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17507:9): [True: 103k, False: 0]
  ------------------
17508|   103k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|   103k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17508:9): [True: 103k, False: 0]
  ------------------
17509|       |
17510|       |#if JSON_DIAGNOSTIC_POSITIONS
17511|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17512|       |#endif
17513|       |
17514|   103k|        ref_stack.back()->set_parents();
17515|   103k|        ref_stack.pop_back();
17516|   103k|        return true;
17517|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE9end_arrayEv:
17542|   413k|    {
17543|   413k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|   413k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17543:9): [True: 413k, False: 0]
  ------------------
17544|   413k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2643|   413k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17544:9): [True: 413k, False: 0]
  ------------------
17545|       |
17546|       |#if JSON_DIAGNOSTIC_POSITIONS
17547|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17548|       |#endif
17549|       |
17550|   413k|        ref_stack.back()->set_parents();
17551|   413k|        ref_stack.pop_back();
17552|   413k|        return true;
17553|   413k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE12unexpect_eofEPKc:
23326|   781k|    {
23327|   781k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1697|   781k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 8.39k, False: 773k]
  |  |  ------------------
  ------------------
23328|  8.39k|        {
23329|  8.39k|            return report_eof(context);
23330|  8.39k|        }
23331|   773k|        return true;
23332|   781k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E14bulk_remainingEv:
10218|   203k|    {
10219|   203k|        return remaining_count();
10220|   203k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E9bulk_dataEv:
10212|   194k|    {
10213|   194k|        return &*current;
10214|   194k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E9bulk_skipEm:
10224|   194k|    {
10225|   194k|        std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(n));
10226|   194k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17check_string_utf8ERSC_PKc:
23163|   221k|    {
23164|   221k|        return error_handler == error_handler_t::keep || check_string_utf8_handler(result, context);
  ------------------
  |  Branch (23164:16): [True: 221k, False: 0]
  |  Branch (23164:58): [True: 0, False: 0]
  ------------------
23165|   221k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE3keyERSC_:
17495|   204k|    {
17496|   204k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|   204k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17496:9): [True: 204k, False: 0]
  ------------------
17497|   204k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|   204k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17497:9): [True: 204k, False: 0]
  ------------------
17498|       |
17499|       |        // add null at the given key and store the reference for later; the
17500|       |        // key is moved, as the lexer starts the next token with reset()
17501|   204k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](std::move(val)));
17502|   204k|        return true;
17503|   204k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIdEEbRT_PKc:
22855|   103k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|   103k|        auto new_chars_read = ia.get_elements(&dest);
22859|   103k|        chars_read += new_chars_read;
22860|   103k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|   103k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 276, False: 103k]
  |  |  ------------------
  ------------------
22861|    276|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    276|            ++chars_read;
22864|    276|            static_cast<void>(report_eof(context));
22865|    276|            return false;
22866|    276|        }
22867|   103k|        return true;
22868|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIdEEmPT_m:
10174|   103k|    {
10175|   103k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIdEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|   103k|    {
10233|   103k|        const std::size_t wanted = count * sizeof(T);
10234|   103k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|   103k|        const std::size_t copied = (std::min)(wanted, available);
10236|   103k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|   103k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 103k, False: 228]
  |  |  ------------------
  ------------------
10237|   103k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|   103k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|   103k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 103k, False: 0]
  ------------------
10242|   103k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|   103k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 103k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|   103k|            std::memcpy(dest, &*current, copied);
10246|   103k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|   103k|        }
10248|   103k|        return copied;
10249|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10emit_floatIdEEbT_:
23034|   142k|    {
23035|   142k|        const auto result = static_cast<number_float_t>(number);
23036|   142k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|   279k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 142k]
  |  |  |  Branch (1697:94): [True: 136k, False: 5.23k]
  |  |  |  Branch (1697:94): [True: 0, False: 136k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|   142k|        return sax->number_float(result, no_source);
23041|   142k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18out_of_range_errorENS1_12exception_idEPKcSQ_:
23353|    156|    {
23354|    156|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
23355|    156|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE16get_token_stringEv:
23443|  4.98k|    {
23444|  4.98k|        return hex_byte(static_cast<std::uint8_t>(current));
23445|  4.98k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idERKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5868|    996|    {
 5869|    996|        return create(static_cast<int>(id_), what_arg, context);
 5870|    996|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_iRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5861|    996|    {
 5862|    996|        const std::string w = exception::what_impl("out_of_range", id_, what_arg, context);
 5863|    996|        return {id_, w.c_str()};
 5864|    996|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12number_floatEdRKSC_:
17461|   251k|    {
17462|   251k|        handle_value(val);
17463|   251k|        return true;
17464|   251k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRdEEPSG_OT_:
17566|   251k|    {
17567|   251k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 11.6k, False: 240k]
  ------------------
17568|  11.6k|        {
17569|  11.6k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  11.6k|            return &root;
17576|  11.6k|        }
17577|       |
17578|   240k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|   240k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 235k, False: 4.09k]
  |  Branch (17578:9): [True: 4.09k, False: 0]
  |  Branch (17578:9): [True: 240k, False: 0]
  ------------------
17579|       |
17580|   240k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 235k, False: 4.09k]
  ------------------
17581|   235k|        {
17582|   235k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|   235k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|   235k|        }
17590|       |
17591|  4.09k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.09k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.09k, False: 0]
  ------------------
17592|  4.09k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.09k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.09k, False: 0]
  ------------------
17593|  4.09k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.09k|        return object_element;
17600|  4.09k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRddTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
41596|   359k|    {
41597|   359k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
41598|   359k|        set_parents();
41599|   359k|        assert_invariant();
41600|   359k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIdvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERdEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8422|   359k|    {
 8423|   359k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 8424|   359k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERdEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8366|   359k|    {
 8367|   359k|        return to_json(j, std::forward<T>(val));
 8368|   359k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEdTnNS4_9enable_ifIXsr3std17is_floating_pointIT0_EE5valueEiE4typeELi0EEEvRT_SI_:
 8059|   359k|{
 8060|   359k|    external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
 8061|   359k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE7EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_14number_float_tE:
 7849|   359k|    {
 7850|   359k|        j.replace_value(value_t::number_float, val);
 7851|   359k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE13replace_valueENS0_6detail7value_tERKNSE_10json_valueE:
40376|  1.18M|    {
40377|  1.18M|        m_data.m_value.destroy(m_data.m_type);
40378|  1.18M|        m_data.m_value = v;
40379|  1.18M|        m_data.m_type = t;
40380|  1.18M|        set_parents();
40381|  1.18M|        assert_invariant();
40382|  1.18M|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2Ed:
39864|   359k|        json_value(number_float_t v) noexcept : number_float(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringIiEEbT_RSC_:
23119|  1.40k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  1.40k|        return get_bytes(len, "string", result);
23130|  1.40k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesIiSC_EEbT_PKcRT0_:
23245|  1.40k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  1.40k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  1.40k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 633, False: 771]
  ------------------
23250|    633|        {
23251|    633|            return true;
23252|    633|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    771|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    771|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 222, False: 549]
  ------------------
23258|    222|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    222|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 105, False: 117]
  ------------------
23262|    222|                                       ? static_cast<std::size_t>(len)
23263|    222|                                       : chunk_size;
23264|    222|            const std::size_t old_size = result.size();
23265|    222|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    222|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    222|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 222, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    222|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    222|            chars_read += bytes_read;
23273|    222|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    222|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 222, False: 0]
  |  |  ------------------
  ------------------
23274|    222|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    222|                result.resize(old_size + bytes_read);
23279|    222|                ++chars_read;
23280|    222|                current = char_traits<char_type>::eof();
23281|    222|                return unexpect_eof(context);
23282|    222|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    549|        return true;
23288|    771|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockIiEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  1.40k|    {
23295|  1.40k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 549, False: 855]
  ------------------
23296|    549|        {
23297|    549|            return false;
23298|    549|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    855|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    855|        const std::size_t remaining = ia.bulk_remaining();
23303|    855|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 222, False: 633]
  ------------------
23304|    222|        {
23305|    222|            return false; // (the loop reports the premature end)
23306|    222|        }
23307|    633|        const auto n = static_cast<std::size_t>(ulen);
23308|    633|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    633|        ia.bulk_skip(n);
23310|    633|        chars_read += n;
23311|    633|        return true;
23312|    855|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIcEEmPT_m:
10174|  2.06k|    {
10175|  2.06k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  2.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIcEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  2.06k|    {
10233|  2.06k|        const std::size_t wanted = count * sizeof(T);
10234|  2.06k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  2.06k|        const std::size_t copied = (std::min)(wanted, available);
10236|  2.06k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  2.06k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 498, False: 1.56k]
  |  |  ------------------
  ------------------
10237|    498|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|    498|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|    498|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 498, False: 0]
  ------------------
10242|    498|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|    498|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 498, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|    498|            std::memcpy(dest, &*current, copied);
10246|    498|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|    498|        }
10248|  2.06k|        return copied;
10249|  2.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE6stringERSC_:
17467|   124k|    {
17468|       |        // json_sax documents that the passed value may be moved from,
17469|       |        // so hand the buffer over instead of copying it
17470|   124k|        handle_value(std::move(val));
17471|   124k|        return true;
17472|   124k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueISC_EEPSG_OT_:
17566|   124k|    {
17567|   124k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 2.93k, False: 121k]
  ------------------
17568|  2.93k|        {
17569|  2.93k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  2.93k|            return &root;
17576|  2.93k|        }
17577|       |
17578|   121k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|   121k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 78.7k, False: 42.7k]
  |  Branch (17578:9): [True: 42.7k, False: 0]
  |  Branch (17578:9): [True: 121k, False: 0]
  ------------------
17579|       |
17580|   121k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 78.7k, False: 42.7k]
  ------------------
17581|  78.7k|        {
17582|  78.7k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  78.7k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  78.7k|        }
17590|       |
17591|  42.7k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  42.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 42.7k, False: 0]
  ------------------
17592|  42.7k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  42.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 42.7k, False: 0]
  ------------------
17593|  42.7k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  42.7k|        return object_element;
17600|  42.7k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2ISA_SA_TnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SH_EE5valueEiE4typeELi0EEEOT_:
41596|   176k|    {
41597|   176k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
41598|   176k|        set_parents();
41599|   176k|        assert_invariant();
41600|   176k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvE7to_jsonINS0_10basic_jsonINS2_3mapENS2_6vectorES8_blmdS6_S1_NSD_IhNS6_IhEEEEvEES8_EEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSI_:
 8422|   176k|    {
 8423|   176k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 8424|   176k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEESD_EEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSI_:
 8366|   176k|    {
 8367|   176k|        return to_json(j, std::forward<T>(val));
 8368|   176k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRT_ONSH_8string_tE:
 8052|   176k|{
 8053|   176k|    external_constructor<value_t::string>::construct(j, std::move(s));
 8054|   176k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_ONSK_8string_tE:
 7811|   176k|    {
 7812|   176k|        const typename BasicJsonType::json_value value(std::move(s));
 7813|   176k|        j.replace_value(value_t::string, value);
 7814|   176k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2EOSA_:
39955|   176k|        json_value(string_t&& value) : string(create<string_t>(std::move(value))) {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createISA_JSA_EEEPT_DpOT0_:
39788|   176k|    {
39789|   176k|        AllocatorType<T> alloc;
39790|   176k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
39791|       |
39792|   176k|        auto deleter = [&](T * obj)
39793|   176k|        {
39794|   176k|            AllocatorTraits::deallocate(alloc, obj, 1);
39795|   176k|        };
39796|   176k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
39797|   176k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
39798|   176k|        JSON_ASSERT(obj);
  ------------------
  |  | 2643|   176k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (39798:9): [True: 176k, False: 0]
  ------------------
39799|   176k|        return obj.release();
39800|   176k|    }
_ZN8nlohmann16json_abi_v3_12_027byte_container_with_subtypeINSt3__16vectorIhNS2_9allocatorIhEEEEEC2Ev:
 8460|  18.2k|        : container_type()
 8461|  18.2k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIhEEmPT_m:
10174|   150k|    {
10175|   150k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|   150k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIhEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|   150k|    {
10233|   150k|        const std::size_t wanted = count * sizeof(T);
10234|   150k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|   150k|        const std::size_t copied = (std::min)(wanted, available);
10236|   150k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|   150k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 149k, False: 870]
  |  |  ------------------
  ------------------
10237|   149k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|   149k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|   149k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 149k, False: 0]
  ------------------
10242|   149k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|   149k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 149k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|   149k|            std::memcpy(dest, &*current, copied);
10246|   149k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|   149k|        }
10248|   150k|        return copied;
10249|   150k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
17475|  8.73k|    {
17476|       |        // json_sax documents that the passed value may be moved from,
17477|       |        // so hand the buffer over instead of copying it
17478|  8.73k|        handle_value(std::move(val));
17479|  8.73k|        return true;
17480|  8.73k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
17566|  8.73k|    {
17567|  8.73k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 153, False: 8.58k]
  ------------------
17568|    153|        {
17569|    153|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    153|            return &root;
17576|    153|        }
17577|       |
17578|  8.58k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  8.58k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 7.28k, False: 1.29k]
  |  Branch (17578:9): [True: 1.29k, False: 0]
  |  Branch (17578:9): [True: 8.58k, False: 0]
  ------------------
17579|       |
17580|  8.58k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 7.28k, False: 1.29k]
  ------------------
17581|  7.28k|        {
17582|  7.28k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  7.28k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  7.28k|        }
17590|       |
17591|  1.29k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.29k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.29k, False: 0]
  ------------------
17592|  1.29k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.29k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.29k, False: 0]
  ------------------
17593|  1.29k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.29k|        return object_element;
17600|  1.29k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2INS0_27byte_container_with_subtypeISD_EESH_TnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SJ_EE5valueEiE4typeELi0EEEOT_:
41596|  17.4k|    {
41597|  17.4k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
41598|  17.4k|        set_parents();
41599|  17.4k|        assert_invariant();
41600|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerINS0_27byte_container_with_subtypeINSt3__16vectorIhNS3_9allocatorIhEEEEEEvE7to_jsonINS0_10basic_jsonINS3_3mapES4_NS3_12basic_stringIcNS3_11char_traitsIcEENS5_IcEEEEblmdS5_S1_S7_vEES8_EEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSK_:
 8422|  17.4k|    {
 8423|  17.4k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 8424|  17.4k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS0_27byte_container_with_subtypeISG_EEEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSK_:
 8366|  17.4k|    {
 8367|  17.4k|        return to_json(j, std::forward<T>(val));
 8368|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRT_RKNSH_8binary_tE:
 8191|  17.4k|{
 8192|  17.4k|    external_constructor<value_t::binary>::construct(j, bin);
 8193|  17.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE8EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_RKNSK_8binary_tE:
 7831|  17.4k|    {
 7832|  17.4k|        const typename BasicJsonType::json_value value(b);
 7833|  17.4k|        j.replace_value(value_t::binary, value);
 7834|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2ERKNS0_27byte_container_with_subtypeISD_EE:
39976|  17.4k|        json_value(const binary_t& value) : binary(create<binary_t>(value)) {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createINS0_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_:
39788|  17.4k|    {
39789|  17.4k|        AllocatorType<T> alloc;
39790|  17.4k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
39791|       |
39792|  17.4k|        auto deleter = [&](T * obj)
39793|  17.4k|        {
39794|  17.4k|            AllocatorTraits::deallocate(alloc, obj, 1);
39795|  17.4k|        };
39796|  17.4k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
39797|  17.4k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
39798|  17.4k|        JSON_ASSERT(obj);
  ------------------
  |  | 2643|  17.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (39798:9): [True: 17.4k, False: 0]
  ------------------
39799|  17.4k|        return obj.release();
39800|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIhLb0EEEbRT_:
22948|   145k|    {
22949|       |        // read in the original format
22950|       |
22951|   145k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|   145k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 171, False: 145k]
  |  |  ------------------
  ------------------
22952|    171|        {
22953|    171|            return false;
22954|    171|        }
22955|   145k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 145k]
  |  Branch (22955:34): [Folded, False: 145k]
  |  Branch (22955:57): [True: 145k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|   145k|        return true;
22960|   145k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIhEEbRT_PKc:
22855|   145k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|   145k|        auto new_chars_read = ia.get_elements(&dest);
22859|   145k|        chars_read += new_chars_read;
22860|   145k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|   145k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 513, False: 145k]
  |  |  ------------------
  ------------------
22861|    513|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    513|            ++chars_read;
22864|    513|            static_cast<void>(report_eof(context));
22865|    513|            return false;
22866|    513|        }
22867|   145k|        return true;
22868|   145k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE7booleanEb:
17443|   110k|    {
17444|   110k|        handle_value(val);
17445|   110k|        return true;
17446|   110k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRbEEPSG_OT_:
17566|   110k|    {
17567|   110k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 108, False: 110k]
  ------------------
17568|    108|        {
17569|    108|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    108|            return &root;
17576|    108|        }
17577|       |
17578|   110k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|   110k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 82.8k, False: 27.2k]
  |  Branch (17578:9): [True: 27.2k, False: 0]
  |  Branch (17578:9): [True: 110k, False: 0]
  ------------------
17579|       |
17580|   110k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 82.8k, False: 27.2k]
  ------------------
17581|  82.8k|        {
17582|  82.8k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  82.8k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  82.8k|        }
17590|       |
17591|  27.2k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  27.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 27.2k, False: 0]
  ------------------
17592|  27.2k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  27.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 27.2k, False: 0]
  ------------------
17593|  27.2k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  27.2k|        return object_element;
17600|  27.2k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRbbTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
41596|   158k|    {
41597|   158k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
41598|   158k|        set_parents();
41599|   158k|        assert_invariant();
41600|   158k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIbvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERbEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8422|   158k|    {
 8423|   158k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 8424|   158k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERbEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8366|   158k|    {
 8367|   158k|        return to_json(j, std::forward<T>(val));
 8368|   158k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEbTnNS4_9enable_ifIXsr3std7is_sameIT0_NT_9boolean_tEEE5valueEiE4typeELi0EEEvRSJ_SI_:
 8026|   158k|{
 8027|   158k|    external_constructor<value_t::boolean>::construct(j, b);
 8028|   158k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE4EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_9boolean_tE:
 7794|   158k|    {
 7795|   158k|        j.replace_value(value_t::boolean, b);
 7796|   158k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2Eb:
39858|   158k|        json_value(boolean_t v) noexcept : boolean(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE4nullEv:
17437|  77.4k|    {
17438|  77.4k|        handle_value(nullptr);
17439|  77.4k|        return true;
17440|  77.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIDnEEPSG_OT_:
17566|  77.4k|    {
17567|  77.4k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 84, False: 77.3k]
  ------------------
17568|     84|        {
17569|     84|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     84|            return &root;
17576|     84|        }
17577|       |
17578|  77.3k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  77.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 50.7k, False: 26.5k]
  |  Branch (17578:9): [True: 26.5k, False: 0]
  |  Branch (17578:9): [True: 77.3k, False: 0]
  ------------------
17579|       |
17580|  77.3k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 50.7k, False: 26.5k]
  ------------------
17581|  50.7k|        {
17582|  50.7k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  50.7k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  50.7k|        }
17590|       |
17591|  26.5k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  26.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 26.5k, False: 0]
  ------------------
17592|  26.5k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  26.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 26.5k, False: 0]
  ------------------
17593|  26.5k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  26.5k|        return object_element;
17600|  26.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE11emit_signedIiEEbT_:
22980|  17.7k|    {
22981|  17.7k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  17.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 17.7k, False: 0]
  |  |  ------------------
  ------------------
22982|  17.7k|        {
22983|  17.7k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  17.7k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIliEEbT0_:
 5295|  23.5k|{
 5296|  23.5k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  23.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IliLb1EvE4testEi:
 5288|  23.5k|    {
 5289|  23.5k|        return true;
 5290|  23.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE14number_integerEl:
17449|   159k|    {
17450|   159k|        handle_value(val);
17451|   159k|        return true;
17452|   159k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRlEEPSG_OT_:
17566|   159k|    {
17567|   159k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 3.09k, False: 156k]
  ------------------
17568|  3.09k|        {
17569|  3.09k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  3.09k|            return &root;
17576|  3.09k|        }
17577|       |
17578|   156k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|   156k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 148k, False: 8.47k]
  |  Branch (17578:9): [True: 8.47k, False: 0]
  |  Branch (17578:9): [True: 156k, False: 0]
  ------------------
17579|       |
17580|   156k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 148k, False: 8.47k]
  ------------------
17581|   148k|        {
17582|   148k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|   148k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|   148k|        }
17590|       |
17591|  8.47k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  8.47k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 8.47k, False: 0]
  ------------------
17592|  8.47k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  8.47k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 8.47k, False: 0]
  ------------------
17593|  8.47k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  8.47k|        return object_element;
17600|  8.47k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRllTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
41596|   203k|    {
41597|   203k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
41598|   203k|        set_parents();
41599|   203k|        assert_invariant();
41600|   203k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIlvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERlEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8422|   203k|    {
 8423|   203k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 8424|   203k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERlEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8366|   203k|    {
 8367|   203k|        return to_json(j, std::forward<T>(val));
 8368|   203k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEElTnNS4_9enable_ifIXsr33is_compatible_number_integer_typeIT_T0_EE5valueEiE4typeELi0EEEvRSI_SJ_:
 8073|   203k|{
 8074|   203k|    external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
 8075|   203k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE5EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_16number_integer_tE:
 7869|   203k|    {
 7870|   203k|        j.replace_value(value_t::number_integer, val);
 7871|   203k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2El:
39860|   203k|        json_value(number_integer_t v) noexcept : number_integer(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImiEEbT0_:
 5295|  4.69k|{
 5296|  4.69k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  4.69k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImiLb0EvE4testEi:
 5279|  4.69k|    {
 5280|  4.69k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  4.69k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImiLb0ELb1EE4testEi:
 5253|  4.69k|    {
 5254|  4.69k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|  4.69k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 4.69k, False: 0]
  |  Branch (5255:28): [True: 4.69k, False: 0]
  ------------------
 5256|  4.69k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE15number_unsignedEm:
17455|   190k|    {
17456|   190k|        handle_value(val);
17457|   190k|        return true;
17458|   190k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRmEEPSG_OT_:
17566|   190k|    {
17567|   190k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 2.98k, False: 187k]
  ------------------
17568|  2.98k|        {
17569|  2.98k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  2.98k|            return &root;
17576|  2.98k|        }
17577|       |
17578|   187k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|   187k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 177k, False: 10.0k]
  |  Branch (17578:9): [True: 10.0k, False: 0]
  |  Branch (17578:9): [True: 187k, False: 0]
  ------------------
17579|       |
17580|   187k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 177k, False: 10.0k]
  ------------------
17581|   177k|        {
17582|   177k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|   177k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|   177k|        }
17590|       |
17591|  10.0k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  10.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 10.0k, False: 0]
  ------------------
17592|  10.0k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  10.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 10.0k, False: 0]
  ------------------
17593|  10.0k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  10.0k|        return object_element;
17600|  10.0k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRmmTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
41596|   271k|    {
41597|   271k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
41598|   271k|        set_parents();
41599|   271k|        assert_invariant();
41600|   271k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerImvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERmEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8422|   271k|    {
 8423|   271k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 8424|   271k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERmEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 8366|   271k|    {
 8367|   271k|        return to_json(j, std::forward<T>(val));
 8368|   271k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEmTnNS4_9enable_ifIXsr26is_compatible_integer_typeINS4_11conditionalIXsr3std7is_sameINT_16number_integer_tENSJ_17number_unsigned_tEEE5valueENS1_27same_as_number_integer_typeESL_E4typeET0_EE5valueEiE4typeELi0EEEvRSJ_SP_:
 8066|   271k|{
 8067|   271k|    external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
 8068|   271k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE6EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_17number_unsigned_tE:
 7859|   271k|    {
 7860|   271k|        j.replace_value(value_t::number_unsigned, val);
 7861|   271k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2Em:
39862|   271k|        json_value(detail::number_unsigned_overload_type<NumberIntegerType, NumberUnsignedType> v) noexcept : number_unsigned(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIlEEbRT_PKc:
22855|  18.4k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  18.4k|        auto new_chars_read = ia.get_elements(&dest);
22859|  18.4k|        chars_read += new_chars_read;
22860|  18.4k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  18.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 459, False: 17.9k]
  |  |  ------------------
  ------------------
22861|    459|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    459|            ++chars_read;
22864|    459|            static_cast<void>(report_eof(context));
22865|    459|            return false;
22866|    459|        }
22867|  17.9k|        return true;
22868|  18.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIlEEmPT_m:
10174|  18.4k|    {
10175|  18.4k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  18.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIlEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  18.4k|    {
10233|  18.4k|        const std::size_t wanted = count * sizeof(T);
10234|  18.4k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  18.4k|        const std::size_t copied = (std::min)(wanted, available);
10236|  18.4k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  18.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 18.0k, False: 327]
  |  |  ------------------
  ------------------
10237|  18.0k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  18.0k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  18.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 18.0k, False: 0]
  ------------------
10242|  18.0k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  18.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 18.0k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  18.0k|            std::memcpy(dest, &*current, copied);
10246|  18.0k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  18.0k|        }
10248|  18.4k|        return copied;
10249|  18.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE11emit_signedIlEEbT_:
22980|  18.5k|    {
22981|  18.5k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  18.5k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 18.5k, False: 0]
  |  |  ------------------
  ------------------
22982|  18.5k|        {
22983|  18.5k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  18.5k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIllEEbT0_:
 5295|  31.9k|{
 5296|  31.9k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  31.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IllLb1EvE4testEl:
 5288|  31.9k|    {
 5289|  31.9k|        return true;
 5290|  31.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImlEEbT0_:
 5295|  14.2k|{
 5296|  14.2k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  14.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImlLb0EvE4testEl:
 5279|  14.2k|    {
 5280|  14.2k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  14.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImlLb0ELb1EE4testEl:
 5253|  14.2k|    {
 5254|  14.2k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|  14.2k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 13.6k, False: 614]
  |  Branch (5255:28): [True: 13.6k, False: 0]
  ------------------
 5256|  14.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toImEEbRT_PKc:
22855|  18.0k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  18.0k|        auto new_chars_read = ia.get_elements(&dest);
22859|  18.0k|        chars_read += new_chars_read;
22860|  18.0k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  18.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 432, False: 17.6k]
  |  |  ------------------
  ------------------
22861|    432|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    432|            ++chars_read;
22864|    432|            static_cast<void>(report_eof(context));
22865|    432|            return false;
22866|    432|        }
22867|  17.6k|        return true;
22868|  18.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsImEEmPT_m:
10174|  18.0k|    {
10175|  18.0k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  18.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implImEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  18.0k|    {
10233|  18.0k|        const std::size_t wanted = count * sizeof(T);
10234|  18.0k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  18.0k|        const std::size_t copied = (std::min)(wanted, available);
10236|  18.0k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  18.0k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 17.7k, False: 294]
  |  |  ------------------
  ------------------
10237|  17.7k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  17.7k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  17.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 17.7k, False: 0]
  ------------------
10242|  17.7k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  17.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 17.7k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  17.7k|            std::memcpy(dest, &*current, copied);
10246|  17.7k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  17.7k|        }
10248|  18.0k|        return copied;
10249|  18.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE13emit_unsignedImEEbT_:
23008|  74.5k|    {
23009|  74.5k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  74.5k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 74.5k, False: 0]
  |  |  ------------------
  ------------------
23010|  74.5k|        {
23011|  74.5k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  74.5k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  74.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImmEEbT0_:
 5295|   198k|{
 5296|   198k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|   198k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImmLb1EvE4testEm:
 5288|   198k|    {
 5289|   198k|        return true;
 5290|   198k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberItLb0EEEbRT_:
22948|  12.9k|    {
22949|       |        // read in the original format
22950|       |
22951|  12.9k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  12.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 148, False: 12.8k]
  |  |  ------------------
  ------------------
22952|    148|        {
22953|    148|            return false;
22954|    148|        }
22955|  12.8k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 12.8k]
  |  Branch (22955:34): [Folded, False: 12.5k]
  |  Branch (22955:57): [True: 12.5k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  12.8k|        return true;
22960|  12.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toItEEbRT_PKc:
22855|  12.9k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  12.9k|        auto new_chars_read = ia.get_elements(&dest);
22859|  12.9k|        chars_read += new_chars_read;
22860|  12.9k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  12.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 444, False: 12.5k]
  |  |  ------------------
  ------------------
22861|    444|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    444|            ++chars_read;
22864|    444|            static_cast<void>(report_eof(context));
22865|    444|            return false;
22866|    444|        }
22867|  12.5k|        return true;
22868|  12.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsItEEmPT_m:
10174|  12.9k|    {
10175|  12.9k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  12.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implItEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  12.9k|    {
10233|  12.9k|        const std::size_t wanted = count * sizeof(T);
10234|  12.9k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  12.9k|        const std::size_t copied = (std::min)(wanted, available);
10236|  12.9k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  12.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 12.6k, False: 366]
  |  |  ------------------
  ------------------
10237|  12.6k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  12.6k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  12.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 12.6k, False: 0]
  ------------------
10242|  12.6k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  12.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 12.6k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  12.6k|            std::memcpy(dest, &*current, copied);
10246|  12.6k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  12.6k|        }
10248|  12.9k|        return copied;
10249|  12.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIjLb0EEEbRT_:
22948|  9.35k|    {
22949|       |        // read in the original format
22950|       |
22951|  9.35k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  9.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 9.25k]
  |  |  ------------------
  ------------------
22952|    103|        {
22953|    103|            return false;
22954|    103|        }
22955|  9.25k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 9.25k]
  |  Branch (22955:34): [Folded, False: 9.04k]
  |  Branch (22955:57): [True: 9.04k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  9.25k|        return true;
22960|  9.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIjEEbRT_PKc:
22855|  9.35k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  9.35k|        auto new_chars_read = ia.get_elements(&dest);
22859|  9.35k|        chars_read += new_chars_read;
22860|  9.35k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  9.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 309, False: 9.04k]
  |  |  ------------------
  ------------------
22861|    309|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    309|            ++chars_read;
22864|    309|            static_cast<void>(report_eof(context));
22865|    309|            return false;
22866|    309|        }
22867|  9.04k|        return true;
22868|  9.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIjEEmPT_m:
10174|  9.35k|    {
10175|  9.35k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  9.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIjEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  9.35k|    {
10233|  9.35k|        const std::size_t wanted = count * sizeof(T);
10234|  9.35k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  9.35k|        const std::size_t copied = (std::min)(wanted, available);
10236|  9.35k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  9.35k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 9.13k, False: 219]
  |  |  ------------------
  ------------------
10237|  9.13k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  9.13k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  9.13k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 9.13k, False: 0]
  ------------------
10242|  9.13k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  9.13k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 9.13k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  9.13k|            std::memcpy(dest, &*current, copied);
10246|  9.13k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  9.13k|        }
10248|  9.35k|        return copied;
10249|  9.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberImLb0EEEbRT_:
22948|  18.0k|    {
22949|       |        // read in the original format
22950|       |
22951|  18.0k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  18.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 144, False: 17.8k]
  |  |  ------------------
  ------------------
22952|    144|        {
22953|    144|            return false;
22954|    144|        }
22955|  17.8k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 17.8k]
  |  Branch (22955:34): [Folded, False: 17.6k]
  |  Branch (22955:57): [True: 17.6k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  17.8k|        return true;
22960|  18.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJPKcA16_cNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEmS4_DpRKT_:
 5420|  1.97k|{
 5421|  1.97k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  1.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA16_cNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEmPKcDpRKT_:
 5420|  2.82k|{
 5421|  2.82k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  2.82k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|  2.82k|{
 5480|  2.82k|    out.append(std::forward<Arg>(arg));
 5481|  2.82k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  2.82k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA16_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  2.82k|{
 5480|  2.82k|    out.append(std::forward<Arg>(arg));
 5481|  2.82k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  2.82k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringIjEEbT_RSC_:
23119|  1.24k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  1.24k|        return get_bytes(len, "string", result);
23130|  1.24k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesIjSC_EEbT_PKcRT0_:
23245|  1.24k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  1.24k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  1.24k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 558, False: 687]
  ------------------
23250|    558|        {
23251|    558|            return true;
23252|    558|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    687|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    687|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 276, False: 411]
  ------------------
23258|    276|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    276|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 111, False: 165]
  ------------------
23262|    276|                                       ? static_cast<std::size_t>(len)
23263|    276|                                       : chunk_size;
23264|    276|            const std::size_t old_size = result.size();
23265|    276|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    276|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    276|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 276, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    276|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    276|            chars_read += bytes_read;
23273|    276|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    276|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 276, False: 0]
  |  |  ------------------
  ------------------
23274|    276|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    276|                result.resize(old_size + bytes_read);
23279|    276|                ++chars_read;
23280|    276|                current = char_traits<char_type>::eof();
23281|    276|                return unexpect_eof(context);
23282|    276|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    411|        return true;
23288|    687|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockIjEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  1.24k|    {
23295|  1.24k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 411, False: 834]
  ------------------
23296|    411|        {
23297|    411|            return false;
23298|    411|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    834|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    834|        const std::size_t remaining = ia.bulk_remaining();
23303|    834|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 276, False: 558]
  ------------------
23304|    276|        {
23305|    276|            return false; // (the loop reports the premature end)
23306|    276|        }
23307|    558|        const auto n = static_cast<std::size_t>(ulen);
23308|    558|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    558|        ia.bulk_skip(n);
23310|    558|        chars_read += n;
23311|    558|        return true;
23312|    834|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesIhSC_EEbT_PKcRT0_:
23245|  62.6k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  62.6k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  62.6k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 35.4k, False: 27.2k]
  ------------------
23250|  35.4k|        {
23251|  35.4k|            return true;
23252|  35.4k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  27.2k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  27.2k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 102, False: 27.1k]
  ------------------
23258|    102|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    102|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 102, False: 0]
  ------------------
23262|    102|                                       ? static_cast<std::size_t>(len)
23263|    102|                                       : chunk_size;
23264|    102|            const std::size_t old_size = result.size();
23265|    102|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    102|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    102|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 102, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    102|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    102|            chars_read += bytes_read;
23273|    102|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    102|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 102, False: 0]
  |  |  ------------------
  ------------------
23274|    102|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    102|                result.resize(old_size + bytes_read);
23279|    102|                ++chars_read;
23280|    102|                current = char_traits<char_type>::eof();
23281|    102|                return unexpect_eof(context);
23282|    102|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|  27.1k|        return true;
23288|  27.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockIhEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  62.6k|    {
23295|  62.6k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 27.1k, False: 35.5k]
  ------------------
23296|  27.1k|        {
23297|  27.1k|            return false;
23298|  27.1k|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  35.5k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  35.5k|        const std::size_t remaining = ia.bulk_remaining();
23303|  35.5k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 102, False: 35.4k]
  ------------------
23304|    102|        {
23305|    102|            return false; // (the loop reports the premature end)
23306|    102|        }
23307|  35.4k|        const auto n = static_cast<std::size_t>(ulen);
23308|  35.4k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  35.4k|        ia.bulk_skip(n);
23310|  35.4k|        chars_read += n;
23311|  35.4k|        return true;
23312|  35.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesItSC_EEbT_PKcRT0_:
23245|  2.74k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  2.74k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  2.74k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 1.50k, False: 1.24k]
  ------------------
23250|  1.50k|        {
23251|  1.50k|            return true;
23252|  1.50k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  1.24k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  1.24k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 201, False: 1.04k]
  ------------------
23258|    201|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    201|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 138, False: 63]
  ------------------
23262|    201|                                       ? static_cast<std::size_t>(len)
23263|    201|                                       : chunk_size;
23264|    201|            const std::size_t old_size = result.size();
23265|    201|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    201|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    201|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 201, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    201|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    201|            chars_read += bytes_read;
23273|    201|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    201|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 201, False: 0]
  |  |  ------------------
  ------------------
23274|    201|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    201|                result.resize(old_size + bytes_read);
23279|    201|                ++chars_read;
23280|    201|                current = char_traits<char_type>::eof();
23281|    201|                return unexpect_eof(context);
23282|    201|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|  1.04k|        return true;
23288|  1.24k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockItEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  2.74k|    {
23295|  2.74k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 1.04k, False: 1.70k]
  ------------------
23296|  1.04k|        {
23297|  1.04k|            return false;
23298|  1.04k|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  1.70k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  1.70k|        const std::size_t remaining = ia.bulk_remaining();
23303|  1.70k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 201, False: 1.50k]
  ------------------
23304|    201|        {
23305|    201|            return false; // (the loop reports the premature end)
23306|    201|        }
23307|  1.50k|        const auto n = static_cast<std::size_t>(ulen);
23308|  1.50k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  1.50k|        ia.bulk_skip(n);
23310|  1.50k|        chars_read += n;
23311|  1.50k|        return true;
23312|  1.70k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesImSC_EEbT_PKcRT0_:
23245|  1.59k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  1.59k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  1.59k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 567, False: 1.03k]
  ------------------
23250|    567|        {
23251|    567|            return true;
23252|    567|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  1.03k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  1.03k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 555, False: 477]
  ------------------
23258|    555|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    555|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 99, False: 456]
  ------------------
23262|    555|                                       ? static_cast<std::size_t>(len)
23263|    555|                                       : chunk_size;
23264|    555|            const std::size_t old_size = result.size();
23265|    555|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    555|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    555|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 555, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    555|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    555|            chars_read += bytes_read;
23273|    555|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    555|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 555, False: 0]
  |  |  ------------------
  ------------------
23274|    555|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    555|                result.resize(old_size + bytes_read);
23279|    555|                ++chars_read;
23280|    555|                current = char_traits<char_type>::eof();
23281|    555|                return unexpect_eof(context);
23282|    555|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    477|        return true;
23288|  1.03k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockImEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  1.59k|    {
23295|  1.59k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 477, False: 1.12k]
  ------------------
23296|    477|        {
23297|    477|            return false;
23298|    477|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  1.12k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  1.12k|        const std::size_t remaining = ia.bulk_remaining();
23303|  1.12k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 555, False: 567]
  ------------------
23304|    555|        {
23305|    555|            return false; // (the loop reports the premature end)
23306|    555|        }
23307|    567|        const auto n = static_cast<std::size_t>(ulen);
23308|    567|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    567|        ia.bulk_skip(n);
23310|    567|        chars_read += n;
23311|    567|        return true;
23312|  1.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE13emit_unsignedIhEEbT_:
23008|  75.0k|    {
23009|  75.0k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  75.0k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 75.0k, False: 0]
  |  |  ------------------
  ------------------
23010|  75.0k|        {
23011|  75.0k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  75.0k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  75.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImhEEbT0_:
 5295|  98.9k|{
 5296|  98.9k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  98.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImhLb0EvE4testEh:
 5279|  98.9k|    {
 5280|  98.9k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  98.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImhLb0ELb0EE4testEh:
 5233|  98.9k|    {
 5234|  98.9k|        using CommonType = typename std::common_type<OfType, T>::type;
 5235|  98.9k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5236|  98.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE13emit_unsignedItEEbT_:
23008|  17.9k|    {
23009|  17.9k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  17.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 17.9k, False: 0]
  |  |  ------------------
  ------------------
23010|  17.9k|        {
23011|  17.9k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  17.9k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  17.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImtEEbT0_:
 5295|  26.9k|{
 5296|  26.9k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  26.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImtLb0EvE4testEt:
 5279|  26.9k|    {
 5280|  26.9k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  26.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImtLb0ELb0EE4testEt:
 5233|  26.9k|    {
 5234|  26.9k|        using CommonType = typename std::common_type<OfType, T>::type;
 5235|  26.9k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5236|  26.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE13emit_unsignedIjEEbT_:
23008|  12.4k|    {
23009|  12.4k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  12.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 12.4k, False: 0]
  |  |  ------------------
  ------------------
23010|  12.4k|        {
23011|  12.4k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  12.4k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  12.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImjEEbT0_:
 5295|  18.0k|{
 5296|  18.0k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  18.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImjLb0EvE4testEj:
 5279|  18.0k|    {
 5280|  18.0k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  18.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImjLb0ELb0EE4testEj:
 5233|  18.0k|    {
 5234|  18.0k|        using CommonType = typename std::common_type<OfType, T>::type;
 5235|  18.0k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5236|  18.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIlmEEbT0_:
 5295|  6.01k|{
 5296|  6.01k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  6.01k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IlmLb0EvE4testEm:
 5279|  6.01k|    {
 5280|  6.01k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  6.01k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IlmLb1ELb0EE4testEm:
 5243|  6.01k|    {
 5244|  6.01k|        using CommonType = typename std::common_type<OfType, T>::type;
 5245|  6.01k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5246|  6.01k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
23245|  9.12k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  9.12k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [Folded, False: 0]
  ------------------
23249|  9.12k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 9.12k]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  9.12k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  13.6k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 4.87k, False: 8.73k]
  ------------------
23258|  4.87k|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|  4.87k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 4.60k, False: 273]
  ------------------
23262|  4.87k|                                       ? static_cast<std::size_t>(len)
23263|  4.87k|                                       : chunk_size;
23264|  4.87k|            const std::size_t old_size = result.size();
23265|  4.87k|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|  4.87k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|  4.87k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 4.87k, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|  4.87k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|  4.87k|            chars_read += bytes_read;
23273|  4.87k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|  4.87k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 387, False: 4.48k]
  |  |  ------------------
  ------------------
23274|    387|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    387|                result.resize(old_size + bytes_read);
23279|    387|                ++chars_read;
23280|    387|                current = char_traits<char_type>::eof();
23281|    387|                return unexpect_eof(context);
23282|    387|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|  4.48k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|  4.48k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 4.48k, False: 0]
  ------------------
23285|  4.48k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|  4.48k|        }
23287|  8.73k|        return true;
23288|  9.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockImNS0_27byte_container_with_subtypeISF_EEEEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|  9.12k|    {
23317|  9.12k|        return false;
23318|  9.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10emit_floatIfEEbT_:
23034|  11.5k|    {
23035|  11.5k|        const auto result = static_cast<number_float_t>(number);
23036|  11.5k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  21.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 11.5k]
  |  |  |  Branch (1697:94): [True: 10.0k, False: 1.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 10.0k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  11.5k|        return sax->number_float(result, no_source);
23041|  11.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23conditional_static_castImjTnNSt3__19enable_ifIXntsr3std7is_sameIT_T0_EE5valueEiE4typeELi0EEES5_S6_:
 5182|  4.45k|{
 5183|  4.45k|    return static_cast<T>(value);
 5184|  4.45k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE11enter_arrayEmm:
18630|   456k|    {
18631|   456k|        return enter_container(/*is_object*/false, len, type_marker);
18632|   456k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE12enter_objectEmm:
18636|  94.2k|    {
18637|  94.2k|        return enter_container(/*is_object*/true, len, type_marker);
18638|  94.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE15unexpected_byteEPKcSP_:
23421|    450|    {
23422|    450|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
23423|    450|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRPKcRA5_SA_S9_EEET_DpOT0_:
 5516|    900|{
 5517|    900|    OutStringType str;
 5518|    900|    str.reserve(concat_length(args...));
 5519|    900|    concat_into(str, std::forward<Args>(args)...);
 5520|    900|    return str;
 5521|    900|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA5_cNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEmPKcDpRKT_:
 5420|    900|{
 5421|    900|    return ::strlen(cstr) + concat_length(rest...);
 5422|    900|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA5_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|    900|{
 5480|    900|    out.append(std::forward<Arg>(arg));
 5481|    900|    concat_into(out, std::forward<Args>(rest)...);
 5482|    900|}
_ZN8nlohmann16json_abi_v3_12_06detail23conditional_static_castImmTnNSt3__19enable_ifIXsr3std7is_sameIT_T0_EE5valueEiE4typeELi0EEES5_S6_:
 5188|  6.48k|{
 5189|  6.48k|    return value;
 5190|  6.48k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE14get_half_floatEb:
23054|  88.9k|    {
23055|  88.9k|        const auto byte1_raw = get();
23056|  88.9k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  88.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 71, False: 88.8k]
  |  |  ------------------
  ------------------
23057|     71|        {
23058|     71|            return false;
23059|     71|        }
23060|  88.8k|        const auto byte2_raw = get();
23061|  88.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  88.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 25, False: 88.8k]
  |  |  ------------------
  ------------------
23062|     25|        {
23063|     25|            return false;
23064|     25|        }
23065|       |
23066|  88.8k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
23067|  88.8k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
23068|       |
23069|       |        // Code from RFC 8949, Appendix D, Figure 3:
23070|       |        // As half-precision floating-point numbers were only added
23071|       |        // to IEEE 754 in 2008, today's programming platforms often
23072|       |        // still only have limited support for them. It is very
23073|       |        // easy to include at least decoding support for them even
23074|       |        // without such support. An example of a small decoder for
23075|       |        // half-precision floating-point numbers in the C language
23076|       |        // is shown in Fig. 3.
23077|  88.8k|        const auto half = little_endian
  ------------------
  |  Branch (23077:27): [True: 88.6k, False: 192]
  ------------------
23078|  88.8k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
23079|  88.8k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
23080|  88.8k|        const double val = [&half]
23081|  88.8k|        {
23082|  88.8k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  88.8k|            const unsigned int mant = half & 0x3FFu;
23084|  88.8k|            JSON_ASSERT(exp <= 31);
23085|  88.8k|            JSON_ASSERT(mant <= 1023);
23086|  88.8k|            switch (exp)
23087|  88.8k|            {
23088|  88.8k|                case 0:
23089|  88.8k|                    return std::ldexp(mant, -24);
23090|  88.8k|                case 31:
23091|  88.8k|                    return (mant == 0)
23092|  88.8k|                    ? std::numeric_limits<double>::infinity()
23093|  88.8k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  88.8k|                default:
23095|  88.8k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  88.8k|            }
23097|  88.8k|        }();
23098|  88.8k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (23098:34): [True: 17.6k, False: 71.2k]
  ------------------
23099|  88.8k|                                 ? static_cast<number_float_t>(-val)
23100|  88.8k|                                 : static_cast<number_float_t>(val), no_source);
23101|  88.8k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE14get_half_floatEbENKUlvE_clEv:
23081|  88.6k|        {
23082|  88.6k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  88.6k|            const unsigned int mant = half & 0x3FFu;
23084|  88.6k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2643|  88.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23084:13): [True: 88.6k, False: 0]
  ------------------
23085|  88.6k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2643|  88.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23085:13): [True: 88.6k, False: 0]
  ------------------
23086|  88.6k|            switch (exp)
23087|  88.6k|            {
23088|  19.2k|                case 0:
  ------------------
  |  Branch (23088:17): [True: 19.2k, False: 69.4k]
  ------------------
23089|  19.2k|                    return std::ldexp(mant, -24);
23090|  5.89k|                case 31:
  ------------------
  |  Branch (23090:17): [True: 5.89k, False: 82.7k]
  ------------------
23091|  5.89k|                    return (mant == 0)
  ------------------
  |  Branch (23091:28): [True: 6, False: 5.88k]
  ------------------
23092|  5.89k|                    ? std::numeric_limits<double>::infinity()
23093|  5.89k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  63.5k|                default:
  ------------------
  |  Branch (23094:17): [True: 63.5k, False: 25.1k]
  ------------------
23095|  63.5k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  88.6k|            }
23097|  88.6k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIfLb0EEEbRT_:
22948|  2.43k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.43k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 99, False: 2.33k]
  |  |  ------------------
  ------------------
22952|     99|        {
22953|     99|            return false;
22954|     99|        }
22955|  2.33k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.33k]
  |  Branch (22955:34): [Folded, False: 2.13k]
  |  Branch (22955:57): [True: 2.13k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.33k|        return true;
22960|  2.43k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIfEEbRT_PKc:
22855|  2.43k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.43k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.43k|        chars_read += new_chars_read;
22860|  2.43k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 297, False: 2.13k]
  |  |  ------------------
  ------------------
22861|    297|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    297|            ++chars_read;
22864|    297|            static_cast<void>(report_eof(context));
22865|    297|            return false;
22866|    297|        }
22867|  2.13k|        return true;
22868|  2.43k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIfEEmPT_m:
10174|  2.43k|    {
10175|  2.43k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  2.43k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIfEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  2.43k|    {
10233|  2.43k|        const std::size_t wanted = count * sizeof(T);
10234|  2.43k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  2.43k|        const std::size_t copied = (std::min)(wanted, available);
10236|  2.43k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  2.43k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.19k, False: 246]
  |  |  ------------------
  ------------------
10237|  2.19k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  2.19k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  2.19k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 2.19k, False: 0]
  ------------------
10242|  2.19k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  2.19k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 2.19k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  2.19k|            std::memcpy(dest, &*current, copied);
10246|  2.19k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  2.19k|        }
10248|  2.43k|        return copied;
10249|  2.43k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIdLb0EEEbRT_:
22948|   103k|    {
22949|       |        // read in the original format
22950|       |
22951|   103k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|   103k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 103k]
  |  |  ------------------
  ------------------
22952|     92|        {
22953|     92|            return false;
22954|     92|        }
22955|   103k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 103k]
  |  Branch (22955:34): [Folded, False: 103k]
  |  Branch (22955:57): [True: 103k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|   103k|        return true;
22960|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22get_string_with_lengthIhEEbRSC_PKc:
23198|  62.6k|    {
23199|  62.6k|        NumberType len{};
23200|  62.6k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 62.6k, False: 54]
  |  Branch (23200:35): [True: 62.5k, False: 102]
  |  Branch (23200:62): [True: 62.5k, False: 0]
  ------------------
23201|  62.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringIhEEbT_RSC_:
23119|  62.6k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  62.6k|        return get_bytes(len, "string", result);
23130|  62.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22get_string_with_lengthItEEbRSC_PKc:
23198|  2.77k|    {
23199|  2.77k|        NumberType len{};
23200|  2.77k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 2.74k, False: 24]
  |  Branch (23200:35): [True: 2.54k, False: 201]
  |  Branch (23200:62): [True: 2.54k, False: 0]
  ------------------
23201|  2.77k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringItEEbT_RSC_:
23119|  2.74k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  2.74k|        return get_bytes(len, "string", result);
23130|  2.74k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22get_string_with_lengthIjEEbRSC_PKc:
23198|  1.27k|    {
23199|  1.27k|        NumberType len{};
23200|  1.27k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 1.24k, False: 33]
  |  Branch (23200:35): [True: 969, False: 276]
  |  Branch (23200:62): [True: 969, False: 0]
  ------------------
23201|  1.27k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIaLb0EEEbRT_:
22948|   481k|    {
22949|       |        // read in the original format
22950|       |
22951|   481k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|   481k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 481k]
  |  |  ------------------
  ------------------
22952|    114|        {
22953|    114|            return false;
22954|    114|        }
22955|   481k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 481k]
  |  Branch (22955:34): [Folded, False: 481k]
  |  Branch (22955:57): [True: 481k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|   481k|        return true;
22960|   481k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIaEEbRT_PKc:
22855|   481k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|   481k|        auto new_chars_read = ia.get_elements(&dest);
22859|   481k|        chars_read += new_chars_read;
22860|   481k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|   481k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 342, False: 481k]
  |  |  ------------------
  ------------------
22861|    342|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    342|            ++chars_read;
22864|    342|            static_cast<void>(report_eof(context));
22865|    342|            return false;
22866|    342|        }
22867|   481k|        return true;
22868|   481k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIaEEmPT_m:
10174|   481k|    {
10175|   481k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|   481k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIaEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|   481k|    {
10233|   481k|        const std::size_t wanted = count * sizeof(T);
10234|   481k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|   481k|        const std::size_t copied = (std::min)(wanted, available);
10236|   481k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|   481k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 481k, False: 342]
  |  |  ------------------
  ------------------
10237|   481k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|   481k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|   481k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 481k, False: 0]
  ------------------
10242|   481k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|   481k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 481k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|   481k|            std::memcpy(dest, &*current, copied);
10246|   481k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|   481k|        }
10248|   481k|        return copied;
10249|   481k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE11emit_signedIaEEbT_:
22980|  97.2k|    {
22981|  97.2k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  97.2k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 97.2k, False: 0]
  |  |  ------------------
  ------------------
22982|  97.2k|        {
22983|  97.2k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  97.2k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIlaEEbT0_:
 5295|   118k|{
 5296|   118k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|   118k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IlaLb1EvE4testEa:
 5288|   118k|    {
 5289|   118k|        return true;
 5290|   118k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImaEEbT0_:
 5295|   303k|{
 5296|   303k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|   303k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImaLb0EvE4testEa:
 5279|   303k|    {
 5280|   303k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|   303k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImaLb0ELb1EE4testEa:
 5253|   303k|    {
 5254|   303k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|   303k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 303k, False: 0]
  |  Branch (5255:28): [True: 303k, False: 0]
  ------------------
 5256|   303k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIsLb0EEEbRT_:
22948|  19.9k|    {
22949|       |        // read in the original format
22950|       |
22951|  19.9k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  19.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 135, False: 19.7k]
  |  |  ------------------
  ------------------
22952|    135|        {
22953|    135|            return false;
22954|    135|        }
22955|  19.7k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 19.7k]
  |  Branch (22955:34): [Folded, False: 19.4k]
  |  Branch (22955:57): [True: 19.4k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  19.7k|        return true;
22960|  19.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE6get_toIsEEbRT_PKc:
22855|  19.9k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  19.9k|        auto new_chars_read = ia.get_elements(&dest);
22859|  19.9k|        chars_read += new_chars_read;
22860|  19.9k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  19.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 405, False: 19.4k]
  |  |  ------------------
  ------------------
22861|    405|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    405|            ++chars_read;
22864|    405|            static_cast<void>(report_eof(context));
22865|    405|            return false;
22866|    405|        }
22867|  19.4k|        return true;
22868|  19.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIsEEmPT_m:
10174|  19.9k|    {
10175|  19.9k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  19.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIsEEmPT_mNSt3__117integral_constantIbLb1EEE:
10232|  19.9k|    {
10233|  19.9k|        const std::size_t wanted = count * sizeof(T);
10234|  19.9k|        const std::size_t available = remaining_count() * sizeof(char_type);
10235|  19.9k|        const std::size_t copied = (std::min)(wanted, available);
10236|  19.9k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1696|  19.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 19.5k, False: 321]
  |  |  ------------------
  ------------------
10237|  19.5k|        {
10238|       |            // the copy must stay within both buffers: the caller-provided
10239|       |            // destination holds `wanted` bytes and the remaining input range
10240|       |            // holds `available` bytes, and `copied` is the minimum of the two
10241|  19.5k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2643|  19.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10241:13): [True: 19.5k, False: 0]
  ------------------
10242|  19.5k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2643|  19.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10242:13): [True: 19.5k, False: 0]
  ------------------
10243|       |            // &*current yields the raw address for both raw pointers and
10244|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
10245|  19.5k|            std::memcpy(dest, &*current, copied);
10246|  19.5k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
10247|  19.5k|        }
10248|  19.9k|        return copied;
10249|  19.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE11emit_signedIsEEbT_:
22980|  25.4k|    {
22981|  25.4k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  25.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 25.4k, False: 0]
  |  |  ------------------
  ------------------
22982|  25.4k|        {
22983|  25.4k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  25.4k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIlsEEbT0_:
 5295|  35.1k|{
 5296|  35.1k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  35.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IlsLb1EvE4testEs:
 5288|  35.1k|    {
 5289|  35.1k|        return true;
 5290|  35.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImsEEbT0_:
 5295|  9.44k|{
 5296|  9.44k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  9.44k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImsLb0EvE4testEs:
 5279|  9.44k|    {
 5280|  9.44k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  9.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImsLb0ELb1EE4testEs:
 5253|  9.44k|    {
 5254|  9.44k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|  9.44k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 9.44k, False: 0]
  |  Branch (5255:28): [True: 9.44k, False: 0]
  ------------------
 5256|  9.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIiLb0EEEbRT_:
22948|  14.4k|    {
22949|       |        // read in the original format
22950|       |
22951|  14.4k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  14.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 133, False: 14.3k]
  |  |  ------------------
  ------------------
22952|    133|        {
22953|    133|            return false;
22954|    133|        }
22955|  14.3k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 14.3k]
  |  Branch (22955:34): [Folded, False: 14.0k]
  |  Branch (22955:57): [True: 14.0k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  14.3k|        return true;
22960|  14.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_numberIlLb0EEEbRT_:
22948|  18.4k|    {
22949|       |        // read in the original format
22950|       |
22951|  18.4k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  18.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 153, False: 18.2k]
  |  |  ------------------
  ------------------
22952|    153|        {
22953|    153|            return false;
22954|    153|        }
22955|  18.2k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 18.2k]
  |  Branch (22955:34): [Folded, False: 17.9k]
  |  Branch (22955:57): [True: 17.9k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  18.2k|        return true;
22960|  18.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE21parse_ubjson_internalEv:
21219|  86.9k|    {
21220|       |        // the key currently being read; hoisted out of the loop so that its
21221|       |        // capacity is reused across elements and across nesting levels
21222|  86.9k|        string_t key;
21223|       |
21224|       |        // the type marker of the value to read next
21225|  86.9k|        char_int_type prefix = get_ignore_noop();
21226|       |
21227|  1.28M|        while (true)
  ------------------
  |  Branch (21227:16): [True: 1.27M, Folded]
  ------------------
21228|  1.27M|        {
21229|  1.27M|            const std::size_t depth = container_stack.size();
21230|       |
21231|  1.27M|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1697|  1.27M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 6.28k, False: 1.26M]
  |  |  ------------------
  ------------------
21232|  6.28k|            {
21233|  6.28k|                return false;
21234|  6.28k|            }
21235|       |
21236|       |            // the value begun here is complete once it is not inside anything
21237|  1.26M|            if (container_stack.empty())
  ------------------
  |  Branch (21237:17): [True: 23.0k, False: 1.24M]
  ------------------
21238|  23.0k|            {
21239|  23.0k|                return true;
21240|  23.0k|            }
21241|       |
21242|       |            // a value was completed rather than a container opened; a
21243|       |            // container that ends at a marker needs the next byte to test
21244|  1.24M|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (21244:17): [True: 678k, False: 562k]
  |  Branch (21244:52): [True: 360k, False: 318k]
  ------------------
21245|   360k|            {
21246|   360k|                get_ignore_noop();
21247|   360k|            }
21248|       |
21249|       |            // advance to the next element, closing the containers that ended.
21250|       |            // top is a copy, not a reference: it must stay valid across the
21251|       |            // pop_back() below, which destroys the container_stack element it
21252|       |            // would otherwise alias.
21253|  1.24M|            for (;;)
21254|  1.64M|            {
21255|  1.64M|                const container_frame top = container_stack.back();
21256|       |
21257|  1.64M|                if (top.remaining != npos)
  ------------------
  |  Branch (21257:21): [True: 680k, False: 963k]
  ------------------
21258|   680k|                {
21259|   680k|                    if (top.remaining != 0)
  ------------------
  |  Branch (21259:25): [True: 488k, False: 192k]
  ------------------
21260|   488k|                    {
21261|   488k|                        --container_stack.back().remaining;
21262|   488k|                        if (top.is_object)
  ------------------
  |  Branch (21262:29): [True: 50.4k, False: 437k]
  ------------------
21263|  50.4k|                        {
21264|  50.4k|                            key.clear();
21265|  50.4k|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1697|   100k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 68, False: 50.4k]
  |  |  |  Branch (1697:94): [True: 204, False: 50.2k]
  |  |  |  Branch (1697:94): [True: 0, False: 50.2k]
  |  |  ------------------
  ------------------
21266|     68|                            {
21267|     68|                                return false;
21268|     68|                            }
21269|  50.4k|                        }
21270|       |                        // an optimized container gives its elements no marker
21271|   488k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (21271:34): [True: 98.5k, False: 389k]
  ------------------
21272|   488k|                        break;
21273|   488k|                    }
21274|   680k|                }
21275|       |                // the end marker is compared against a literal rather than
21276|       |                // against a conditional expression, because char_int_type is
21277|       |                // unsigned for some input adapters and MSVC then reports the
21278|       |                // comparison as a signed/unsigned mismatch
21279|   963k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (21279:26): [True: 147k, False: 816k]
  |  Branch (21279:26): [True: 699k, False: 264k]
  ------------------
21280|   699k|                {
21281|       |                    // a container that ends at a marker is never optimized, so
21282|       |                    // every element carries its own marker; for an object the
21283|       |                    // byte tested above is the first byte of the key
21284|   699k|                    if (top.is_object)
  ------------------
  |  Branch (21284:25): [True: 95.7k, False: 603k]
  ------------------
21285|  95.7k|                    {
21286|  95.7k|                        key.clear();
21287|  95.7k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1697|   188k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 989, False: 94.7k]
  |  |  |  Branch (1697:94): [True: 2.96k, False: 92.7k]
  |  |  |  Branch (1697:94): [True: 0, False: 92.7k]
  |  |  ------------------
  ------------------
21288|    989|                        {
21289|    989|                            return false;
21290|    989|                        }
21291|  94.7k|                        prefix = get_ignore_noop();
21292|  94.7k|                    }
21293|   603k|                    else
21294|   603k|                    {
21295|   603k|                        prefix = current;
21296|   603k|                    }
21297|   698k|                    break;
21298|   699k|                }
21299|       |
21300|   457k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1697|   457k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 457k]
  |  |  ------------------
  ------------------
21301|      0|                {
21302|      0|                    return false;
21303|      0|                }
21304|   457k|                if (container_stack.empty())
  ------------------
  |  Branch (21304:21): [True: 41.8k, False: 415k]
  ------------------
21305|  41.8k|                {
21306|  41.8k|                    return true;
21307|  41.8k|                }
21308|       |                // the container that just ended was an element of the one
21309|       |                // below it, which may need the next byte for its own test
21310|   415k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (21310:21): [True: 251k, False: 164k]
  ------------------
21311|   251k|                {
21312|   251k|                    get_ignore_noop();
21313|   251k|                }
21314|   415k|            }
21315|  1.24M|        }
21316|  86.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE16get_ubjson_valueEm:
21816|  1.27M|    {
21817|  1.27M|        switch (prefix)
21818|  1.27M|        {
21819|  3.90k|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (21819:13): [True: 3.90k, False: 1.27M]
  ------------------
21820|  3.90k|                return unexpect_eof("value");
21821|       |
21822|  70.8k|            case 'T':  // true
  ------------------
  |  Branch (21822:13): [True: 70.8k, False: 1.20M]
  ------------------
21823|  70.8k|                return sax->boolean(true);
21824|  39.4k|            case 'F':  // false
  ------------------
  |  Branch (21824:13): [True: 39.4k, False: 1.23M]
  ------------------
21825|  39.4k|                return sax->boolean(false);
21826|       |
21827|  77.4k|            case 'Z':  // null
  ------------------
  |  Branch (21827:13): [True: 77.4k, False: 1.19M]
  ------------------
21828|  77.4k|                return sax->null();
21829|       |
21830|  3.42k|            case 'B':  // byte
  ------------------
  |  Branch (21830:13): [True: 3.42k, False: 1.27M]
  ------------------
21831|  3.42k|            {
21832|  3.42k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21832:21): [True: 0, False: 3.42k]
  ------------------
21833|      0|                {
21834|      0|                    break;
21835|      0|                }
21836|  3.42k|                std::uint8_t number{};
21837|  3.42k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21837:24): [True: 3.40k, False: 18]
  |  Branch (21837:46): [True: 3.40k, False: 0]
  ------------------
21838|  3.42k|            }
21839|       |
21840|  43.0k|            case 'U':
  ------------------
  |  Branch (21840:13): [True: 43.0k, False: 1.23M]
  ------------------
21841|  43.0k|            {
21842|  43.0k|                std::uint8_t number{};
21843|  43.0k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21843:24): [True: 42.6k, False: 348]
  |  Branch (21843:46): [True: 42.6k, False: 0]
  ------------------
21844|  3.42k|            }
21845|       |
21846|  68.4k|            case 'i':
  ------------------
  |  Branch (21846:13): [True: 68.4k, False: 1.20M]
  ------------------
21847|  68.4k|            {
21848|  68.4k|                std::int8_t number{};
21849|  68.4k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21849:24): [True: 68.1k, False: 261]
  |  Branch (21849:46): [True: 68.1k, False: 0]
  ------------------
21850|  3.42k|            }
21851|       |
21852|  12.8k|            case 'I':
  ------------------
  |  Branch (21852:13): [True: 12.8k, False: 1.26M]
  ------------------
21853|  12.8k|            {
21854|  12.8k|                std::int16_t number{};
21855|  12.8k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21855:24): [True: 12.5k, False: 264]
  |  Branch (21855:46): [True: 12.5k, False: 0]
  ------------------
21856|  3.42k|            }
21857|       |
21858|  10.3k|            case 'l':
  ------------------
  |  Branch (21858:13): [True: 10.3k, False: 1.26M]
  ------------------
21859|  10.3k|            {
21860|  10.3k|                std::int32_t number{};
21861|  10.3k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21861:24): [True: 10.0k, False: 276]
  |  Branch (21861:46): [True: 10.0k, False: 0]
  ------------------
21862|  3.42k|            }
21863|       |
21864|  14.6k|            case 'L':
  ------------------
  |  Branch (21864:13): [True: 14.6k, False: 1.26M]
  ------------------
21865|  14.6k|            {
21866|  14.6k|                std::int64_t number{};
21867|  14.6k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21867:24): [True: 14.3k, False: 282]
  |  Branch (21867:46): [True: 14.3k, False: 0]
  ------------------
21868|  3.42k|            }
21869|       |
21870|  6.34k|            case 'u':
  ------------------
  |  Branch (21870:13): [True: 6.34k, False: 1.26M]
  ------------------
21871|  6.34k|            {
21872|  6.34k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21872:21): [True: 0, False: 6.34k]
  ------------------
21873|      0|                {
21874|      0|                    break;
21875|      0|                }
21876|  6.34k|                std::uint16_t number{};
21877|  6.34k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21877:24): [True: 6.07k, False: 279]
  |  Branch (21877:46): [True: 6.07k, False: 0]
  ------------------
21878|  6.34k|            }
21879|       |
21880|  5.76k|            case 'm':
  ------------------
  |  Branch (21880:13): [True: 5.76k, False: 1.26M]
  ------------------
21881|  5.76k|            {
21882|  5.76k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21882:21): [True: 0, False: 5.76k]
  ------------------
21883|      0|                {
21884|      0|                    break;
21885|      0|                }
21886|  5.76k|                std::uint32_t number{};
21887|  5.76k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21887:24): [True: 5.57k, False: 186]
  |  Branch (21887:46): [True: 5.57k, False: 0]
  ------------------
21888|  5.76k|            }
21889|       |
21890|  13.0k|            case 'M':
  ------------------
  |  Branch (21890:13): [True: 13.0k, False: 1.26M]
  ------------------
21891|  13.0k|            {
21892|  13.0k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21892:21): [True: 0, False: 13.0k]
  ------------------
21893|      0|                {
21894|      0|                    break;
21895|      0|                }
21896|  13.0k|                std::uint64_t number{};
21897|  13.0k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21897:24): [True: 12.7k, False: 264]
  |  Branch (21897:46): [True: 12.7k, False: 0]
  ------------------
21898|  13.0k|            }
21899|       |
21900|  88.9k|            case 'h':
  ------------------
  |  Branch (21900:13): [True: 88.9k, False: 1.18M]
  ------------------
21901|  88.9k|            {
21902|  88.9k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21902:21): [True: 0, False: 88.9k]
  ------------------
21903|      0|                {
21904|      0|                    break;
21905|      0|                }
21906|  88.9k|                return get_half_float(true);
21907|  88.9k|            }
21908|       |
21909|  2.43k|            case 'd':
  ------------------
  |  Branch (21909:13): [True: 2.43k, False: 1.27M]
  ------------------
21910|  2.43k|            {
21911|  2.43k|                float number{};
21912|  2.43k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21912:24): [True: 2.13k, False: 297]
  |  Branch (21912:46): [True: 2.13k, False: 0]
  ------------------
21913|  88.9k|            }
21914|       |
21915|   103k|            case 'D':
  ------------------
  |  Branch (21915:13): [True: 103k, False: 1.17M]
  ------------------
21916|   103k|            {
21917|   103k|                double number{};
21918|   103k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21918:24): [True: 103k, False: 276]
  |  Branch (21918:46): [True: 103k, False: 0]
  ------------------
21919|  88.9k|            }
21920|       |
21921|  22.6k|            case 'H':
  ------------------
  |  Branch (21921:13): [True: 22.6k, False: 1.25M]
  ------------------
21922|  22.6k|            {
21923|  22.6k|                return get_ubjson_high_precision_number();
21924|  88.9k|            }
21925|       |
21926|  25.4k|            case 'C':  // char
  ------------------
  |  Branch (21926:13): [True: 25.4k, False: 1.24M]
  ------------------
21927|  25.4k|            {
21928|  25.4k|                get();
21929|  25.4k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|  25.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 23, False: 25.4k]
  |  |  ------------------
  ------------------
21930|     23|                {
21931|     23|                    return false;
21932|     23|                }
21933|  25.4k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|  25.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 6, False: 25.4k]
  |  |  ------------------
  ------------------
21934|      6|                {
21935|      6|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
21936|      6|                }
21937|  25.4k|                string_t s(1, static_cast<typename string_t::value_type>(current));
21938|  25.4k|                return sax->string(s);
21939|  25.4k|            }
21940|       |
21941|  79.2k|            case 'S':  // string
  ------------------
  |  Branch (21941:13): [True: 79.2k, False: 1.19M]
  ------------------
21942|  79.2k|            {
21943|  79.2k|                string_t s;
21944|  79.2k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (21944:24): [True: 78.7k, False: 495]
  |  Branch (21944:48): [True: 78.7k, False: 0]
  ------------------
21945|  25.4k|            }
21946|       |
21947|   488k|            case '[':  // array
  ------------------
  |  Branch (21947:13): [True: 488k, False: 787k]
  ------------------
21948|   488k|                return get_ubjson_array();
21949|       |
21950|  94.6k|            case '{':  // object
  ------------------
  |  Branch (21950:13): [True: 94.6k, False: 1.18M]
  ------------------
21951|  94.6k|                return get_ubjson_object();
21952|       |
21953|    450|            default: // anything else
  ------------------
  |  Branch (21953:13): [True: 450, False: 1.27M]
  ------------------
21954|    450|                break;
21955|  1.27M|        }
21956|    450|        return unexpected_byte("invalid byte", "value");
21957|  1.27M|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE32get_ubjson_high_precision_numberEv:
22198|  22.6k|    {
22199|       |        // get the size of the following number string
22200|  22.6k|        std::size_t size{};
22201|  22.6k|        bool no_ndarray = true;
22202|  22.6k|        auto res = get_ubjson_size_value(size, no_ndarray);
22203|  22.6k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1697|  22.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 176, False: 22.4k]
  |  |  ------------------
  ------------------
22204|    176|        {
22205|    176|            return res;
22206|    176|        }
22207|       |
22208|       |        // get number string
22209|  22.4k|        std::vector<char> number_vector;
22210|   305k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (22210:33): [True: 283k, False: 22.3k]
  ------------------
22211|   283k|        {
22212|   283k|            get();
22213|   283k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|   283k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 178, False: 282k]
  |  |  ------------------
  ------------------
22214|    178|            {
22215|    178|                return false;
22216|    178|            }
22217|       |            // the lexer would stop at a NUL and accept the digits before it
22218|   282k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1697|   282k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 12, False: 282k]
  |  |  ------------------
  ------------------
22219|     12|            {
22220|     12|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22221|     12|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
22222|     12|            }
22223|   282k|            number_vector.push_back(static_cast<char>(current));
22224|   282k|        }
22225|       |
22226|       |        // parse number string
22227|  22.3k|        using ia_type = decltype(detail::input_adapter(number_vector));
22228|  22.3k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
22229|  22.3k|        const auto result_number = number_lexer.scan();
22230|  22.3k|        const auto number_string = number_lexer.get_token_string();
22231|  22.3k|        const auto result_remainder = number_lexer.scan();
22232|       |
22233|  22.3k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
22234|       |
22235|  22.3k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1697|  22.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 4.01k, False: 18.2k]
  |  |  ------------------
  ------------------
22236|  4.01k|        {
22237|  4.01k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22238|  4.01k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22239|  4.01k|        }
22240|       |
22241|  18.2k|        switch (result_number)
22242|  18.2k|        {
22243|    930|            case token_type::value_integer:
  ------------------
  |  Branch (22243:13): [True: 930, False: 17.3k]
  ------------------
22244|    930|                return sax->number_integer(number_lexer.get_number_integer());
22245|  5.20k|            case token_type::value_unsigned:
  ------------------
  |  Branch (22245:13): [True: 5.20k, False: 13.0k]
  ------------------
22246|  5.20k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
22247|  9.61k|            case token_type::value_float:
  ------------------
  |  Branch (22247:13): [True: 9.61k, False: 8.67k]
  ------------------
22248|  9.61k|            {
22249|  9.61k|                const auto parsed_float = number_lexer.get_number_float();
22250|  9.61k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1697|  9.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 342, False: 9.27k]
  |  |  ------------------
  ------------------
22251|    342|                {
22252|    342|                    return sax->parse_error(
22253|    342|                               chars_read,
22254|    342|                               number_string,
22255|    342|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
22256|    342|                }
22257|       |                // number_string is a std::string, while the SAX interface takes a
22258|       |                // string_t; convert explicitly, as the two are only implicitly
22259|       |                // convertible for some string types
22260|  9.27k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
22261|  9.61k|            }
22262|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (22262:13): [True: 0, False: 18.2k]
  ------------------
22263|      3|            case token_type::literal_true:
  ------------------
  |  Branch (22263:13): [True: 3, False: 18.2k]
  ------------------
22264|      6|            case token_type::literal_false:
  ------------------
  |  Branch (22264:13): [True: 3, False: 18.2k]
  ------------------
22265|      6|            case token_type::literal_null:
  ------------------
  |  Branch (22265:13): [True: 0, False: 18.2k]
  ------------------
22266|     12|            case token_type::value_string:
  ------------------
  |  Branch (22266:13): [True: 6, False: 18.2k]
  ------------------
22267|     18|            case token_type::begin_array:
  ------------------
  |  Branch (22267:13): [True: 6, False: 18.2k]
  ------------------
22268|     21|            case token_type::begin_object:
  ------------------
  |  Branch (22268:13): [True: 3, False: 18.2k]
  ------------------
22269|     24|            case token_type::end_array:
  ------------------
  |  Branch (22269:13): [True: 3, False: 18.2k]
  ------------------
22270|     27|            case token_type::end_object:
  ------------------
  |  Branch (22270:13): [True: 3, False: 18.2k]
  ------------------
22271|     30|            case token_type::name_separator:
  ------------------
  |  Branch (22271:13): [True: 3, False: 18.2k]
  ------------------
22272|     33|            case token_type::value_separator:
  ------------------
  |  Branch (22272:13): [True: 3, False: 18.2k]
  ------------------
22273|  1.69k|            case token_type::parse_error:
  ------------------
  |  Branch (22273:13): [True: 1.66k, False: 16.6k]
  ------------------
22274|  1.83k|            case token_type::end_of_input:
  ------------------
  |  Branch (22274:13): [True: 138, False: 18.1k]
  ------------------
22275|  1.83k|            case token_type::literal_or_value:
  ------------------
  |  Branch (22275:13): [True: 0, False: 18.2k]
  ------------------
22276|  1.83k|            default:
  ------------------
  |  Branch (22276:13): [True: 0, False: 18.2k]
  ------------------
22277|  1.83k|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22278|  1.83k|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22279|  18.2k|        }
22280|  18.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE21get_ubjson_size_valueERmRbmm:
21560|   351k|    {
21561|   351k|        if (prefix == 0)
  ------------------
  |  Branch (21561:13): [True: 277k, False: 74.0k]
  ------------------
21562|   277k|        {
21563|   277k|            prefix = get_ignore_noop();
21564|   277k|        }
21565|       |
21566|   351k|        switch (prefix)
21567|   351k|        {
21568|  36.7k|            case 'U':
  ------------------
  |  Branch (21568:13): [True: 36.7k, False: 314k]
  ------------------
21569|  36.7k|            {
21570|  36.7k|                std::uint8_t number{};
21571|  36.7k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  36.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 31, False: 36.6k]
  |  |  ------------------
  ------------------
21572|     31|                {
21573|     31|                    return false;
21574|     31|                }
21575|  36.6k|                result = static_cast<std::size_t>(number);
21576|  36.6k|                return true;
21577|  36.7k|            }
21578|       |
21579|   262k|            case 'i':
  ------------------
  |  Branch (21579:13): [True: 262k, False: 89.3k]
  ------------------
21580|   262k|                return get_ubjson_signed_count<std::int8_t>(result);
21581|       |
21582|  4.87k|            case 'I':
  ------------------
  |  Branch (21582:13): [True: 4.87k, False: 346k]
  ------------------
21583|  4.87k|                return get_ubjson_signed_count<std::int16_t>(result);
21584|       |
21585|  2.54k|            case 'l':
  ------------------
  |  Branch (21585:13): [True: 2.54k, False: 349k]
  ------------------
21586|  2.54k|                return get_ubjson_signed_count<std::int32_t>(result);
21587|       |
21588|  2.23k|            case 'L':
  ------------------
  |  Branch (21588:13): [True: 2.23k, False: 349k]
  ------------------
21589|  2.23k|                return get_ubjson_signed_count<std::int64_t>(result);
21590|       |
21591|  3.85k|            case 'u':
  ------------------
  |  Branch (21591:13): [True: 3.85k, False: 347k]
  ------------------
21592|  3.85k|            {
21593|  3.85k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21593:21): [True: 0, False: 3.85k]
  ------------------
21594|      0|                {
21595|      0|                    break;
21596|      0|                }
21597|  3.85k|                std::uint16_t number{};
21598|  3.85k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  3.85k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 47, False: 3.80k]
  |  |  ------------------
  ------------------
21599|     47|                {
21600|     47|                    return false;
21601|     47|                }
21602|  3.80k|                result = static_cast<std::size_t>(number);
21603|  3.80k|                return true;
21604|  3.85k|            }
21605|       |
21606|  2.31k|            case 'm':
  ------------------
  |  Branch (21606:13): [True: 2.31k, False: 349k]
  ------------------
21607|  2.31k|            {
21608|  2.31k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21608:21): [True: 0, False: 2.31k]
  ------------------
21609|      0|                {
21610|      0|                    break;
21611|      0|                }
21612|  2.31k|                std::uint32_t number{};
21613|  2.31k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  2.31k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 30, False: 2.28k]
  |  |  ------------------
  ------------------
21614|     30|                {
21615|     30|                    return false;
21616|     30|                }
21617|  2.28k|                return store_ubjson_count(conditional_static_cast<std::size_t>(number), result);
21618|  2.31k|            }
21619|       |
21620|  3.35k|            case 'M':
  ------------------
  |  Branch (21620:13): [True: 3.35k, False: 348k]
  ------------------
21621|  3.35k|            {
21622|  3.35k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21622:21): [True: 0, False: 3.35k]
  ------------------
21623|      0|                {
21624|      0|                    break;
21625|      0|                }
21626|  3.35k|                std::uint64_t number{};
21627|  3.35k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  3.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 37, False: 3.31k]
  |  |  ------------------
  ------------------
21628|     37|                {
21629|     37|                    return false;
21630|     37|                }
21631|  3.31k|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (21631:21): [True: 0, False: 3.31k]
  ------------------
21632|      0|                {
21633|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21634|      0|                }
21635|  3.31k|                return store_ubjson_count(detail::conditional_static_cast<std::size_t>(number), result);
21636|  3.31k|            }
21637|       |
21638|  32.6k|            case '[':
  ------------------
  |  Branch (21638:13): [True: 32.6k, False: 319k]
  ------------------
21639|  32.6k|            {
21640|  32.6k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21640:21): [True: 0, False: 32.6k]
  ------------------
21641|      0|                {
21642|      0|                    break;
21643|      0|                }
21644|  32.6k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (21644:21): [True: 33, False: 32.6k]
  ------------------
21645|     33|                {
21646|     33|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
21647|     33|                }
21648|  32.6k|                std::vector<size_t> dim;
21649|  32.6k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1697|  32.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 530, False: 32.1k]
  |  |  ------------------
  ------------------
21650|    530|                {
21651|    530|                    return false;
21652|    530|                }
21653|  32.1k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (21653:21): [True: 2.83k, False: 29.2k]
  |  Branch (21653:41): [True: 11.3k, False: 17.9k]
  |  Branch (21653:60): [True: 405, False: 10.9k]
  ------------------
21654|  2.18k|                {
21655|  2.18k|                    result = dim.at(dim.size() - 1);
21656|  2.18k|                    return true;
21657|  2.18k|                }
21658|  29.9k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (21658:21): [True: 21.2k, False: 8.73k]
  ------------------
21659|  21.2k|                {
21660|  21.2k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (21660:33): [True: 60.5k, False: 20.7k]
  ------------------
21661|  60.5k|                    {
21662|  60.5k|                        if ( i == 0 )
  ------------------
  |  Branch (21662:30): [True: 468, False: 60.1k]
  ------------------
21663|    468|                        {
21664|    468|                            result = 0;
21665|    468|                            return true;
21666|    468|                        }
21667|  60.5k|                    }
21668|       |
21669|  20.7k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1697|  20.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 20.7k]
  |  |  ------------------
  ------------------
21670|      0|                    {
21671|      0|                        return false;
21672|      0|                    }
21673|       |
21674|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
21675|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
21676|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
21677|  20.7k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (21677:25): [True: 20.2k, False: 471]
  ------------------
21678|  20.2k|                    {
21679|       |                        // every optimized type marker is_valid_optimized_type() accepts for BJData has a name
21680|  20.2k|                        const char* type_name = bjd_type_name(ndarray_dtype);
21681|  20.2k|                        JSON_ASSERT(type_name != nullptr);
  ------------------
  |  | 2643|  20.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (21681:25): [True: 20.2k, False: 0]
  ------------------
21682|       |
21683|  20.2k|                        string_t type_key = "_ArrayType_";
21684|  20.2k|                        string_t type = type_name; // sax->string() takes a reference
21685|  20.2k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1697|  40.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 20.2k]
  |  |  |  Branch (1697:94): [True: 0, False: 20.2k]
  |  |  |  Branch (1697:94): [True: 0, False: 20.2k]
  |  |  ------------------
  ------------------
21686|      0|                        {
21687|      0|                            return false;
21688|      0|                        }
21689|  20.2k|                    }
21690|       |
21691|  20.7k|                    string_t key = "_ArraySize_";
21692|  20.7k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1697|  41.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 20.7k]
  |  |  |  Branch (1697:94): [True: 0, False: 20.7k]
  |  |  |  Branch (1697:94): [True: 0, False: 20.7k]
  |  |  ------------------
  ------------------
21693|      0|                    {
21694|      0|                        return false;
21695|      0|                    }
21696|  20.7k|                    result = 1;
21697|  20.7k|                    for (auto i : dim)
  ------------------
  |  Branch (21697:33): [True: 58.0k, False: 20.5k]
  ------------------
21698|  58.0k|                    {
21699|       |                        // Pre-multiplication overflow check: since the loop above
21700|       |                        // already rejected any zero dimension, i is always > 0
21701|       |                        // here, so result > SIZE_MAX/i means result*i would
21702|       |                        // overflow. This check must happen before multiplication
21703|       |                        // since overflow detection after the fact is unreliable,
21704|       |                        // as modular arithmetic can produce any value, not just 0
21705|       |                        // or SIZE_MAX.
21706|  58.0k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1697|  58.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 153, False: 57.8k]
  |  |  ------------------
  ------------------
21707|    153|                        {
21708|    153|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21709|    153|                        }
21710|  57.8k|                        result *= i;
21711|       |                        // the pre-check above already rules out result becoming 0
21712|       |                        // by overflow; the only value it cannot rule out is an
21713|       |                        // exact match with npos, the sentinel reserved for an
21714|       |                        // unknown-size container (see get_ubjson_size_type())
21715|  57.8k|                        if (result == npos)
  ------------------
  |  Branch (21715:29): [True: 0, False: 57.8k]
  ------------------
21716|      0|                        {
21717|      0|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21718|      0|                        }
21719|  57.8k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1697|  57.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 57.8k]
  |  |  ------------------
  ------------------
21720|      0|                        {
21721|      0|                            return false;
21722|      0|                        }
21723|  57.8k|                    }
21724|  20.5k|                    is_ndarray = true;
21725|  20.5k|                    return sax->end_array();
21726|  20.7k|                }
21727|  8.73k|                result = 0;
21728|  8.73k|                return true;
21729|  29.9k|            }
21730|       |
21731|    777|            default:
  ------------------
  |  Branch (21731:13): [True: 777, False: 350k]
  ------------------
21732|    777|                break;
21733|   351k|        }
21734|    777|        return length_type_error(" after '#'", "size");
21735|   351k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE23get_ubjson_signed_countIaEEbRm:
21526|   262k|    {
21527|   262k|        SignedType number{};
21528|   262k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|   262k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 23, False: 262k]
  |  |  ------------------
  ------------------
21529|     23|        {
21530|     23|            return false;
21531|     23|        }
21532|   262k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|   262k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 18, False: 262k]
  |  |  ------------------
  ------------------
21533|     18|        {
21534|     18|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     18|        }
21536|   262k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|   262k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 262k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|   262k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|   262k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE23get_ubjson_signed_countIsEEbRm:
21526|  4.87k|    {
21527|  4.87k|        SignedType number{};
21528|  4.87k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  4.87k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 42, False: 4.83k]
  |  |  ------------------
  ------------------
21529|     42|        {
21530|     42|            return false;
21531|     42|        }
21532|  4.83k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  4.83k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 21, False: 4.81k]
  |  |  ------------------
  ------------------
21533|     21|        {
21534|     21|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     21|        }
21536|  4.81k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  4.81k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 4.81k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  4.81k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  4.81k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE23get_ubjson_signed_countIiEEbRm:
21526|  2.54k|    {
21527|  2.54k|        SignedType number{};
21528|  2.54k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  2.54k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 32, False: 2.51k]
  |  |  ------------------
  ------------------
21529|     32|        {
21530|     32|            return false;
21531|     32|        }
21532|  2.51k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  2.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 102, False: 2.41k]
  |  |  ------------------
  ------------------
21533|    102|        {
21534|    102|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|    102|        }
21536|  2.41k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  2.41k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.41k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  2.41k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  2.41k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE23get_ubjson_signed_countIlEEbRm:
21526|  2.23k|    {
21527|  2.23k|        SignedType number{};
21528|  2.23k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  2.23k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 46, False: 2.18k]
  |  |  ------------------
  ------------------
21529|     46|        {
21530|     46|            return false;
21531|     46|        }
21532|  2.18k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  2.18k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 201, False: 1.98k]
  |  |  ------------------
  ------------------
21533|    201|        {
21534|    201|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|    201|        }
21536|  1.98k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  1.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.98k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  1.98k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  1.98k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18store_ubjson_countEmRm:
21501|   276k|    {
21502|   276k|        if (JSON_HEDLEY_UNLIKELY(count == npos))
  ------------------
  |  | 1697|   276k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 3, False: 276k]
  |  |  ------------------
  ------------------
21503|      3|        {
21504|      3|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21505|      3|        }
21506|   276k|        result = count;
21507|   276k|        return true;
21508|   276k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
21439|  32.6k|    {
21440|  32.6k|        std::pair<std::size_t, char_int_type> size_and_type;
21441|  32.6k|        size_t dimlen = 0;
21442|  32.6k|        bool no_ndarray = true;
21443|       |
21444|  32.6k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1697|  32.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 62, False: 32.5k]
  |  |  ------------------
  ------------------
21445|     62|        {
21446|     62|            return false;
21447|     62|        }
21448|       |
21449|  32.5k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (21449:13): [True: 11.0k, False: 21.5k]
  ------------------
21450|  11.0k|        {
21451|  11.0k|            if (size_and_type.second != 0)
  ------------------
  |  Branch (21451:17): [True: 6.20k, False: 4.88k]
  ------------------
21452|  6.20k|            {
21453|  40.5k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21453:41): [True: 34.6k, False: 5.94k]
  ------------------
21454|  34.6k|                {
21455|  34.6k|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1697|  34.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 253, False: 34.3k]
  |  |  ------------------
  ------------------
21456|    253|                    {
21457|    253|                        return false;
21458|    253|                    }
21459|  34.3k|                    dim.push_back(dimlen);
21460|  34.3k|                }
21461|  6.20k|            }
21462|  4.88k|            else
21463|  4.88k|            {
21464|  18.1k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21464:41): [True: 13.4k, False: 4.76k]
  ------------------
21465|  13.4k|                {
21466|  13.4k|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1697|  13.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 120, False: 13.3k]
  |  |  ------------------
  ------------------
21467|    120|                    {
21468|    120|                        return false;
21469|    120|                    }
21470|  13.3k|                    dim.push_back(dimlen);
21471|  13.3k|                }
21472|  4.88k|            }
21473|  11.0k|        }
21474|  21.5k|        else
21475|  21.5k|        {
21476|  60.8k|            while (current != ']')
  ------------------
  |  Branch (21476:20): [True: 39.4k, False: 21.4k]
  ------------------
21477|  39.4k|            {
21478|  39.4k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1697|  39.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 95, False: 39.3k]
  |  |  ------------------
  ------------------
21479|     95|                {
21480|     95|                    return false;
21481|     95|                }
21482|  39.3k|                dim.push_back(dimlen);
21483|  39.3k|                get_ignore_noop();
21484|  39.3k|            }
21485|  21.5k|        }
21486|  32.1k|        return true;
21487|  32.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE20get_ubjson_size_typeERNS4_4pairImmEEb:
21749|   615k|    {
21750|   615k|        result.first = npos; // size
21751|   615k|        result.second = 0; // type
21752|       |        // seed the flag with the caller's context: inside an ndarray dimension
21753|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
21754|       |        // rejects it up front instead of reading it and reporting afterwards.
21755|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
21756|       |        // another level, which overflowed the stack (see #5104).
21757|   615k|        bool is_ndarray = inside_ndarray;
21758|       |
21759|   615k|        get_ignore_noop();
21760|       |
21761|   615k|        if (current == '$')
  ------------------
  |  Branch (21761:13): [True: 58.6k, False: 556k]
  ------------------
21762|  58.6k|        {
21763|  58.6k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
21764|  58.6k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1697|  58.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 58.6k]
  |  |  ------------------
  ------------------
21765|      5|            {
21766|      5|                return false;
21767|      5|            }
21768|       |
21769|       |            // validate the type marker up front: otherwise it would only be
21770|       |            // checked when an element is read, and a container with count 0
21771|       |            // would accept any marker
21772|  58.6k|            if (JSON_HEDLEY_UNLIKELY(!is_valid_optimized_type(result.second)))
  ------------------
  |  | 1697|  58.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 48, False: 58.6k]
  |  |  ------------------
  ------------------
21773|     48|            {
21774|     48|                return optimized_type_error();
21775|     48|            }
21776|       |
21777|  58.6k|            get_ignore_noop();
21778|  58.6k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1697|  58.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 309, False: 58.3k]
  |  |  ------------------
  ------------------
21779|    309|            {
21780|    309|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|    309|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 80, False: 229]
  |  |  ------------------
  ------------------
21781|     80|                {
21782|     80|                    return false;
21783|     80|                }
21784|    229|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
21785|    309|            }
21786|       |
21787|  58.3k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
21788|       |            // an ndarray was read here only if the flag flipped; when it was
21789|       |            // seeded true, get_ubjson_size_value() already rejected the nested
21790|       |            // dimension vector
21791|  58.3k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21791:17): [True: 26.4k, False: 31.8k]
  |  Branch (21791:31): [True: 20.2k, False: 6.20k]
  ------------------
21792|  20.2k|            {
21793|  20.2k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
21794|  20.2k|            }
21795|  58.3k|            return is_error;
21796|  58.6k|        }
21797|       |
21798|   556k|        if (current == '#')
  ------------------
  |  Branch (21798:13): [True: 183k, False: 373k]
  ------------------
21799|   183k|        {
21800|   183k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
21801|   183k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21801:17): [True: 5.21k, False: 177k]
  |  Branch (21801:31): [True: 327, False: 4.88k]
  ------------------
21802|    327|            {
21803|    327|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
21804|    327|            }
21805|   182k|            return is_error;
21806|   183k|        }
21807|       |
21808|   373k|        return true;
21809|   556k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE23is_valid_optimized_typeEm:
23505|  58.6k|    {
23506|  58.6k|        switch (marker)
23507|  58.6k|        {
23508|  12.1k|            case 'i':
  ------------------
  |  Branch (23508:13): [True: 12.1k, False: 46.5k]
  ------------------
23509|  18.4k|            case 'U':
  ------------------
  |  Branch (23509:13): [True: 6.32k, False: 52.3k]
  ------------------
23510|  21.3k|            case 'I':
  ------------------
  |  Branch (23510:13): [True: 2.88k, False: 55.7k]
  ------------------
23511|  25.0k|            case 'l':
  ------------------
  |  Branch (23511:13): [True: 3.65k, False: 55.0k]
  ------------------
23512|  28.0k|            case 'L':
  ------------------
  |  Branch (23512:13): [True: 3.03k, False: 55.6k]
  ------------------
23513|  30.4k|            case 'd':
  ------------------
  |  Branch (23513:13): [True: 2.45k, False: 56.2k]
  ------------------
23514|  34.7k|            case 'D':
  ------------------
  |  Branch (23514:13): [True: 4.20k, False: 54.4k]
  ------------------
23515|  36.6k|            case 'C':
  ------------------
  |  Branch (23515:13): [True: 1.97k, False: 56.7k]
  ------------------
23516|  36.6k|                return true;
23517|      3|            case 'Z':
  ------------------
  |  Branch (23517:13): [True: 3, False: 58.6k]
  ------------------
23518|      6|            case 'N':
  ------------------
  |  Branch (23518:13): [True: 3, False: 58.6k]
  ------------------
23519|      9|            case 'T':
  ------------------
  |  Branch (23519:13): [True: 3, False: 58.6k]
  ------------------
23520|     12|            case 'F':
  ------------------
  |  Branch (23520:13): [True: 3, False: 58.6k]
  ------------------
23521|     15|            case 'H':
  ------------------
  |  Branch (23521:13): [True: 3, False: 58.6k]
  ------------------
23522|     18|            case 'S':
  ------------------
  |  Branch (23522:13): [True: 3, False: 58.6k]
  ------------------
23523|     24|            case '[':
  ------------------
  |  Branch (23523:13): [True: 6, False: 58.6k]
  ------------------
23524|     27|            case '{':
  ------------------
  |  Branch (23524:13): [True: 3, False: 58.6k]
  ------------------
23525|     27|                return input_format != input_format_t::bjdata;
23526|  10.5k|            case 'B':
  ------------------
  |  Branch (23526:13): [True: 10.5k, False: 48.1k]
  ------------------
23527|  13.6k|            case 'u':
  ------------------
  |  Branch (23527:13): [True: 3.12k, False: 55.5k]
  ------------------
23528|  16.5k|            case 'm':
  ------------------
  |  Branch (23528:13): [True: 2.89k, False: 55.7k]
  ------------------
23529|  19.4k|            case 'M':
  ------------------
  |  Branch (23529:13): [True: 2.82k, False: 55.8k]
  ------------------
23530|  21.9k|            case 'h':
  ------------------
  |  Branch (23530:13): [True: 2.54k, False: 56.1k]
  ------------------
23531|  21.9k|                return input_format == input_format_t::bjdata;
23532|     21|            default:
  ------------------
  |  Branch (23532:13): [True: 21, False: 58.6k]
  ------------------
23533|     21|                return false;
23534|  58.6k|        }
23535|  58.6k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE20optimized_type_errorEv:
23366|     48|    {
23367|     48|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
23368|     48|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA10_KcS9_RA41_SA_EEET_DpOT0_:
 5516|     96|{
 5517|     96|    OutStringType str;
 5518|     96|    str.reserve(concat_length(args...));
 5519|     96|    concat_into(str, std::forward<Args>(args)...);
 5520|     96|    return str;
 5521|     96|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA41_cEEEmPKcDpRKT_:
 5420|     96|{
 5421|     96|    return ::strlen(cstr) + concat_length(rest...);
 5422|     96|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA41_cEEEmRKT_DpRKT0_:
 5426|     96|{
 5427|     96|    return str.size() + concat_length(rest...);
 5428|     96|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA10_KcJS9_RA41_SA_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|     96|{
 5480|     96|    out.append(std::forward<Arg>(arg));
 5481|     96|    concat_into(out, std::forward<Args>(rest)...);
 5482|     96|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA41_KcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|     96|{
 5480|     96|    out.append(std::forward<Arg>(arg));
 5481|     96|    concat_into(out, std::forward<Args>(rest)...);
 5482|     96|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA41_KcJETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|     96|{
 5480|     96|    out.append(std::forward<Arg>(arg));
 5481|     96|    concat_into(out, std::forward<Args>(rest)...);
 5482|     96|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE13bjd_type_nameEm:
23546|  20.2k|    {
23547|  20.2k|        switch (marker)
23548|  20.2k|        {
23549|  1.20k|            case 'B':
  ------------------
  |  Branch (23549:13): [True: 1.20k, False: 19.0k]
  ------------------
23550|  1.20k|                return "byte";
23551|  1.38k|            case 'C':
  ------------------
  |  Branch (23551:13): [True: 1.38k, False: 18.8k]
  ------------------
23552|  1.38k|                return "char";
23553|  1.49k|            case 'D':
  ------------------
  |  Branch (23553:13): [True: 1.49k, False: 18.7k]
  ------------------
23554|  1.49k|                return "double";
23555|  1.44k|            case 'I':
  ------------------
  |  Branch (23555:13): [True: 1.44k, False: 18.8k]
  ------------------
23556|  1.44k|                return "int16";
23557|  1.16k|            case 'L':
  ------------------
  |  Branch (23557:13): [True: 1.16k, False: 19.1k]
  ------------------
23558|  1.16k|                return "int64";
23559|    908|            case 'M':
  ------------------
  |  Branch (23559:13): [True: 908, False: 19.3k]
  ------------------
23560|    908|                return "uint64";
23561|  2.22k|            case 'U':
  ------------------
  |  Branch (23561:13): [True: 2.22k, False: 18.0k]
  ------------------
23562|  2.22k|                return "uint8";
23563|  1.48k|            case 'd':
  ------------------
  |  Branch (23563:13): [True: 1.48k, False: 18.7k]
  ------------------
23564|  1.48k|                return "single";
23565|    615|            case 'h':
  ------------------
  |  Branch (23565:13): [True: 615, False: 19.6k]
  ------------------
23566|    615|                return "half";
23567|  3.01k|            case 'i':
  ------------------
  |  Branch (23567:13): [True: 3.01k, False: 17.2k]
  ------------------
23568|  3.01k|                return "int8";
23569|  1.82k|            case 'l':
  ------------------
  |  Branch (23569:13): [True: 1.82k, False: 18.4k]
  ------------------
23570|  1.82k|                return "int32";
23571|  1.72k|            case 'm':
  ------------------
  |  Branch (23571:13): [True: 1.72k, False: 18.5k]
  ------------------
23572|  1.72k|                return "uint32";
23573|  1.77k|            case 'u':
  ------------------
  |  Branch (23573:13): [True: 1.77k, False: 18.4k]
  ------------------
23574|  1.77k|                return "uint16";
23575|      0|            default:
  ------------------
  |  Branch (23575:13): [True: 0, False: 20.2k]
  ------------------
23576|      0|                return nullptr;
23577|  20.2k|        }
23578|  20.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17length_type_errorEPKcSP_:
23433|    987|    {
23434|    987|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (23434:29): [True: 987, False: 0]
  ------------------
23435|    987|        return last_byte_error(exception_id::invalid_string_or_size,
23436|    987|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
23437|    987|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA37_KcRPSA_RA2_SA_SE_RA16_SA_S9_EEET_DpOT0_:
 5516|  1.97k|{
 5517|  1.97k|    OutStringType str;
 5518|  1.97k|    str.reserve(concat_length(args...));
 5519|  1.97k|    concat_into(str, std::forward<Args>(args)...);
 5520|  1.97k|    return str;
 5521|  1.97k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJPKcA2_cS4_A16_cNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEEEEmS4_DpRKT_:
 5420|  1.97k|{
 5421|  1.97k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  1.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA2_cPKcA16_cNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEEEEmS5_DpRKT_:
 5420|  1.97k|{
 5421|  1.97k|    return ::strlen(cstr) + concat_length(rest...);
 5422|  1.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA37_KcJRPSA_RA2_SA_SE_RA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSK_OSL_DpOT1_:
 5479|  1.97k|{
 5480|  1.97k|    out.append(std::forward<Arg>(arg));
 5481|  1.97k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA2_SA_SC_RA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|  1.97k|{
 5480|  1.97k|    out.append(std::forward<Arg>(arg));
 5481|  1.97k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA2_KcJRPSA_RA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|  1.97k|{
 5480|  1.97k|    out.append(std::forward<Arg>(arg));
 5481|  1.97k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  1.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterINSt3__16vectorIcNS3_9allocatorIcEEEETnNS3_9enable_ifIXsr28is_contiguous_byte_containerIT_EE5valueEiE4typeELi0EEEDTcl13input_adaptercldtfp_4dataEplcldtfp_4dataEcldtfp_4sizeEEERKS9_:
10700|  43.1k|{
10701|  43.1k|    return input_adapter(container.data(), container.data() + container.size());
10702|  43.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterIPKcS4_vEENS1_30iterator_input_adapter_factoryIT_T0_vE12adapter_typeES6_S7_:
10603|  43.1k|{
10604|  43.1k|    using factory_type = iterator_input_adapter_factory<IteratorType, SentinelType>;
10605|  43.1k|    return factory_type::create(first, last);
10606|  43.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail30iterator_input_adapter_factoryIPKcS4_vE6createES4_S4_:
10465|  43.1k|    {
10466|  43.1k|        return adapter_type(std::move(first), std::move(last));
10467|  43.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_EC2ES4_S4_:
10116|  43.1k|        : begin(first), current(std::move(first)), end(std::move(last))
10117|  43.1k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EEC2EOSK_b:
13646|  43.1k|        : ia(std::move(adapter))
13647|  43.1k|        , ignore_comments(ignore_comments_)
13648|  43.1k|    {
13649|       |        // the token string of an error before the first token is everything
13650|       |        // read so far
13651|  43.1k|        begin_token(std::integral_constant<bool, adapter_token> {});
13652|  43.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE11begin_tokenENS4_17integral_constantIbLb0EEE:
15211|  43.1k|    void begin_token(std::false_type /*adapter_token*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE4scanEv:
15753|  86.3k|    {
15754|       |        // initially, skip the BOM
15755|  86.3k|        if (get_chars_read_total() == 0 && !skip_bom())
  ------------------
  |  Branch (15755:13): [True: 43.1k, False: 43.1k]
  |  Branch (15755:44): [True: 108, False: 43.0k]
  ------------------
15756|    108|        {
15757|    108|            error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given";
15758|    108|            return token_type::parse_error;
15759|    108|        }
15760|       |
15761|       |        // read the next character and ignore whitespace
15762|  86.2k|        skip_whitespace();
15763|       |
15764|  86.2k|        return scan_after_whitespace();
15765|  86.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE20get_chars_read_totalEv:
15504|  86.3k|    {
15505|  86.3k|        return get_chars_read_total_impl(std::integral_constant<bool, lazy_position> {});
15506|  86.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE25get_chars_read_total_implENS4_17integral_constantIbLb1EEE:
15554|  86.3k|    {
15555|  86.3k|        return ia.get_read_count() - (next_unget ? 1u : 0u);
  ------------------
  |  Branch (15555:39): [True: 8.16k, False: 78.2k]
  ------------------
15556|  86.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E14get_read_countEv:
10141|  86.3k|    {
10142|  86.3k|        return get_consumed_count() + eof_reads;
10143|  86.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E18get_consumed_countEv:
10134|   185k|    {
10135|   185k|        return static_cast<std::size_t>(std::distance(begin, current));
10136|   185k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE8skip_bomEv:
15665|  43.1k|    {
15666|  43.1k|        if (get() == 0xEF)
  ------------------
  |  Branch (15666:13): [True: 564, False: 42.6k]
  ------------------
15667|    564|        {
15668|       |            // check if we completely parse the BOM
15669|    564|            return get() == 0xBB && get() == 0xBF;
  ------------------
  |  Branch (15669:20): [True: 510, False: 54]
  |  Branch (15669:37): [True: 456, False: 54]
  ------------------
15670|    564|        }
15671|       |
15672|       |        // the first character is not the beginning of the BOM; unget it to
15673|       |        // process is later
15674|  42.6k|        unget();
15675|  42.6k|        return true;
15676|  43.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE3getEv:
15238|   171k|    {
15239|   171k|        advance_position();
15240|       |
15241|   171k|        if (next_unget)
  ------------------
  |  Branch (15241:13): [True: 50.7k, False: 120k]
  ------------------
15242|  50.7k|        {
15243|       |            // only reset the next_unget variable and work with current
15244|  50.7k|            next_unget = false;
15245|  50.7k|        }
15246|   120k|        else
15247|   120k|        {
15248|   120k|            current = ia.get_character();
15249|   120k|        }
15250|       |
15251|   171k|        return track_after_read();
15252|   171k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16advance_positionEv:
15258|   190k|    {
15259|   190k|        advance_position_impl(std::integral_constant<bool, lazy_position> {});
15260|   190k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE21advance_position_implENS4_17integral_constantIbLb1EEE:
15263|   190k|    void advance_position_impl(std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E13get_characterEv:
10120|   130k|    {
10121|   130k|        if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|   130k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 91.5k, False: 38.5k]
  |  |  ------------------
  ------------------
10122|  91.5k|        {
10123|  91.5k|            auto result = char_traits<char_type>::to_int_type(*current);
10124|  91.5k|            std::advance(current, 1);
10125|  91.5k|            return result;
10126|  91.5k|        }
10127|       |
10128|  38.5k|        ++eof_reads;
10129|  38.5k|        return char_traits<char_type>::eof();
10130|   130k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16track_after_readEv:
15276|   190k|    {
15277|       |        // seekable adapters reconstruct the token lazily on error (see
15278|       |        // get_token_string), so the eager per-character copy is skipped
15279|   190k|        capture_char(std::integral_constant<bool, lazy_token_string> {});
15280|   190k|        track_newline(std::integral_constant<bool, lazy_position> {});
15281|   190k|        return current;
15282|   190k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE12capture_charENS4_17integral_constantIbLb1EEE:
15324|   190k|    void capture_char(std::true_type /*lazy*/) const noexcept {}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE13track_newlineENS4_17integral_constantIbLb1EEE:
15285|   190k|    void track_newline(std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE5ungetEv:
15345|  51.0k|    {
15346|  51.0k|        next_unget = true;
15347|  51.0k|        unget_position(std::integral_constant<bool, lazy_position> {});
15348|  51.0k|        uncapture_char(std::integral_constant<bool, lazy_token_string> {});
15349|  51.0k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE14unget_positionENS4_17integral_constantIbLb1EEE:
15352|  51.0k|    void unget_position(std::true_type /*lazy*/) const noexcept {}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE14uncapture_charENS4_17integral_constantIbLb1EEE:
15397|  51.0k|    void uncapture_char(std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE15skip_whitespaceEv:
15685|  86.2k|    {
15686|       |        // the first character may be a pending unget() left over from the
15687|       |        // previous token (see get_ignoring_pending_unget()); every
15688|       |        // subsequent character read by this loop is guaranteed fresh, since
15689|       |        // nothing below calls unget()
15690|  86.2k|        get();
15691|       |
15692|  86.2k|        if (!current_is_whitespace())
  ------------------
  |  Branch (15692:13): [True: 81.3k, False: 4.95k]
  ------------------
15693|  81.3k|        {
15694|  81.3k|            return;
15695|  81.3k|        }
15696|       |
15697|       |        // this is written as an if-guarded do-while (rather than a plain
15698|       |        // while loop) because that shape is what lets both GCC and Clang
15699|       |        // keep the input adapter's read pointer in a register across
15700|       |        // iterations; the equivalent while-loop measurably defeated that
15701|       |        // optimization in testing, turning long whitespace runs (e.g. the
15702|       |        // indentation of pretty-printed JSON) from a register-only loop
15703|       |        // into one that reloads the pointer from memory every character
15704|  4.95k|        do
15705|  9.75k|        {
15706|  9.75k|            if (current == '\n')
  ------------------
  |  Branch (15706:17): [True: 2.76k, False: 6.99k]
  ------------------
15707|  2.76k|            {
15708|  2.76k|                skip_indentation(std::integral_constant<bool, bulk_scan> {});
15709|  2.76k|            }
15710|  9.75k|            get_ignoring_pending_unget();
15711|  9.75k|        }
15712|  9.75k|        while (current_is_whitespace());
  ------------------
  |  Branch (15712:16): [True: 4.80k, False: 4.95k]
  ------------------
15713|  4.95k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE21current_is_whitespaceEv:
15680|  96.0k|    {
15681|  96.0k|        return current == ' ' || current == '\t' || current == '\n' || current == '\r';
  ------------------
  |  Branch (15681:16): [True: 3.10k, False: 92.9k]
  |  Branch (15681:34): [True: 1.68k, False: 91.2k]
  |  Branch (15681:53): [True: 2.76k, False: 88.4k]
  |  Branch (15681:72): [True: 2.20k, False: 86.2k]
  ------------------
15682|  96.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16skip_indentationENS4_17integral_constantIbLb1EEE:
15726|  2.76k|    {
15727|  2.76k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2643|  2.76k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15727:9): [True: 2.76k, False: 0]
  ------------------
15728|  2.76k|        const std::size_t remaining = ia.bulk_remaining();
15729|  2.76k|        if (remaining < 8)
  ------------------
  |  Branch (15729:13): [True: 1.13k, False: 1.62k]
  ------------------
15730|  1.13k|        {
15731|  1.13k|            return;
15732|  1.13k|        }
15733|  1.62k|        const char* const data = reinterpret_cast<const char*>(ia.bulk_data());
15734|  1.62k|        std::size_t pos = 0;
15735|  2.31k|        for (; pos + 8 <= remaining; pos += 8)
  ------------------
  |  Branch (15735:16): [True: 2.07k, False: 240]
  ------------------
15736|  2.07k|        {
15737|       |            // little-endian, so the first byte is the lowest
15738|  2.07k|            const std::uint64_t non_space = read_eight_bytes(data + pos) ^ 0x2020202020202020ull;
15739|  2.07k|            if (non_space != 0)
  ------------------
  |  Branch (15739:17): [True: 1.38k, False: 690]
  ------------------
15740|  1.38k|            {
15741|       |                // skip the spaces before the first other byte of this word
15742|  1.38k|                pos += static_cast<std::size_t>(count_trailing_zeros(non_space)) / 8;
15743|  1.38k|                break;
15744|  1.38k|            }
15745|  2.07k|        }
15746|  1.62k|        bulk_consume(data, pos);
15747|  1.62k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E14bulk_remainingEv:
10218|  55.1k|    {
10219|  55.1k|        return remaining_count();
10220|  55.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E15remaining_countEv:
10193|  55.1k|    {
10194|       |#if JSON_HAS_RANGES && defined(__cpp_lib_concepts) && defined(JSON_HAS_CPP_20)
10195|       |        // std::ranges::distance also supports sized sentinels of a different
10196|       |        // type (e.g. std::counted_iterator + std::default_sentinel_t)
10197|       |        return static_cast<std::size_t>(std::ranges::distance(current, end));
10198|       |#else
10199|  55.1k|        return static_cast<std::size_t>(std::distance(current, end));
10200|  55.1k|#endif
10201|  55.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E9bulk_dataEv:
10212|  44.5k|    {
10213|  44.5k|        return &*current;
10214|  44.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail16read_eight_bytesEPKc:
 9164|  63.3k|{
 9165|  63.3k|    return read_eight_bytes(reinterpret_cast<const unsigned char*>(p)); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
 9166|  63.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE12bulk_consumeESJ_m:
13844|  35.1k|    {
13845|  35.1k|        bulk_track_position(n, std::integral_constant<bool, lazy_position> {});
13846|  35.1k|        bulk_track_token(data, n, std::integral_constant<bool, lazy_token_string> {});
13847|  35.1k|        ia.bulk_skip(n);
13848|  35.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE19bulk_track_positionEmNS4_17integral_constantIbLb1EEE:
13851|  35.1k|    void bulk_track_position(std::size_t /*n*/, std::true_type /*lazy*/) const noexcept {}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16bulk_track_tokenESJ_mNS4_17integral_constantIbLb1EEE:
13861|  35.1k|    void bulk_track_token(const char* /*data*/, std::size_t /*n*/, std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E9bulk_skipEm:
10224|  44.3k|    {
10225|  44.3k|        std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(n));
10226|  44.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE26get_ignoring_pending_ungetEv:
15314|  9.75k|    {
15315|  9.75k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2643|  9.75k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15315:9): [True: 9.75k, False: 0]
  ------------------
15316|       |
15317|  9.75k|        advance_position();
15318|  9.75k|        current = ia.get_character();
15319|       |
15320|  9.75k|        return track_after_read();
15321|  9.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE21scan_after_whitespaceEv:
15796|  86.2k|    {
15797|       |        // ignore comments
15798|  86.2k|        while (ignore_comments && current == '/')
  ------------------
  |  Branch (15798:16): [True: 0, False: 86.2k]
  |  Branch (15798:35): [True: 0, False: 0]
  ------------------
15799|      0|        {
15800|      0|            if (!scan_comment())
  ------------------
  |  Branch (15800:17): [True: 0, False: 0]
  ------------------
15801|      0|            {
15802|      0|                return token_type::parse_error;
15803|      0|            }
15804|       |
15805|       |            // skip following whitespace
15806|      0|            skip_whitespace();
15807|      0|        }
15808|       |
15809|  86.2k|        switch (current)
15810|  86.2k|        {
15811|       |            // structural characters
15812|    546|            case '[':
  ------------------
  |  Branch (15812:13): [True: 546, False: 85.7k]
  ------------------
15813|    546|                return token_type::begin_array;
15814|    132|            case ']':
  ------------------
  |  Branch (15814:13): [True: 132, False: 86.1k]
  ------------------
15815|    132|                return token_type::end_array;
15816|     54|            case '{':
  ------------------
  |  Branch (15816:13): [True: 54, False: 86.2k]
  ------------------
15817|     54|                return token_type::begin_object;
15818|     42|            case '}':
  ------------------
  |  Branch (15818:13): [True: 42, False: 86.2k]
  ------------------
15819|     42|                return token_type::end_object;
15820|     66|            case ':':
  ------------------
  |  Branch (15820:13): [True: 66, False: 86.2k]
  ------------------
15821|     66|                return token_type::name_separator;
15822|    120|            case ',':
  ------------------
  |  Branch (15822:13): [True: 120, False: 86.1k]
  ------------------
15823|    120|                return token_type::value_separator;
15824|       |
15825|       |            // literals
15826|       |            // (the text after the first character; no local arrays, which
15827|       |            // would give this function a stack canary on every token)
15828|    228|            case 't':
  ------------------
  |  Branch (15828:13): [True: 228, False: 86.0k]
  ------------------
15829|    228|                return scan_literal("rue", token_type::literal_true);
15830|    186|            case 'f':
  ------------------
  |  Branch (15830:13): [True: 186, False: 86.0k]
  ------------------
15831|    186|                return scan_literal("alse", token_type::literal_false);
15832|    162|            case 'n':
  ------------------
  |  Branch (15832:13): [True: 162, False: 86.1k]
  ------------------
15833|    162|                return scan_literal("ull", token_type::literal_null);
15834|       |
15835|       |            // string
15836|  4.35k|            case '\"':
  ------------------
  |  Branch (15836:13): [True: 4.35k, False: 81.9k]
  ------------------
15837|       |                // accept() (DiscardValues) checks strings without copying them
15838|       |                // into token_buffer
15839|  4.35k|                return scan_string(keep_strings {});
15840|       |
15841|       |            // number
15842|  4.39k|            case '-':
  ------------------
  |  Branch (15842:13): [True: 4.39k, False: 81.8k]
  ------------------
15843|  9.93k|            case '0':
  ------------------
  |  Branch (15843:13): [True: 5.53k, False: 80.7k]
  ------------------
15844|  16.5k|            case '1':
  ------------------
  |  Branch (15844:13): [True: 6.66k, False: 79.6k]
  ------------------
15845|  21.9k|            case '2':
  ------------------
  |  Branch (15845:13): [True: 5.31k, False: 80.9k]
  ------------------
15846|  24.6k|            case '3':
  ------------------
  |  Branch (15846:13): [True: 2.71k, False: 83.5k]
  ------------------
15847|  28.0k|            case '4':
  ------------------
  |  Branch (15847:13): [True: 3.47k, False: 82.8k]
  ------------------
15848|  30.1k|            case '5':
  ------------------
  |  Branch (15848:13): [True: 2.03k, False: 84.2k]
  ------------------
15849|  32.1k|            case '6':
  ------------------
  |  Branch (15849:13): [True: 1.99k, False: 84.2k]
  ------------------
15850|  34.2k|            case '7':
  ------------------
  |  Branch (15850:13): [True: 2.09k, False: 84.1k]
  ------------------
15851|  36.1k|            case '8':
  ------------------
  |  Branch (15851:13): [True: 1.92k, False: 84.3k]
  ------------------
15852|  39.7k|            case '9':
  ------------------
  |  Branch (15852:13): [True: 3.58k, False: 82.6k]
  ------------------
15853|  39.7k|                return scan_number_dispatch(std::integral_constant<bool, bulk_scan> {});
15854|       |
15855|      0|#if !JSON_STRICT_NUL_HANDLING
15856|      0|            case '\0':
  ------------------
  |  Branch (15856:13): [True: 0, False: 86.2k]
  ------------------
15857|      0|#endif
15858|       |            // end of input; by default, a null byte is also treated as end of
15859|       |            // input for backwards compatibility (see JSON_STRICT_NUL_HANDLING
15860|       |            // to opt into rejecting a null byte in the input instead)
15861|  35.4k|            case char_traits<char_type>::eof():
  ------------------
  |  Branch (15861:13): [True: 35.4k, False: 50.8k]
  ------------------
15862|  35.4k|                return token_type::end_of_input;
15863|       |
15864|       |            // error
15865|  5.22k|            default:
  ------------------
  |  Branch (15865:13): [True: 5.22k, False: 81.0k]
  ------------------
15866|  5.22k|                error_message = "invalid literal";
15867|  5.22k|                return token_type::parse_error;
15868|  86.2k|        }
15869|  86.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE12scan_literalILm4EEENS1_10lexer_baseISG_E10token_typeERAT__SI_SP_:
15132|    390|    {
15133|    390|        constexpr std::size_t length = N - 1;
15134|    390|        if (scan_literal_bulk(rest, length, std::integral_constant<bool, bulk_scan> {}))
  ------------------
  |  Branch (15134:13): [True: 18, False: 372]
  ------------------
15135|     18|        {
15136|     18|            return return_type;
15137|     18|        }
15138|    564|        for (std::size_t i = 0; i < length; ++i)
  ------------------
  |  Branch (15138:33): [True: 564, False: 0]
  ------------------
15139|    564|        {
15140|    564|            if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != static_cast<char_type>(rest[i])))
  ------------------
  |  | 1697|    564|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 372, False: 192]
  |  |  ------------------
  ------------------
15141|    372|            {
15142|    372|                error_message = "invalid literal";
15143|    372|                return token_type::parse_error;
15144|    372|            }
15145|    564|        }
15146|      0|        return return_type;
15147|    372|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE17scan_literal_bulkESJ_mNS4_17integral_constantIbLb1EEE:
15153|    576|    {
15154|       |        // called right after scan_after_whitespace() read current (see
15155|       |        // get_after_string_run()), so no unget is pending
15156|    576|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2643|    576|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15156:9): [True: 576, False: 0]
  ------------------
15157|    576|        if (ia.bulk_remaining() < length
  ------------------
  |  Branch (15157:13): [True: 252, False: 324]
  ------------------
15158|    324|                || std::memcmp(ia.bulk_data(), rest, length) != 0)
  ------------------
  |  Branch (15158:20): [True: 288, False: 36]
  ------------------
15159|    540|        {
15160|    540|            return false;
15161|    540|        }
15162|     36|        bulk_consume(reinterpret_cast<const char*>(ia.bulk_data()), length);
15163|     36|        current = static_cast<char_int_type>(static_cast<unsigned char>(rest[length - 1]));
15164|     36|        return true;
15165|    576|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE12scan_literalILm5EEENS1_10lexer_baseISG_E10token_typeERAT__SI_SP_:
15132|    186|    {
15133|    186|        constexpr std::size_t length = N - 1;
15134|    186|        if (scan_literal_bulk(rest, length, std::integral_constant<bool, bulk_scan> {}))
  ------------------
  |  Branch (15134:13): [True: 18, False: 168]
  ------------------
15135|     18|        {
15136|     18|            return return_type;
15137|     18|        }
15138|    354|        for (std::size_t i = 0; i < length; ++i)
  ------------------
  |  Branch (15138:33): [True: 354, False: 0]
  ------------------
15139|    354|        {
15140|    354|            if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != static_cast<char_type>(rest[i])))
  ------------------
  |  | 1697|    354|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 168, False: 186]
  |  |  ------------------
  ------------------
15141|    168|            {
15142|    168|                error_message = "invalid literal";
15143|    168|                return token_type::parse_error;
15144|    168|            }
15145|    354|        }
15146|      0|        return return_type;
15147|    168|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE11scan_stringILb1EEENS1_10lexer_baseISG_E10token_typeENS4_17integral_constantIbXT_EEE:
13897|  4.35k|    {
13898|       |        // reset token_buffer (ignore opening quote)
13899|  4.35k|        reset();
13900|       |
13901|       |        // we entered the function by reading an open quote
13902|  4.35k|        JSON_ASSERT(current == '\"');
  ------------------
  |  | 2643|  4.35k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13902:9): [True: 4.35k, False: 0]
  ------------------
13903|       |
13904|  10.1k|        while (true)
  ------------------
  |  Branch (13904:16): [True: 10.1k, Folded]
  ------------------
13905|  10.1k|        {
13906|       |            // bulk-consume ordinary characters from contiguous input, then
13907|       |            // get the next character, the one that ends the run
13908|  10.1k|            switch (get_after_string_run(std::integral_constant<bool, bulk_scan>(), keep))
13909|  10.1k|            {
13910|       |                // end of file while parsing the string
13911|    960|                case char_traits<char_type>::eof():
  ------------------
  |  Branch (13911:17): [True: 960, False: 9.15k]
  ------------------
13912|    960|                {
13913|    960|                    error_message = "invalid string: missing closing quote";
13914|    960|                    return token_type::parse_error;
13915|      0|                }
13916|       |
13917|       |                // closing quote
13918|     48|                case '\"':
  ------------------
  |  Branch (13918:17): [True: 48, False: 10.0k]
  ------------------
13919|     48|                {
13920|     48|                    return token_type::value_string;
13921|      0|                }
13922|       |
13923|       |                // escapes
13924|  6.39k|                case '\\':
  ------------------
  |  Branch (13924:17): [True: 6.39k, False: 3.72k]
  ------------------
13925|  6.39k|                {
13926|  6.39k|                    switch (get())
13927|  6.39k|                    {
13928|       |                        // quotation mark
13929|    636|                        case '\"':
  ------------------
  |  Branch (13929:25): [True: 636, False: 5.75k]
  ------------------
13930|    636|                            add_string_char(keep, '\"');
13931|    636|                            break;
13932|       |                        // reverse solidus
13933|  1.65k|                        case '\\':
  ------------------
  |  Branch (13933:25): [True: 1.65k, False: 4.73k]
  ------------------
13934|  1.65k|                            add_string_char(keep, '\\');
13935|  1.65k|                            break;
13936|       |                        // solidus
13937|    228|                        case '/':
  ------------------
  |  Branch (13937:25): [True: 228, False: 6.16k]
  ------------------
13938|    228|                            add_string_char(keep, '/');
13939|    228|                            break;
13940|       |                        // backspace
13941|    204|                        case 'b':
  ------------------
  |  Branch (13941:25): [True: 204, False: 6.18k]
  ------------------
13942|    204|                            add_string_char(keep, '\b');
13943|    204|                            break;
13944|       |                        // form feed
13945|    978|                        case 'f':
  ------------------
  |  Branch (13945:25): [True: 978, False: 5.41k]
  ------------------
13946|    978|                            add_string_char(keep, '\f');
13947|    978|                            break;
13948|       |                        // line feed
13949|    216|                        case 'n':
  ------------------
  |  Branch (13949:25): [True: 216, False: 6.17k]
  ------------------
13950|    216|                            add_string_char(keep, '\n');
13951|    216|                            break;
13952|       |                        // carriage return
13953|    126|                        case 'r':
  ------------------
  |  Branch (13953:25): [True: 126, False: 6.26k]
  ------------------
13954|    126|                            add_string_char(keep, '\r');
13955|    126|                            break;
13956|       |                        // tab
13957|    564|                        case 't':
  ------------------
  |  Branch (13957:25): [True: 564, False: 5.82k]
  ------------------
13958|    564|                            add_string_char(keep, '\t');
13959|    564|                            break;
13960|       |
13961|       |                        // unicode escapes
13962|  1.65k|                        case 'u':
  ------------------
  |  Branch (13962:25): [True: 1.65k, False: 4.73k]
  ------------------
13963|  1.65k|                        {
13964|  1.65k|                            const int codepoint1 = get_codepoint();
13965|  1.65k|                            int codepoint = codepoint1; // start with codepoint1
13966|       |
13967|  1.65k|                            if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1))
  ------------------
  |  | 1697|  1.65k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 270, False: 1.38k]
  |  |  ------------------
  ------------------
13968|    270|                            {
13969|    270|                                error_message = "invalid string: '\\u' must be followed by 4 hex digits";
13970|    270|                                return token_type::parse_error;
13971|    270|                            }
13972|       |
13973|       |                            // check if code point is a high surrogate
13974|  1.38k|                            if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF)
  ------------------
  |  Branch (13974:33): [True: 900, False: 486]
  |  Branch (13974:57): [True: 420, False: 480]
  ------------------
13975|    420|                            {
13976|       |                                // expect next \uxxxx entry
13977|    420|                                if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u'))
  ------------------
  |  | 1696|    768|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 318, False: 102]
  |  |  |  Branch (1696:94): [True: 348, False: 72]
  |  |  |  Branch (1696:94): [True: 318, False: 30]
  |  |  ------------------
  ------------------
13978|    318|                                {
13979|    318|                                    const int codepoint2 = get_codepoint();
13980|       |
13981|    318|                                    if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1))
  ------------------
  |  | 1697|    318|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 18, False: 300]
  |  |  ------------------
  ------------------
13982|     18|                                    {
13983|     18|                                        error_message = "invalid string: '\\u' must be followed by 4 hex digits";
13984|     18|                                        return token_type::parse_error;
13985|     18|                                    }
13986|       |
13987|       |                                    // check if codepoint2 is a low surrogate
13988|    300|                                    if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF))
  ------------------
  |  | 1696|    534|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 228, False: 72]
  |  |  |  Branch (1696:94): [True: 234, False: 66]
  |  |  |  Branch (1696:94): [True: 228, False: 6]
  |  |  ------------------
  ------------------
13989|    228|                                    {
13990|       |                                        // overwrite codepoint
13991|    228|                                        codepoint = static_cast<int>(
13992|       |                                                        // high surrogate occupies the most significant 22 bits
13993|    228|                                                        (static_cast<unsigned int>(codepoint1) << 10u)
13994|       |                                                        // low surrogate occupies the least significant 15 bits
13995|    228|                                                        + static_cast<unsigned int>(codepoint2)
13996|       |                                                        // there is still the 0xD800, 0xDC00, and 0x10000 noise
13997|       |                                                        // in the result, so we have to subtract with:
13998|       |                                                        // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00
13999|    228|                                                        - 0x35FDC00u);
14000|    228|                                    }
14001|     72|                                    else
14002|     72|                                    {
14003|     72|                                        error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF";
14004|     72|                                        return token_type::parse_error;
14005|     72|                                    }
14006|    300|                                }
14007|    102|                                else
14008|    102|                                {
14009|    102|                                    error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF";
14010|    102|                                    return token_type::parse_error;
14011|    102|                                }
14012|    420|                            }
14013|    966|                            else
14014|    966|                            {
14015|    966|                                if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF))
  ------------------
  |  | 1697|  1.44k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 42, False: 924]
  |  |  |  Branch (1697:94): [True: 480, False: 486]
  |  |  |  Branch (1697:94): [True: 42, False: 438]
  |  |  ------------------
  ------------------
14016|     42|                                {
14017|     42|                                    error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF";
14018|     42|                                    return token_type::parse_error;
14019|     42|                                }
14020|    966|                            }
14021|       |
14022|       |                            // the result of the above calculation yields a proper codepoint
14023|  1.15k|                            JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF);
  ------------------
  |  | 2643|  1.15k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14023:29): [True: 1.15k, False: 0]
  |  Branch (14023:29): [True: 1.15k, False: 0]
  |  Branch (14023:29): [True: 1.15k, False: 0]
  ------------------
14024|       |
14025|       |                            // translate codepoint into bytes
14026|  1.15k|                            add_codepoint(keep, codepoint);
14027|       |
14028|  1.15k|                            break;
14029|  1.15k|                        }
14030|       |
14031|       |                        // other characters after escape
14032|    126|                        default:
  ------------------
  |  Branch (14032:25): [True: 126, False: 6.26k]
  ------------------
14033|    126|                            error_message = "invalid string: forbidden character after backslash";
14034|    126|                            return token_type::parse_error;
14035|  6.39k|                    }
14036|       |
14037|  5.76k|                    break;
14038|  6.39k|                }
14039|       |
14040|       |                // invalid control characters
14041|  5.76k|                case 0x00:
  ------------------
  |  Branch (14041:17): [True: 0, False: 10.1k]
  ------------------
14042|     18|                case 0x01:
  ------------------
  |  Branch (14042:17): [True: 18, False: 10.0k]
  ------------------
14043|     36|                case 0x02:
  ------------------
  |  Branch (14043:17): [True: 18, False: 10.0k]
  ------------------
14044|     60|                case 0x03:
  ------------------
  |  Branch (14044:17): [True: 24, False: 10.0k]
  ------------------
14045|     84|                case 0x04:
  ------------------
  |  Branch (14045:17): [True: 24, False: 10.0k]
  ------------------
14046|    108|                case 0x05:
  ------------------
  |  Branch (14046:17): [True: 24, False: 10.0k]
  ------------------
14047|    126|                case 0x06:
  ------------------
  |  Branch (14047:17): [True: 18, False: 10.0k]
  ------------------
14048|    144|                case 0x07:
  ------------------
  |  Branch (14048:17): [True: 18, False: 10.0k]
  ------------------
14049|    180|                case 0x08:
  ------------------
  |  Branch (14049:17): [True: 36, False: 10.0k]
  ------------------
14050|    198|                case 0x09:
  ------------------
  |  Branch (14050:17): [True: 18, False: 10.0k]
  ------------------
14051|    222|                case 0x0A:
  ------------------
  |  Branch (14051:17): [True: 24, False: 10.0k]
  ------------------
14052|    246|                case 0x0B:
  ------------------
  |  Branch (14052:17): [True: 24, False: 10.0k]
  ------------------
14053|    264|                case 0x0C:
  ------------------
  |  Branch (14053:17): [True: 18, False: 10.0k]
  ------------------
14054|    294|                case 0x0D:
  ------------------
  |  Branch (14054:17): [True: 30, False: 10.0k]
  ------------------
14055|    312|                case 0x0E:
  ------------------
  |  Branch (14055:17): [True: 18, False: 10.0k]
  ------------------
14056|    330|                case 0x0F:
  ------------------
  |  Branch (14056:17): [True: 18, False: 10.0k]
  ------------------
14057|    348|                case 0x10:
  ------------------
  |  Branch (14057:17): [True: 18, False: 10.0k]
  ------------------
14058|    384|                case 0x11:
  ------------------
  |  Branch (14058:17): [True: 36, False: 10.0k]
  ------------------
14059|    402|                case 0x12:
  ------------------
  |  Branch (14059:17): [True: 18, False: 10.0k]
  ------------------
14060|    432|                case 0x13:
  ------------------
  |  Branch (14060:17): [True: 30, False: 10.0k]
  ------------------
14061|    474|                case 0x14:
  ------------------
  |  Branch (14061:17): [True: 42, False: 10.0k]
  ------------------
14062|    498|                case 0x15:
  ------------------
  |  Branch (14062:17): [True: 24, False: 10.0k]
  ------------------
14063|    522|                case 0x16:
  ------------------
  |  Branch (14063:17): [True: 24, False: 10.0k]
  ------------------
14064|    540|                case 0x17:
  ------------------
  |  Branch (14064:17): [True: 18, False: 10.0k]
  ------------------
14065|    564|                case 0x18:
  ------------------
  |  Branch (14065:17): [True: 24, False: 10.0k]
  ------------------
14066|    588|                case 0x19:
  ------------------
  |  Branch (14066:17): [True: 24, False: 10.0k]
  ------------------
14067|    612|                case 0x1A:
  ------------------
  |  Branch (14067:17): [True: 24, False: 10.0k]
  ------------------
14068|    642|                case 0x1B:
  ------------------
  |  Branch (14068:17): [True: 30, False: 10.0k]
  ------------------
14069|    660|                case 0x1C:
  ------------------
  |  Branch (14069:17): [True: 18, False: 10.0k]
  ------------------
14070|    684|                case 0x1D:
  ------------------
  |  Branch (14070:17): [True: 24, False: 10.0k]
  ------------------
14071|    708|                case 0x1E:
  ------------------
  |  Branch (14071:17): [True: 24, False: 10.0k]
  ------------------
14072|    732|                case 0x1F:
  ------------------
  |  Branch (14072:17): [True: 24, False: 10.0k]
  ------------------
14073|    732|                {
14074|    732|                    static const std::array<const char*, 32> control_character_messages = {{
14075|    732|                            "invalid string: control character U+0000 (NUL) must be escaped to \\u0000",
14076|    732|                            "invalid string: control character U+0001 (SOH) must be escaped to \\u0001",
14077|    732|                            "invalid string: control character U+0002 (STX) must be escaped to \\u0002",
14078|    732|                            "invalid string: control character U+0003 (ETX) must be escaped to \\u0003",
14079|    732|                            "invalid string: control character U+0004 (EOT) must be escaped to \\u0004",
14080|    732|                            "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005",
14081|    732|                            "invalid string: control character U+0006 (ACK) must be escaped to \\u0006",
14082|    732|                            "invalid string: control character U+0007 (BEL) must be escaped to \\u0007",
14083|    732|                            "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b",
14084|    732|                            "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t",
14085|    732|                            "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n",
14086|    732|                            "invalid string: control character U+000B (VT) must be escaped to \\u000B",
14087|    732|                            "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f",
14088|    732|                            "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r",
14089|    732|                            "invalid string: control character U+000E (SO) must be escaped to \\u000E",
14090|    732|                            "invalid string: control character U+000F (SI) must be escaped to \\u000F",
14091|    732|                            "invalid string: control character U+0010 (DLE) must be escaped to \\u0010",
14092|    732|                            "invalid string: control character U+0011 (DC1) must be escaped to \\u0011",
14093|    732|                            "invalid string: control character U+0012 (DC2) must be escaped to \\u0012",
14094|    732|                            "invalid string: control character U+0013 (DC3) must be escaped to \\u0013",
14095|    732|                            "invalid string: control character U+0014 (DC4) must be escaped to \\u0014",
14096|    732|                            "invalid string: control character U+0015 (NAK) must be escaped to \\u0015",
14097|    732|                            "invalid string: control character U+0016 (SYN) must be escaped to \\u0016",
14098|    732|                            "invalid string: control character U+0017 (ETB) must be escaped to \\u0017",
14099|    732|                            "invalid string: control character U+0018 (CAN) must be escaped to \\u0018",
14100|    732|                            "invalid string: control character U+0019 (EM) must be escaped to \\u0019",
14101|    732|                            "invalid string: control character U+001A (SUB) must be escaped to \\u001A",
14102|    732|                            "invalid string: control character U+001B (ESC) must be escaped to \\u001B",
14103|    732|                            "invalid string: control character U+001C (FS) must be escaped to \\u001C",
14104|    732|                            "invalid string: control character U+001D (GS) must be escaped to \\u001D",
14105|    732|                            "invalid string: control character U+001E (RS) must be escaped to \\u001E",
14106|    732|                            "invalid string: control character U+001F (US) must be escaped to \\u001F"
14107|    732|                        }
14108|    732|                    };
14109|    732|                    error_message = control_character_messages[static_cast<std::size_t>(current)];
14110|    732|                    return token_type::parse_error;
14111|    708|                }
14112|       |
14113|       |                // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace))
14114|      0|                case 0x20:
  ------------------
  |  Branch (14114:17): [True: 0, False: 10.1k]
  ------------------
14115|      0|                case 0x21:
  ------------------
  |  Branch (14115:17): [True: 0, False: 10.1k]
  ------------------
14116|      0|                case 0x23:
  ------------------
  |  Branch (14116:17): [True: 0, False: 10.1k]
  ------------------
14117|      0|                case 0x24:
  ------------------
  |  Branch (14117:17): [True: 0, False: 10.1k]
  ------------------
14118|      0|                case 0x25:
  ------------------
  |  Branch (14118:17): [True: 0, False: 10.1k]
  ------------------
14119|      0|                case 0x26:
  ------------------
  |  Branch (14119:17): [True: 0, False: 10.1k]
  ------------------
14120|      0|                case 0x27:
  ------------------
  |  Branch (14120:17): [True: 0, False: 10.1k]
  ------------------
14121|      0|                case 0x28:
  ------------------
  |  Branch (14121:17): [True: 0, False: 10.1k]
  ------------------
14122|      0|                case 0x29:
  ------------------
  |  Branch (14122:17): [True: 0, False: 10.1k]
  ------------------
14123|      0|                case 0x2A:
  ------------------
  |  Branch (14123:17): [True: 0, False: 10.1k]
  ------------------
14124|      0|                case 0x2B:
  ------------------
  |  Branch (14124:17): [True: 0, False: 10.1k]
  ------------------
14125|      0|                case 0x2C:
  ------------------
  |  Branch (14125:17): [True: 0, False: 10.1k]
  ------------------
14126|      0|                case 0x2D:
  ------------------
  |  Branch (14126:17): [True: 0, False: 10.1k]
  ------------------
14127|      0|                case 0x2E:
  ------------------
  |  Branch (14127:17): [True: 0, False: 10.1k]
  ------------------
14128|      0|                case 0x2F:
  ------------------
  |  Branch (14128:17): [True: 0, False: 10.1k]
  ------------------
14129|      0|                case 0x30:
  ------------------
  |  Branch (14129:17): [True: 0, False: 10.1k]
  ------------------
14130|      0|                case 0x31:
  ------------------
  |  Branch (14130:17): [True: 0, False: 10.1k]
  ------------------
14131|      0|                case 0x32:
  ------------------
  |  Branch (14131:17): [True: 0, False: 10.1k]
  ------------------
14132|      0|                case 0x33:
  ------------------
  |  Branch (14132:17): [True: 0, False: 10.1k]
  ------------------
14133|      0|                case 0x34:
  ------------------
  |  Branch (14133:17): [True: 0, False: 10.1k]
  ------------------
14134|      0|                case 0x35:
  ------------------
  |  Branch (14134:17): [True: 0, False: 10.1k]
  ------------------
14135|      0|                case 0x36:
  ------------------
  |  Branch (14135:17): [True: 0, False: 10.1k]
  ------------------
14136|      0|                case 0x37:
  ------------------
  |  Branch (14136:17): [True: 0, False: 10.1k]
  ------------------
14137|      0|                case 0x38:
  ------------------
  |  Branch (14137:17): [True: 0, False: 10.1k]
  ------------------
14138|      0|                case 0x39:
  ------------------
  |  Branch (14138:17): [True: 0, False: 10.1k]
  ------------------
14139|      0|                case 0x3A:
  ------------------
  |  Branch (14139:17): [True: 0, False: 10.1k]
  ------------------
14140|      0|                case 0x3B:
  ------------------
  |  Branch (14140:17): [True: 0, False: 10.1k]
  ------------------
14141|      0|                case 0x3C:
  ------------------
  |  Branch (14141:17): [True: 0, False: 10.1k]
  ------------------
14142|      0|                case 0x3D:
  ------------------
  |  Branch (14142:17): [True: 0, False: 10.1k]
  ------------------
14143|      0|                case 0x3E:
  ------------------
  |  Branch (14143:17): [True: 0, False: 10.1k]
  ------------------
14144|      0|                case 0x3F:
  ------------------
  |  Branch (14144:17): [True: 0, False: 10.1k]
  ------------------
14145|      0|                case 0x40:
  ------------------
  |  Branch (14145:17): [True: 0, False: 10.1k]
  ------------------
14146|      0|                case 0x41:
  ------------------
  |  Branch (14146:17): [True: 0, False: 10.1k]
  ------------------
14147|      0|                case 0x42:
  ------------------
  |  Branch (14147:17): [True: 0, False: 10.1k]
  ------------------
14148|      0|                case 0x43:
  ------------------
  |  Branch (14148:17): [True: 0, False: 10.1k]
  ------------------
14149|      0|                case 0x44:
  ------------------
  |  Branch (14149:17): [True: 0, False: 10.1k]
  ------------------
14150|      0|                case 0x45:
  ------------------
  |  Branch (14150:17): [True: 0, False: 10.1k]
  ------------------
14151|      0|                case 0x46:
  ------------------
  |  Branch (14151:17): [True: 0, False: 10.1k]
  ------------------
14152|      0|                case 0x47:
  ------------------
  |  Branch (14152:17): [True: 0, False: 10.1k]
  ------------------
14153|      0|                case 0x48:
  ------------------
  |  Branch (14153:17): [True: 0, False: 10.1k]
  ------------------
14154|      0|                case 0x49:
  ------------------
  |  Branch (14154:17): [True: 0, False: 10.1k]
  ------------------
14155|      0|                case 0x4A:
  ------------------
  |  Branch (14155:17): [True: 0, False: 10.1k]
  ------------------
14156|      0|                case 0x4B:
  ------------------
  |  Branch (14156:17): [True: 0, False: 10.1k]
  ------------------
14157|      0|                case 0x4C:
  ------------------
  |  Branch (14157:17): [True: 0, False: 10.1k]
  ------------------
14158|      0|                case 0x4D:
  ------------------
  |  Branch (14158:17): [True: 0, False: 10.1k]
  ------------------
14159|      0|                case 0x4E:
  ------------------
  |  Branch (14159:17): [True: 0, False: 10.1k]
  ------------------
14160|      0|                case 0x4F:
  ------------------
  |  Branch (14160:17): [True: 0, False: 10.1k]
  ------------------
14161|      0|                case 0x50:
  ------------------
  |  Branch (14161:17): [True: 0, False: 10.1k]
  ------------------
14162|      0|                case 0x51:
  ------------------
  |  Branch (14162:17): [True: 0, False: 10.1k]
  ------------------
14163|      0|                case 0x52:
  ------------------
  |  Branch (14163:17): [True: 0, False: 10.1k]
  ------------------
14164|      0|                case 0x53:
  ------------------
  |  Branch (14164:17): [True: 0, False: 10.1k]
  ------------------
14165|      0|                case 0x54:
  ------------------
  |  Branch (14165:17): [True: 0, False: 10.1k]
  ------------------
14166|      0|                case 0x55:
  ------------------
  |  Branch (14166:17): [True: 0, False: 10.1k]
  ------------------
14167|      0|                case 0x56:
  ------------------
  |  Branch (14167:17): [True: 0, False: 10.1k]
  ------------------
14168|      0|                case 0x57:
  ------------------
  |  Branch (14168:17): [True: 0, False: 10.1k]
  ------------------
14169|      0|                case 0x58:
  ------------------
  |  Branch (14169:17): [True: 0, False: 10.1k]
  ------------------
14170|      0|                case 0x59:
  ------------------
  |  Branch (14170:17): [True: 0, False: 10.1k]
  ------------------
14171|      0|                case 0x5A:
  ------------------
  |  Branch (14171:17): [True: 0, False: 10.1k]
  ------------------
14172|      0|                case 0x5B:
  ------------------
  |  Branch (14172:17): [True: 0, False: 10.1k]
  ------------------
14173|      0|                case 0x5D:
  ------------------
  |  Branch (14173:17): [True: 0, False: 10.1k]
  ------------------
14174|      0|                case 0x5E:
  ------------------
  |  Branch (14174:17): [True: 0, False: 10.1k]
  ------------------
14175|      0|                case 0x5F:
  ------------------
  |  Branch (14175:17): [True: 0, False: 10.1k]
  ------------------
14176|      0|                case 0x60:
  ------------------
  |  Branch (14176:17): [True: 0, False: 10.1k]
  ------------------
14177|      0|                case 0x61:
  ------------------
  |  Branch (14177:17): [True: 0, False: 10.1k]
  ------------------
14178|      0|                case 0x62:
  ------------------
  |  Branch (14178:17): [True: 0, False: 10.1k]
  ------------------
14179|      0|                case 0x63:
  ------------------
  |  Branch (14179:17): [True: 0, False: 10.1k]
  ------------------
14180|      0|                case 0x64:
  ------------------
  |  Branch (14180:17): [True: 0, False: 10.1k]
  ------------------
14181|      0|                case 0x65:
  ------------------
  |  Branch (14181:17): [True: 0, False: 10.1k]
  ------------------
14182|      0|                case 0x66:
  ------------------
  |  Branch (14182:17): [True: 0, False: 10.1k]
  ------------------
14183|      0|                case 0x67:
  ------------------
  |  Branch (14183:17): [True: 0, False: 10.1k]
  ------------------
14184|      0|                case 0x68:
  ------------------
  |  Branch (14184:17): [True: 0, False: 10.1k]
  ------------------
14185|      0|                case 0x69:
  ------------------
  |  Branch (14185:17): [True: 0, False: 10.1k]
  ------------------
14186|      0|                case 0x6A:
  ------------------
  |  Branch (14186:17): [True: 0, False: 10.1k]
  ------------------
14187|      0|                case 0x6B:
  ------------------
  |  Branch (14187:17): [True: 0, False: 10.1k]
  ------------------
14188|      0|                case 0x6C:
  ------------------
  |  Branch (14188:17): [True: 0, False: 10.1k]
  ------------------
14189|      0|                case 0x6D:
  ------------------
  |  Branch (14189:17): [True: 0, False: 10.1k]
  ------------------
14190|      0|                case 0x6E:
  ------------------
  |  Branch (14190:17): [True: 0, False: 10.1k]
  ------------------
14191|      0|                case 0x6F:
  ------------------
  |  Branch (14191:17): [True: 0, False: 10.1k]
  ------------------
14192|      0|                case 0x70:
  ------------------
  |  Branch (14192:17): [True: 0, False: 10.1k]
  ------------------
14193|      0|                case 0x71:
  ------------------
  |  Branch (14193:17): [True: 0, False: 10.1k]
  ------------------
14194|      0|                case 0x72:
  ------------------
  |  Branch (14194:17): [True: 0, False: 10.1k]
  ------------------
14195|      0|                case 0x73:
  ------------------
  |  Branch (14195:17): [True: 0, False: 10.1k]
  ------------------
14196|      0|                case 0x74:
  ------------------
  |  Branch (14196:17): [True: 0, False: 10.1k]
  ------------------
14197|      0|                case 0x75:
  ------------------
  |  Branch (14197:17): [True: 0, False: 10.1k]
  ------------------
14198|      0|                case 0x76:
  ------------------
  |  Branch (14198:17): [True: 0, False: 10.1k]
  ------------------
14199|      0|                case 0x77:
  ------------------
  |  Branch (14199:17): [True: 0, False: 10.1k]
  ------------------
14200|      0|                case 0x78:
  ------------------
  |  Branch (14200:17): [True: 0, False: 10.1k]
  ------------------
14201|      0|                case 0x79:
  ------------------
  |  Branch (14201:17): [True: 0, False: 10.1k]
  ------------------
14202|      0|                case 0x7A:
  ------------------
  |  Branch (14202:17): [True: 0, False: 10.1k]
  ------------------
14203|      0|                case 0x7B:
  ------------------
  |  Branch (14203:17): [True: 0, False: 10.1k]
  ------------------
14204|      0|                case 0x7C:
  ------------------
  |  Branch (14204:17): [True: 0, False: 10.1k]
  ------------------
14205|      0|                case 0x7D:
  ------------------
  |  Branch (14205:17): [True: 0, False: 10.1k]
  ------------------
14206|      0|                case 0x7E:
  ------------------
  |  Branch (14206:17): [True: 0, False: 10.1k]
  ------------------
14207|      0|                case 0x7F:
  ------------------
  |  Branch (14207:17): [True: 0, False: 10.1k]
  ------------------
14208|      0|                {
14209|      0|                    add_string_char(keep, current);
14210|      0|                    break;
14211|      0|                }
14212|       |
14213|       |                // U+0080..U+07FF: bytes C2..DF 80..BF
14214|     24|                case 0xC2:
  ------------------
  |  Branch (14214:17): [True: 24, False: 10.0k]
  ------------------
14215|     42|                case 0xC3:
  ------------------
  |  Branch (14215:17): [True: 18, False: 10.0k]
  ------------------
14216|     66|                case 0xC4:
  ------------------
  |  Branch (14216:17): [True: 24, False: 10.0k]
  ------------------
14217|     90|                case 0xC5:
  ------------------
  |  Branch (14217:17): [True: 24, False: 10.0k]
  ------------------
14218|    108|                case 0xC6:
  ------------------
  |  Branch (14218:17): [True: 18, False: 10.0k]
  ------------------
14219|    126|                case 0xC7:
  ------------------
  |  Branch (14219:17): [True: 18, False: 10.0k]
  ------------------
14220|    150|                case 0xC8:
  ------------------
  |  Branch (14220:17): [True: 24, False: 10.0k]
  ------------------
14221|    174|                case 0xC9:
  ------------------
  |  Branch (14221:17): [True: 24, False: 10.0k]
  ------------------
14222|    198|                case 0xCA:
  ------------------
  |  Branch (14222:17): [True: 24, False: 10.0k]
  ------------------
14223|    228|                case 0xCB:
  ------------------
  |  Branch (14223:17): [True: 30, False: 10.0k]
  ------------------
14224|    252|                case 0xCC:
  ------------------
  |  Branch (14224:17): [True: 24, False: 10.0k]
  ------------------
14225|    270|                case 0xCD:
  ------------------
  |  Branch (14225:17): [True: 18, False: 10.0k]
  ------------------
14226|    288|                case 0xCE:
  ------------------
  |  Branch (14226:17): [True: 18, False: 10.0k]
  ------------------
14227|    306|                case 0xCF:
  ------------------
  |  Branch (14227:17): [True: 18, False: 10.0k]
  ------------------
14228|    324|                case 0xD0:
  ------------------
  |  Branch (14228:17): [True: 18, False: 10.0k]
  ------------------
14229|    342|                case 0xD1:
  ------------------
  |  Branch (14229:17): [True: 18, False: 10.0k]
  ------------------
14230|    360|                case 0xD2:
  ------------------
  |  Branch (14230:17): [True: 18, False: 10.0k]
  ------------------
14231|    378|                case 0xD3:
  ------------------
  |  Branch (14231:17): [True: 18, False: 10.0k]
  ------------------
14232|    396|                case 0xD4:
  ------------------
  |  Branch (14232:17): [True: 18, False: 10.0k]
  ------------------
14233|    432|                case 0xD5:
  ------------------
  |  Branch (14233:17): [True: 36, False: 10.0k]
  ------------------
14234|    456|                case 0xD6:
  ------------------
  |  Branch (14234:17): [True: 24, False: 10.0k]
  ------------------
14235|    474|                case 0xD7:
  ------------------
  |  Branch (14235:17): [True: 18, False: 10.0k]
  ------------------
14236|    492|                case 0xD8:
  ------------------
  |  Branch (14236:17): [True: 18, False: 10.0k]
  ------------------
14237|    510|                case 0xD9:
  ------------------
  |  Branch (14237:17): [True: 18, False: 10.0k]
  ------------------
14238|    528|                case 0xDA:
  ------------------
  |  Branch (14238:17): [True: 18, False: 10.0k]
  ------------------
14239|    546|                case 0xDB:
  ------------------
  |  Branch (14239:17): [True: 18, False: 10.0k]
  ------------------
14240|    570|                case 0xDC:
  ------------------
  |  Branch (14240:17): [True: 24, False: 10.0k]
  ------------------
14241|    588|                case 0xDD:
  ------------------
  |  Branch (14241:17): [True: 18, False: 10.0k]
  ------------------
14242|    606|                case 0xDE:
  ------------------
  |  Branch (14242:17): [True: 18, False: 10.0k]
  ------------------
14243|    630|                case 0xDF:
  ------------------
  |  Branch (14243:17): [True: 24, False: 10.0k]
  ------------------
14244|    630|                {
14245|    630|                    if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range(keep, {0x80, 0xBF})))
  ------------------
  |  | 1697|    630|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 630, False: 0]
  |  |  ------------------
  ------------------
14246|    630|                    {
14247|    630|                        return token_type::parse_error;
14248|    630|                    }
14249|      0|                    break;
14250|    630|                }
14251|       |
14252|       |                // U+0800..U+0FFF: bytes E0 A0..BF 80..BF
14253|    114|                case 0xE0:
  ------------------
  |  Branch (14253:17): [True: 114, False: 10.0k]
  ------------------
14254|    114|                {
14255|    114|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range(keep, {0xA0, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1697|    114|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 0]
  |  |  ------------------
  ------------------
14256|    114|                    {
14257|    114|                        return token_type::parse_error;
14258|    114|                    }
14259|      0|                    break;
14260|    114|                }
14261|       |
14262|       |                // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF
14263|       |                // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF
14264|     24|                case 0xE1:
  ------------------
  |  Branch (14264:17): [True: 24, False: 10.0k]
  ------------------
14265|     48|                case 0xE2:
  ------------------
  |  Branch (14265:17): [True: 24, False: 10.0k]
  ------------------
14266|     66|                case 0xE3:
  ------------------
  |  Branch (14266:17): [True: 18, False: 10.0k]
  ------------------
14267|     84|                case 0xE4:
  ------------------
  |  Branch (14267:17): [True: 18, False: 10.0k]
  ------------------
14268|    102|                case 0xE5:
  ------------------
  |  Branch (14268:17): [True: 18, False: 10.0k]
  ------------------
14269|    120|                case 0xE6:
  ------------------
  |  Branch (14269:17): [True: 18, False: 10.0k]
  ------------------
14270|    138|                case 0xE7:
  ------------------
  |  Branch (14270:17): [True: 18, False: 10.0k]
  ------------------
14271|    192|                case 0xE8:
  ------------------
  |  Branch (14271:17): [True: 54, False: 10.0k]
  ------------------
14272|    228|                case 0xE9:
  ------------------
  |  Branch (14272:17): [True: 36, False: 10.0k]
  ------------------
14273|    252|                case 0xEA:
  ------------------
  |  Branch (14273:17): [True: 24, False: 10.0k]
  ------------------
14274|    276|                case 0xEB:
  ------------------
  |  Branch (14274:17): [True: 24, False: 10.0k]
  ------------------
14275|    306|                case 0xEC:
  ------------------
  |  Branch (14275:17): [True: 30, False: 10.0k]
  ------------------
14276|    330|                case 0xEE:
  ------------------
  |  Branch (14276:17): [True: 24, False: 10.0k]
  ------------------
14277|    348|                case 0xEF:
  ------------------
  |  Branch (14277:17): [True: 18, False: 10.0k]
  ------------------
14278|    348|                {
14279|    348|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range(keep, {0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1697|    348|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 348, False: 0]
  |  |  ------------------
  ------------------
14280|    348|                    {
14281|    348|                        return token_type::parse_error;
14282|    348|                    }
14283|      0|                    break;
14284|    348|                }
14285|       |
14286|       |                // U+D000..U+D7FF: bytes ED 80..9F 80..BF
14287|     90|                case 0xED:
  ------------------
  |  Branch (14287:17): [True: 90, False: 10.0k]
  ------------------
14288|     90|                {
14289|     90|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range(keep, {0x80, 0x9F, 0x80, 0xBF}))))
  ------------------
  |  | 1697|     90|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 90, False: 0]
  |  |  ------------------
  ------------------
14290|     90|                    {
14291|     90|                        return token_type::parse_error;
14292|     90|                    }
14293|      0|                    break;
14294|     90|                }
14295|       |
14296|       |                // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
14297|    126|                case 0xF0:
  ------------------
  |  Branch (14297:17): [True: 126, False: 9.99k]
  ------------------
14298|    126|                {
14299|    126|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range(keep, {0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1697|    126|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 126, False: 0]
  |  |  ------------------
  ------------------
14300|    126|                    {
14301|    126|                        return token_type::parse_error;
14302|    126|                    }
14303|      0|                    break;
14304|    126|                }
14305|       |
14306|       |                // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
14307|     84|                case 0xF1:
  ------------------
  |  Branch (14307:17): [True: 84, False: 10.0k]
  ------------------
14308|    126|                case 0xF2:
  ------------------
  |  Branch (14308:17): [True: 42, False: 10.0k]
  ------------------
14309|    186|                case 0xF3:
  ------------------
  |  Branch (14309:17): [True: 60, False: 10.0k]
  ------------------
14310|    186|                {
14311|    186|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range(keep, {0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1697|    186|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 186, False: 0]
  |  |  ------------------
  ------------------
14312|    186|                    {
14313|    186|                        return token_type::parse_error;
14314|    186|                    }
14315|      0|                    break;
14316|    186|                }
14317|       |
14318|       |                // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
14319|    132|                case 0xF4:
  ------------------
  |  Branch (14319:17): [True: 132, False: 9.98k]
  ------------------
14320|    132|                {
14321|    132|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range(keep, {0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1697|    132|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 132, False: 0]
  |  |  ------------------
  ------------------
14322|    132|                    {
14323|    132|                        return token_type::parse_error;
14324|    132|                    }
14325|      0|                    break;
14326|    132|                }
14327|       |
14328|       |                // the remaining bytes (80..C1 and F5..FF) are ill-formed
14329|    360|                default:
  ------------------
  |  Branch (14329:17): [True: 360, False: 9.75k]
  ------------------
14330|    360|                {
14331|    360|                    error_message = "invalid string: ill-formed UTF-8 byte";
14332|    360|                    return token_type::parse_error;
14333|    132|                }
14334|  10.1k|            }
14335|  10.1k|        }
14336|  4.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE5resetEv:
15179|  44.0k|    {
15180|  44.0k|        token_buffer.clear();
15181|  44.0k|        pending_number_text = nullptr;
15182|  44.0k|        decimal_point_position = std::string::npos;
15183|       |
15184|       |#if JSON_DIAGNOSTIC_POSITIONS
15185|       |        // the first character of the token has already been read, hence the -1
15186|       |        token_start_position = get_chars_read_total() - 1;
15187|       |#endif
15188|       |
15189|  44.0k|        note_token_start(std::integral_constant<bool, lazy_token_string> {});
15190|  44.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16note_token_startENS4_17integral_constantIbLb1EEE:
15196|  44.0k|    {
15197|  44.0k|        note_token_start_lazy(std::integral_constant<bool, adapter_token> {});
15198|  44.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE21note_token_start_lazyENS4_17integral_constantIbLb0EEE:
15201|  44.0k|    {
15202|  44.0k|        token_string_start = ia.get_consumed_count() - 1;
15203|  44.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE20get_after_string_runILb1EEEiNS4_17integral_constantIbLb1EEENSN_IbXT_EEE:
13810|  10.1k|    {
13811|       |        // scan_string() is entered from scan_after_whitespace(), whose current
13812|       |        // was read by skip_whitespace() (its first get() clears a pending
13813|       |        // unget), and nothing in scan_string() calls unget()
13814|  10.1k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2643|  10.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13814:9): [True: 10.1k, False: 0]
  ------------------
13815|  10.1k|        const std::size_t remaining = ia.bulk_remaining();
13816|  10.1k|        if (remaining == 0)
  ------------------
  |  Branch (13816:13): [True: 588, False: 9.52k]
  ------------------
13817|    588|        {
13818|    588|            return get();
13819|    588|        }
13820|  9.52k|        const auto* const raw = ia.bulk_data();
13821|  9.52k|        const auto* const data = reinterpret_cast<const unsigned char*>(raw);
13822|       |
13823|  9.52k|        const std::size_t pos = lexer_string_bulk_run(data, remaining);
13824|  9.52k|        if (pos != 0)
  ------------------
  |  Branch (13824:13): [True: 2.32k, False: 7.20k]
  ------------------
13825|  2.32k|        {
13826|  2.32k|            append_string_run(keep, data, pos);
13827|  2.32k|            bulk_consume(reinterpret_cast<const char*>(data), pos);
13828|  2.32k|        }
13829|  9.52k|        if (pos == remaining)
  ------------------
  |  Branch (13829:13): [True: 372, False: 9.15k]
  ------------------
13830|    372|        {
13831|    372|            return get(); // end of the contiguous input
13832|    372|        }
13833|       |        // what get() does, with the byte at hand
13834|  9.15k|        advance_position();
13835|  9.15k|        ia.bulk_skip(1);
13836|  9.15k|        current = char_traits<char_type>::to_int_type(raw[pos]);
13837|  9.15k|        return track_after_read();
13838|  9.52k|    }
_ZN8nlohmann16json_abi_v3_12_06detail21lexer_string_bulk_runEPKhm:
13326|  9.52k|{
13327|       |#if JSON_SCAN_NEON && !(defined(JSON_USE_SIMDUTF) && defined(JSON_HAS_CPP_17))
13328|       |    std::size_t i = 0;
13329|       |    for (int words = 4; words > 0 && n - i >= 8; --words)
13330|       |    {
13331|       |        const std::uint64_t special = swar_string_special(read_eight_bytes(data + i));
13332|       |        if (special != 0)
13333|       |        {
13334|       |            const std::size_t pos = i + (static_cast<std::size_t>(count_trailing_zeros(special)) / 8);
13335|       |            return data[pos] < 0x80u ? pos : string_bulk_run_from(data, pos, n);
13336|       |        }
13337|       |        i += 8;
13338|       |    }
13339|       |    return string_bulk_run_from(data, i, n);
13340|       |#else
13341|  9.52k|    return string_bulk_run(data, n);
13342|  9.52k|#endif
13343|  9.52k|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE17append_string_runENS4_17integral_constantIbLb1EEEPKhm:
15437|  2.32k|    {
15438|  2.32k|        token_buffer.append(reinterpret_cast<const typename string_t::value_type*>(data), n);
15439|  2.32k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE15add_string_charENS4_17integral_constantIbLb1EEEi:
15418|  6.75k|    {
15419|  6.75k|        token_buffer.push_back(static_cast<typename string_t::value_type>(c));
15420|  6.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE13get_codepointEv:
13719|  1.97k|    {
13720|       |        // this function only makes sense after reading `\u`
13721|  1.97k|        JSON_ASSERT(current == 'u');
  ------------------
  |  | 2643|  1.97k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13721:9): [True: 1.97k, False: 0]
  ------------------
13722|       |
13723|       |        // contiguous input: decode all 4 hex digits directly from the buffer
13724|  1.97k|        int fast_codepoint = 0;
13725|  1.97k|        if (get_codepoint_bulk(std::integral_constant<bool, bulk_scan> {}, fast_codepoint))
  ------------------
  |  Branch (13725:13): [True: 1.68k, False: 288]
  ------------------
13726|  1.68k|        {
13727|  1.68k|            return fast_codepoint;
13728|  1.68k|        }
13729|       |
13730|    288|        int codepoint = 0;
13731|       |
13732|    288|        const auto factors = { 12u, 8u, 4u, 0u };
13733|    288|        for (const auto factor : factors)
  ------------------
  |  Branch (13733:32): [True: 648, False: 0]
  ------------------
13734|    648|        {
13735|    648|            get();
13736|       |
13737|    648|            if (current >= '0' && current <= '9')
  ------------------
  |  Branch (13737:17): [True: 474, False: 174]
  |  Branch (13737:35): [True: 126, False: 348]
  ------------------
13738|    126|            {
13739|    126|                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor);
13740|    126|            }
13741|    522|            else if (current >= 'A' && current <= 'F')
  ------------------
  |  Branch (13741:22): [True: 336, False: 186]
  |  Branch (13741:40): [True: 102, False: 234]
  ------------------
13742|    102|            {
13743|    102|                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor);
13744|    102|            }
13745|    420|            else if (current >= 'a' && current <= 'f')
  ------------------
  |  Branch (13745:22): [True: 192, False: 228]
  |  Branch (13745:40): [True: 132, False: 60]
  ------------------
13746|    132|            {
13747|    132|                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor);
13748|    132|            }
13749|    288|            else
13750|    288|            {
13751|    288|                return -1;
13752|    288|            }
13753|    648|        }
13754|       |
13755|      0|        JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13755:9): [True: 0, False: 0]
  |  Branch (13755:9): [True: 0, False: 0]
  |  Branch (13755:9): [True: 0, False: 0]
  ------------------
13756|      0|        return codepoint;
13757|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE18get_codepoint_bulkENS4_17integral_constantIbLb1EEERi:
13678|  1.97k|    {
13679|       |        // no unget is pending inside a string (see get_after_string_run())
13680|  1.97k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2643|  1.97k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13680:9): [True: 1.97k, False: 0]
  ------------------
13681|  1.97k|        if (ia.bulk_remaining() < 4)
  ------------------
  |  Branch (13681:13): [True: 168, False: 1.80k]
  ------------------
13682|    168|        {
13683|    168|            return false;
13684|    168|        }
13685|  1.80k|        const char_type* const raw = ia.bulk_data();
13686|  1.80k|        const int codepoint = hex_codepoint(reinterpret_cast<const unsigned char*>(raw));
13687|  1.80k|        if (codepoint < 0)
  ------------------
  |  Branch (13687:13): [True: 120, False: 1.68k]
  ------------------
13688|    120|        {
13689|    120|            return false;
13690|    120|        }
13691|  1.68k|        bulk_consume(reinterpret_cast<const char*>(raw), 4);
13692|  1.68k|        current = char_traits<char_type>::to_int_type(raw[3]);
13693|  1.68k|        out = codepoint;
13694|  1.68k|        return true;
13695|  1.80k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13hex_codepointEPKh:
13354|  1.80k|{
13355|  1.80k|    static const std::array<std::uint8_t, 256> hex_digit_table = // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
13356|  1.80k|    {
13357|  1.80k|        {
13358|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 00..0F
13359|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 10..1F
13360|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 20..2F
13361|  1.80k|            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 30..3F ('0'..'9')
13362|  1.80k|            0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 40..4F ('A'..'F')
13363|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 50..5F
13364|  1.80k|            0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 60..6F ('a'..'f')
13365|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 70..7F
13366|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 80..8F
13367|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 90..9F
13368|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // A0..AF
13369|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // B0..BF
13370|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // C0..CF
13371|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // D0..DF
13372|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // E0..EF
13373|  1.80k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  // F0..FF
13374|  1.80k|        }
13375|  1.80k|    };
13376|       |
13377|  1.80k|    const std::uint8_t d0 = hex_digit_table[data[0]];
13378|  1.80k|    const std::uint8_t d1 = hex_digit_table[data[1]];
13379|  1.80k|    const std::uint8_t d2 = hex_digit_table[data[2]];
13380|  1.80k|    const std::uint8_t d3 = hex_digit_table[data[3]];
13381|       |    // every valid digit is <= 0xF; the combined OR only exceeds it if at
13382|       |    // least one of the four bytes was not a hex digit (looked up as 0xFF)
13383|  1.80k|    if ((d0 | d1 | d2 | d3) > 0x0F)
  ------------------
  |  Branch (13383:9): [True: 120, False: 1.68k]
  ------------------
13384|    120|    {
13385|    120|        return -1;
13386|    120|    }
13387|  1.68k|    return (d0 << 12) | (d1 << 8) | (d2 << 4) | d3;
13388|  1.80k|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE13add_codepointENS4_17integral_constantIbLb1EEEi:
15426|  1.15k|    {
15427|  1.15k|        encode_utf8(static_cast<std::uint32_t>(codepoint), [this](std::uint32_t byte)
15428|  1.15k|        {
15429|  1.15k|            add(static_cast<char_int_type>(byte));
15430|  1.15k|        });
15431|  1.15k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11encode_utf8IZNS1_5lexerINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterIPKcSK_EELb0EE13add_codepointENS5_17integral_constantIbLb1EEEiEUljE_EEvjRKT_:
 7223|  1.15k|{
 7224|  1.15k|    JSON_ASSERT(cp <= 0x10FFFF);
  ------------------
  |  | 2643|  1.15k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (7224:5): [True: 1.15k, False: 0]
  ------------------
 7225|       |
 7226|  1.15k|    if (cp < 0x80)
  ------------------
  |  Branch (7226:9): [True: 102, False: 1.05k]
  ------------------
 7227|    102|    {
 7228|       |        // 1-byte characters: 0xxxxxxx (ASCII)
 7229|    102|        out(cp);
 7230|    102|    }
 7231|  1.05k|    else if (cp <= 0x7FF)
  ------------------
  |  Branch (7231:14): [True: 210, False: 840]
  ------------------
 7232|    210|    {
 7233|       |        // 2-byte characters: 110xxxxx 10xxxxxx
 7234|    210|        out(0xC0u | (cp >> 6u));
 7235|    210|        out(0x80u | (cp & 0x3Fu));
 7236|    210|    }
 7237|    840|    else if (cp <= 0xFFFF)
  ------------------
  |  Branch (7237:14): [True: 612, False: 228]
  ------------------
 7238|    612|    {
 7239|       |        // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx
 7240|    612|        out(0xE0u | (cp >> 12u));
 7241|    612|        out(0x80u | ((cp >> 6u) & 0x3Fu));
 7242|    612|        out(0x80u | (cp & 0x3Fu));
 7243|    612|    }
 7244|    228|    else
 7245|    228|    {
 7246|       |        // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 7247|    228|        out(0xF0u | (cp >> 18u));
 7248|    228|        out(0x80u | ((cp >> 12u) & 0x3Fu));
 7249|    228|        out(0x80u | ((cp >> 6u) & 0x3Fu));
 7250|    228|        out(0x80u | (cp & 0x3Fu));
 7251|    228|    }
 7252|  1.15k|}
_ZZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE13add_codepointENS4_17integral_constantIbLb1EEEiENKUljE_clEj:
15428|  3.27k|        {
15429|  3.27k|            add(static_cast<char_int_type>(byte));
15430|  3.27k|        });
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE3addEi:
15411|  32.0k|    {
15412|  32.0k|        token_buffer.push_back(static_cast<typename string_t::value_type>(c));
15413|  32.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE18next_byte_in_rangeILb1EEEbNS4_17integral_constantIbXT_EEESt16initializer_listIiE:
13778|  1.62k|    {
13779|  1.62k|        JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6);
  ------------------
  |  | 2643|  1.62k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13779:9): [True: 630, False: 996]
  |  Branch (13779:9): [True: 552, False: 444]
  |  Branch (13779:9): [True: 444, False: 0]
  |  Branch (13779:9): [True: 1.62k, False: 0]
  ------------------
13780|  1.62k|        add_string_char(keep, current);
13781|       |
13782|  2.14k|        for (auto range = ranges.begin(); range != ranges.end(); ++range)
  ------------------
  |  Branch (13782:43): [True: 2.14k, False: 0]
  ------------------
13783|  2.14k|        {
13784|  2.14k|            get();
13785|  2.14k|            if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions)
  ------------------
  |  | 1696|  3.07k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 522, False: 1.62k]
  |  |  |  Branch (1696:94): [True: 924, False: 1.22k]
  |  |  |  Branch (1696:94): [True: 522, False: 402]
  |  |  ------------------
  ------------------
13786|    522|            {
13787|    522|                add_string_char(keep, current);
13788|    522|            }
13789|  1.62k|            else
13790|  1.62k|            {
13791|  1.62k|                error_message = "invalid string: ill-formed UTF-8 byte";
13792|  1.62k|                return false;
13793|  1.62k|            }
13794|  2.14k|        }
13795|       |
13796|      0|        return true;
13797|  1.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE20scan_number_dispatchENS4_17integral_constantIbLb1EEE:
15112|  39.7k|    {
15113|  39.7k|        const token_type t = scan_number_bulk_contiguous();
15114|  39.7k|        return (t != token_type::uninitialized) ? t : scan_number();
  ------------------
  |  Branch (15114:16): [True: 29.4k, False: 10.2k]
  ------------------
15115|  39.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE27scan_number_bulk_contiguousEv:
14888|  39.7k|    {
14889|       |        // called right after scan_after_whitespace() read current (see
14890|       |        // get_after_string_run()), so no unget is pending
14891|  39.7k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2643|  39.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14891:9): [True: 39.7k, False: 0]
  ------------------
14892|  39.7k|        const std::size_t rem = ia.bulk_remaining();
14893|  39.7k|        if (rem == 0)
  ------------------
  |  Branch (14893:13): [True: 8.44k, False: 31.2k]
  ------------------
14894|  8.44k|        {
14895|       |            // the first digit is the last input byte; let scan_number() finish
14896|  8.44k|            return token_type::uninitialized;
14897|  8.44k|        }
14898|       |        // the byte before the next unread one is current (contiguous input)
14899|  31.2k|        const char* const data = reinterpret_cast<const char*>(ia.bulk_data()) - 1;
14900|  31.2k|        const std::size_t avail = rem + 1;
14901|       |
14902|       |        // validate + classify the number extent (mirrors scan_number()'s grammar)
14903|       |        // and accumulate the mantissa digits on the way, so that tokens with up
14904|       |        // to 19 digits need no second pass for their value
14905|  31.2k|        std::size_t i = 0;
14906|  31.2k|        std::size_t dot_index = std::string::npos;
14907|  31.2k|        token_type number_type = token_type::value_unsigned;
14908|  31.2k|        std::uint64_t w = 0;
14909|  31.2k|        if (data[0] == '-')
  ------------------
  |  Branch (14909:13): [True: 4.33k, False: 26.9k]
  ------------------
14910|  4.33k|        {
14911|  4.33k|            number_type = token_type::value_integer;
14912|  4.33k|            i = 1; // avail >= 2: rem == 0 returned above
14913|  4.33k|        }
14914|  31.2k|        const std::size_t integer_begin = i;
14915|  31.2k|        if (data[i] == '0')
  ------------------
  |  Branch (14915:13): [True: 5.02k, False: 26.2k]
  ------------------
14916|  5.02k|        {
14917|  5.02k|            ++i;
14918|  5.02k|        }
14919|  26.2k|        else if (data[i] >= '1' && data[i] <= '9')
  ------------------
  |  Branch (14919:18): [True: 26.1k, False: 78]
  |  Branch (14919:36): [True: 26.1k, False: 42]
  ------------------
14920|  26.1k|        {
14921|  26.1k|            i = accumulate_digits(data, i, avail, w);
14922|  26.1k|        }
14923|    120|        else
14924|    120|        {
14925|    120|            return token_type::uninitialized;
14926|    120|        }
14927|  31.1k|        std::size_t digit_count = i - integer_begin;
14928|  31.1k|        std::size_t fraction_digits = 0;
14929|  31.1k|        if (i < avail && data[i] == '.')
  ------------------
  |  Branch (14929:13): [True: 26.0k, False: 5.09k]
  |  Branch (14929:26): [True: 9.71k, False: 16.3k]
  ------------------
14930|  9.71k|        {
14931|  9.71k|            number_type = token_type::value_float;
14932|  9.71k|            dot_index = i;
14933|  9.71k|            ++i;
14934|  9.71k|            if (i >= avail || !(data[i] >= '0' && data[i] <= '9'))
  ------------------
  |  Branch (14934:17): [True: 138, False: 9.57k]
  |  Branch (14934:33): [True: 9.39k, False: 186]
  |  Branch (14934:51): [True: 9.30k, False: 90]
  ------------------
14935|    414|            {
14936|    414|                return token_type::uninitialized;
14937|    414|            }
14938|  9.30k|            const std::size_t fraction_begin = i;
14939|  9.30k|            i = accumulate_digits(data, i, avail, w);
14940|  9.30k|            fraction_digits = i - fraction_begin;
14941|  9.30k|            digit_count += fraction_digits;
14942|  9.30k|        }
14943|       |        // the mantissa ends here, whether or not an exponent part follows
14944|  30.7k|        const std::size_t mantissa_end = i;
14945|  30.7k|        std::int64_t exponent = 0;
14946|  30.7k|        if (i < avail && (data[i] == 'e' || data[i] == 'E'))
  ------------------
  |  Branch (14946:13): [True: 20.3k, False: 10.4k]
  |  Branch (14946:27): [True: 10.9k, False: 9.37k]
  |  Branch (14946:45): [True: 4.31k, False: 5.06k]
  ------------------
14947|  15.2k|        {
14948|  15.2k|            number_type = token_type::value_float;
14949|  15.2k|            ++i;
14950|  15.2k|            bool negative_exponent = false;
14951|  15.2k|            if (i < avail && (data[i] == '+' || data[i] == '-'))
  ------------------
  |  Branch (14951:17): [True: 14.6k, False: 594]
  |  Branch (14951:31): [True: 588, False: 14.0k]
  |  Branch (14951:49): [True: 6.04k, False: 8.05k]
  ------------------
14952|  6.63k|            {
14953|  6.63k|                negative_exponent = data[i] == '-';
14954|  6.63k|                ++i;
14955|  6.63k|            }
14956|  15.2k|            if (i >= avail || !(data[i] >= '0' && data[i] <= '9'))
  ------------------
  |  Branch (14956:17): [True: 624, False: 14.6k]
  |  Branch (14956:33): [True: 14.2k, False: 408]
  |  Branch (14956:51): [True: 14.0k, False: 216]
  ------------------
14957|  1.24k|            {
14958|  1.24k|                return token_type::uninitialized;
14959|  1.24k|            }
14960|       |            // saturated far beyond every range, see parse_float_exponent()
14961|  14.0k|            constexpr std::int64_t saturation = 100000000000000000; // 10^17
14962|  75.1k|            while (i < avail && data[i] >= '0' && data[i] <= '9')
  ------------------
  |  Branch (14962:20): [True: 63.9k, False: 11.1k]
  |  Branch (14962:33): [True: 62.3k, False: 1.64k]
  |  Branch (14962:51): [True: 61.1k, False: 1.22k]
  ------------------
14963|  61.1k|            {
14964|  61.1k|                if (exponent < saturation)
  ------------------
  |  Branch (14964:21): [True: 58.6k, False: 2.49k]
  ------------------
14965|  58.6k|                {
14966|  58.6k|                    exponent = (exponent * 10) + (data[i] - '0');
14967|  58.6k|                }
14968|  61.1k|                ++i;
14969|  61.1k|            }
14970|  14.0k|            exponent = negative_exponent ? -exponent : exponent;
  ------------------
  |  Branch (14970:24): [True: 5.97k, False: 8.05k]
  ------------------
14971|  14.0k|        }
14972|  29.4k|        const std::size_t len = i;
14973|  29.4k|        if (number_may_continue(len == avail, std::integral_constant<bool, bulk_window> {}))
  ------------------
  |  Branch (14973:13): [True: 0, False: 29.4k]
  ------------------
14974|      0|        {
14975|      0|            return token_type::uninitialized;
14976|      0|        }
14977|       |
14978|       |        // reset() records where this token starts (for diagnostics), so it has
14979|       |        // to run before the input position advances below
14980|  29.4k|        reset();
14981|       |
14982|       |        // An integer token needs no token_buffer: the SAX callbacks for
14983|       |        // number_integer/number_unsigned take only the value, and the overflow
14984|       |        // diagnostic rebuilds the text from the input. Convert straight from the
14985|       |        // input buffer and leave token_buffer empty. (JSON_DIAGNOSTIC_POSITIONS
14986|       |        // derives a number's start position from get_string().size(), so there
14987|       |        // the token still has to be materialized.)
14988|  29.4k|#if !JSON_DIAGNOSTIC_POSITIONS
14989|  29.4k|        if (number_type != token_type::value_float)
  ------------------
  |  Branch (14989:13): [True: 7.72k, False: 21.7k]
  ------------------
14990|  7.72k|        {
14991|       |            // up to 18 digits always fit into std::uint64_t and std::int64_t
14992|  7.72k|            const token_type integer_result = (digit_count <= 18)
  ------------------
  |  Branch (14992:47): [True: 4.14k, False: 3.58k]
  ------------------
14993|  7.72k|                                              ? store_integer(number_type, w)
14994|  7.72k|                                              : convert_integer(number_type, data, data + len);
14995|  7.72k|            if (JSON_HEDLEY_LIKELY(integer_result != token_type::uninitialized))
  ------------------
  |  | 1696|  7.72k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 4.92k, False: 2.80k]
  |  |  ------------------
  ------------------
14996|  4.92k|            {
14997|  4.92k|                bulk_consume(data + 1, len - 1);
14998|  4.92k|                read_number_terminator(std::integral_constant<bool, bulk_window> {});
14999|  4.92k|                return integer_result;
15000|  4.92k|            }
15001|       |            // The value does not fit an integer, so this token converts as a
15002|       |            // float. Recording that here keeps convert_number() below from
15003|       |            // repeating the integer attempt that just failed.
15004|  2.80k|            number_type = token_type::value_float;
15005|  2.80k|        }
15006|  24.5k|#endif
15007|       |
15008|  24.5k|        decimal_point_position = dot_index;
15009|       |
15010|  24.5k|        bulk_consume(data + 1, len - 1);
15011|  24.5k|        read_number_terminator(std::integral_constant<bool, bulk_window> {});
15012|       |
15013|       |        // a float whose digits all fit into w converts from the accumulated
15014|       |        // value; longer ones (and other float formats) take the general path
15015|  24.5k|        if (number_type == token_type::value_float && digit_count <= 19)
  ------------------
  |  Branch (15015:13): [True: 24.5k, False: 0]
  |  Branch (15015:55): [True: 14.2k, False: 10.2k]
  ------------------
15016|  14.2k|        {
15017|  14.2k|            float_significand s;
15018|  14.2k|            s.w = w;
15019|  14.2k|            s.exponent = exponent - static_cast<std::int64_t>(fraction_digits);
15020|  14.2k|            s.negative = data[0] == '-';
15021|  14.2k|            if (convert_accumulated_float(s, std::integral_constant<bool, has_native_float_format<number_float_t>::value> {}))
  ------------------
  |  Branch (15021:17): [True: 14.2k, False: 0]
  ------------------
15022|  14.2k|            {
15023|       |                // the token text is only copied into token_buffer when
15024|       |                // get_string() asks for it; the library's own SAX handlers
15025|       |                // ignore it. A window into a stream may be refilled by the
15026|       |                // next read, so there the text is copied right away.
15027|  14.2k|                if (bulk_window)
  ------------------
  |  Branch (15027:21): [Folded, False: 14.2k]
  ------------------
15028|      0|                {
15029|      0|                    token_buffer.append(reinterpret_cast<const typename string_t::value_type*>(data), len);
15030|      0|                }
15031|  14.2k|                else
15032|  14.2k|                {
15033|  14.2k|                    pending_number_text = data;
15034|  14.2k|                    pending_number_length = len;
15035|  14.2k|                }
15036|  14.2k|                return token_type::value_float;
15037|  14.2k|            }
15038|  14.2k|        }
15039|       |
15040|       |        // materialize the token exactly as scan_number() would. reset() already
15041|       |        // cleared token_buffer, so append() fills it (assign() is avoided
15042|       |        // because custom string_t types need not provide it)
15043|  10.2k|        token_buffer.append(reinterpret_cast<const typename string_t::value_type*>(data), len);
15044|  10.2k|        return convert_number(number_type, mantissa_end);
15045|  24.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17accumulate_digitsEPKcmmRm:
11551|  35.4k|{
11552|  67.0k|    while (avail - i >= 8)
  ------------------
  |  Branch (11552:12): [True: 42.0k, False: 25.0k]
  ------------------
11553|  42.0k|    {
11554|  42.0k|        const std::uint64_t v = read_eight_bytes(data + i);
11555|  42.0k|        if (!is_eight_digits(v))
  ------------------
  |  Branch (11555:13): [True: 10.4k, False: 31.6k]
  ------------------
11556|  10.4k|        {
11557|  10.4k|            break;
11558|  10.4k|        }
11559|  31.6k|        w = (w * 100000000u) + parse_eight_digits(v);
11560|  31.6k|        i += 8;
11561|  31.6k|    }
11562|   121k|    while (i < avail && data[i] >= '0' && data[i] <= '9')
  ------------------
  |  Branch (11562:12): [True: 111k, False: 10.1k]
  |  Branch (11562:25): [True: 100k, False: 11.0k]
  |  Branch (11562:43): [True: 85.7k, False: 14.2k]
  ------------------
11563|  85.7k|    {
11564|  85.7k|        w = (w * 10u) + static_cast<std::uint64_t>(data[i] - '0');
11565|  85.7k|        ++i;
11566|  85.7k|    }
11567|  35.4k|    return i;
11568|  35.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail15is_eight_digitsEm:
11538|  42.0k|{
11539|  42.0k|    return ((v & 0xF0F0F0F0F0F0F0F0u) | (((v + 0x0606060606060606u) & 0xF0F0F0F0F0F0F0F0u) >> 4u)) == 0x3333333333333333u;
11540|  42.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail18parse_eight_digitsEm:
11529|  50.9k|{
11530|  50.9k|    v = ((v & 0x0F0F0F0F0F0F0F0Fu) * 2561u) >> 8u;
11531|  50.9k|    v = ((v & 0x00FF00FF00FF00FFu) * 6553601u) >> 16u;
11532|  50.9k|    return static_cast<std::uint32_t>(((v & 0x0000FFFF0000FFFFu) * 42949672960001u) >> 32u);
11533|  50.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE19number_may_continueEbNS4_17integral_constantIbLb0EEE:
15056|  29.4k|    {
15057|  29.4k|        return false;
15058|  29.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE13store_integerENS1_10lexer_baseISG_E10token_typeEm:
15098|  4.14k|    {
15099|  4.14k|        if (number_type == token_type::value_unsigned)
  ------------------
  |  Branch (15099:13): [True: 2.42k, False: 1.71k]
  ------------------
15100|  2.42k|        {
15101|  2.42k|            value_unsigned = static_cast<number_unsigned_t>(w);
15102|       |            // reject values that do not round-trip into a narrower type
15103|  2.42k|            return (static_cast<std::uint64_t>(value_unsigned) == w) ? token_type::value_unsigned : token_type::uninitialized;
  ------------------
  |  Branch (15103:20): [True: 2.42k, False: 0]
  ------------------
15104|  2.42k|        }
15105|  1.71k|        const std::int64_t x = -static_cast<std::int64_t>(w);
15106|  1.71k|        value_integer = static_cast<number_integer_t>(x);
15107|  1.71k|        return (static_cast<std::int64_t>(value_integer) == x) ? token_type::value_integer : token_type::uninitialized;
  ------------------
  |  Branch (15107:16): [True: 1.71k, False: 0]
  ------------------
15108|  4.14k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE15convert_integerENS1_10lexer_baseISG_E10token_typeESJ_SJ_:
14775|  11.9k|    {
14776|  11.9k|        if (number_type == token_type::value_unsigned)
  ------------------
  |  Branch (14776:13): [True: 11.2k, False: 732]
  ------------------
14777|  11.2k|        {
14778|  11.2k|            if (parse_integer_unsigned(first, last, value_unsigned))
  ------------------
  |  Branch (14778:17): [True: 8.92k, False: 2.32k]
  ------------------
14779|  8.92k|            {
14780|  8.92k|                return token_type::value_unsigned;
14781|  8.92k|            }
14782|  11.2k|        }
14783|    732|        else // value_integer (the callers handle value_float themselves)
14784|    732|        {
14785|    732|            if (parse_integer_signed(first, last, value_integer))
  ------------------
  |  Branch (14785:17): [True: 246, False: 486]
  ------------------
14786|    246|            {
14787|    246|                return token_type::value_integer;
14788|    246|            }
14789|    732|        }
14790|       |
14791|  2.80k|        return token_type::uninitialized;
14792|  11.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22parse_integer_unsignedImEEbPKcS4_RT_:
11341|  11.2k|{
11342|       |    // accumulate in the widest unsigned type used by the previous strtoull
11343|       |    // path so the overflow behavior is unchanged for custom number types
11344|  11.2k|    std::uint64_t x = 0;
11345|  11.2k|    constexpr std::uint64_t cutoff = (std::numeric_limits<std::uint64_t>::max)() / 10u;
11346|  11.2k|    constexpr std::uint64_t cutlim = (std::numeric_limits<std::uint64_t>::max)() % 10u;
11347|  74.5k|    for (const char* p = first; p != last; ++p)
  ------------------
  |  Branch (11347:33): [True: 65.6k, False: 8.92k]
  ------------------
11348|  65.6k|    {
11349|  65.6k|        const auto digit = static_cast<std::uint64_t>(static_cast<unsigned char>(*p) - static_cast<unsigned char>('0'));
11350|  65.6k|        if (JSON_HEDLEY_UNLIKELY(x > cutoff || (x == cutoff && digit > cutlim)))
  ------------------
  |  | 1697|   192k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2.32k, False: 63.2k]
  |  |  |  Branch (1697:94): [True: 126, False: 63.1k]
  |  |  |  Branch (1697:94): [True: 42, False: 84]
  |  |  |  Branch (1697:94): [True: 2.28k, False: 63.3k]
  |  |  ------------------
  ------------------
11351|  2.32k|        {
11352|  2.32k|            return false;
11353|  2.32k|        }
11354|  63.2k|        x = (x * 10u) + digit;
11355|  63.2k|    }
11356|  8.92k|    value = static_cast<NumberUnsignedType>(x);
11357|       |    // reject values that do not round-trip into a narrower NumberUnsignedType,
11358|       |    // and values that wrap around to negative numbers if it is a signed type
11359|       |    // (number_unsigned_t may be the same type as number_integer_t, #2573)
11360|  8.92k|    return static_cast<std::uint64_t>(value) == x && !is_negative_integer(value, std::is_signed<NumberUnsignedType>());
  ------------------
  |  Branch (11360:12): [True: 8.92k, False: 0]
  |  Branch (11360:54): [True: 8.92k, False: 0]
  ------------------
11361|  11.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail19is_negative_integerImEEbT_NSt3__117integral_constantIbLb0EEE:
11320|  8.92k|{
11321|  8.92k|    return false;
11322|  8.92k|}
_ZN8nlohmann16json_abi_v3_12_06detail20parse_integer_signedIlEEbPKcS4_RT_:
11373|    732|{
11374|       |    // the state machine only reaches the signed path via a leading '-'
11375|    732|    JSON_ASSERT(first != last && *first == '-');
  ------------------
  |  | 2643|    732|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11375:5): [True: 732, False: 0]
  |  Branch (11375:5): [True: 732, False: 0]
  |  Branch (11375:5): [True: 732, False: 0]
  ------------------
11376|    732|    std::uint64_t magnitude = 0;
11377|       |    // |INT64_MIN| == INT64_MAX + 1; this is the largest admissible magnitude
11378|    732|    constexpr std::uint64_t limit = static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()) + 1u;
11379|  14.4k|    for (const char* p = first + 1; p != last; ++p)
  ------------------
  |  Branch (11379:37): [True: 14.1k, False: 246]
  ------------------
11380|  14.1k|    {
11381|  14.1k|        const auto digit = static_cast<std::uint64_t>(static_cast<unsigned char>(*p) - static_cast<unsigned char>('0'));
11382|  14.1k|        if (JSON_HEDLEY_UNLIKELY(magnitude > (limit - digit) / 10u))
  ------------------
  |  | 1697|  14.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 486, False: 13.6k]
  |  |  ------------------
  ------------------
11383|    486|        {
11384|    486|            return false;
11385|    486|        }
11386|  13.6k|        magnitude = (magnitude * 10u) + digit;
11387|  13.6k|    }
11388|    246|    const std::int64_t x = (magnitude == limit)
  ------------------
  |  Branch (11388:28): [True: 84, False: 162]
  ------------------
11389|    246|                           ? (std::numeric_limits<std::int64_t>::min)()
11390|    246|                           : -static_cast<std::int64_t>(magnitude);
11391|    246|    value = static_cast<NumberIntegerType>(x);
11392|       |    // reject values that do not round-trip into a narrower NumberIntegerType
11393|    246|    return static_cast<std::int64_t>(value) == x;
11394|    732|}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE22read_number_terminatorENS4_17integral_constantIbLb0EEE:
15070|  29.4k|    void read_number_terminator(std::false_type /*window*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE25convert_accumulated_floatERKNS1_17float_significandENS4_17integral_constantIbLb1EEE:
15075|  14.2k|    {
15076|       |        // accept() only needs to know that the value is finite (see the parser):
15077|       |        // w < 10^19, so a value below 10^max_exponent10 cannot overflow, and a
15078|       |        // value that underflows is a finite number as well. Only a token that
15079|       |        // may overflow has to be converted to find out.
15080|  14.2k|        if (JSON_HEDLEY_UNLIKELY(discard_values() && s.exponent + 19 <= std::numeric_limits<number_float_t>::max_exponent10))
  ------------------
  |  | 1697|  14.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 14.2k]
  |  |  |  Branch (1697:94): [True: 0, False: 14.2k]
  |  |  |  Branch (1697:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
15081|      0|        {
15082|      0|            value_float = 0;
15083|      0|            return true;
15084|      0|        }
15085|  14.2k|        value_float = decimal_to_float<number_float_t>(s);
15086|  14.2k|        return true;
15087|  14.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE14discard_valuesEv:
15931|  32.9k|    {
15932|  32.9k|        return DiscardValues;
15933|  32.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail16decimal_to_floatIdEET_RKNS1_17float_significandE:
12093|  18.1k|{
12094|  18.1k|    using result_type = native_float_t<FloatType>;
12095|  18.1k|    using format = ieee_binary_format<std::numeric_limits<FloatType>::digits>;
12096|  18.1k|    JSON_ASSERT(!s.truncated);
  ------------------
  |  | 2643|  18.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (12096:5): [True: 18.1k, False: 0]
  ------------------
12097|       |
12098|  18.1k|#if !defined(FLT_EVAL_METHOD) || FLT_EVAL_METHOD == 0
12099|  18.1k|    if (s.exponent >= -format::max_exponent_fast_path() && s.exponent <= format::max_exponent_fast_path()
  ------------------
  |  Branch (12099:9): [True: 13.7k, False: 4.42k]
  |  Branch (12099:60): [True: 9.91k, False: 3.84k]
  ------------------
12100|  9.91k|            && s.w <= format::max_mantissa_fast_path())
  ------------------
  |  Branch (12100:16): [True: 6.28k, False: 3.63k]
  ------------------
12101|  6.28k|    {
12102|  6.28k|        auto value = static_cast<result_type>(s.w);
12103|  6.28k|        if (s.exponent < 0)
  ------------------
  |  Branch (12103:13): [True: 2.87k, False: 3.40k]
  ------------------
12104|  2.87k|        {
12105|  2.87k|            value /= exact_power_of_ten(-s.exponent, result_type{});
12106|  2.87k|        }
12107|  3.40k|        else
12108|  3.40k|        {
12109|  3.40k|            value *= exact_power_of_ten(s.exponent, result_type{});
12110|  3.40k|        }
12111|  6.28k|        const FloatType result = s.negative ? -value : value;
  ------------------
  |  Branch (12111:34): [True: 636, False: 5.64k]
  ------------------
12112|  6.28k|        return result;
12113|  6.28k|    }
12114|  11.9k|#endif
12115|       |
12116|  11.9k|    result_type value{};
12117|  11.9k|    float_from_bits(eisel_lemire<format>(s.exponent, s.w) | (s.negative ? (std::uint64_t{1} << format::sign_bit()) : 0u), value);
  ------------------
  |  Branch (12117:62): [True: 798, False: 11.1k]
  ------------------
12118|  11.9k|    const FloatType result = value;
12119|  11.9k|    return result;
12120|  18.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE22max_exponent_fast_pathEv:
11493|  31.9k|    {
11494|  31.9k|        return 22;
11495|  31.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE22max_mantissa_fast_pathEv:
11497|  9.91k|    {
11498|  9.91k|        return std::uint64_t{2} << 52u;
11499|  9.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18exact_power_of_tenEld:
12054|  6.28k|{
12055|  6.28k|    static const std::array<double, 23> powers =
12056|  6.28k|    {
12057|  6.28k|        {
12058|  6.28k|            1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11,
12059|  6.28k|            1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22
12060|  6.28k|        }
12061|  6.28k|    };
12062|  6.28k|    return powers[static_cast<std::size_t>(n)];
12063|  6.28k|}
_ZN8nlohmann16json_abi_v3_12_06detail15float_from_bitsEmRd:
12040|  18.2k|{
12041|  18.2k|    static_assert(sizeof(double) == sizeof(std::uint64_t), "double must have 64 bits");
12042|  18.2k|    value = bit_cast<double>(bits);
12043|  18.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail8bit_castIdmEET_RKT0_:
 9054|  18.2k|{
 9055|  18.2k|    static_assert(sizeof(To) == sizeof(From), "bit_cast needs types of the same size");
 9056|       |#if defined(__cpp_lib_bit_cast)
 9057|       |    return std::bit_cast<To>(from);
 9058|       |#else
 9059|  18.2k|    To to {};
 9060|  18.2k|    std::memcpy(&to, &from, sizeof(To));
 9061|  18.2k|    return to;
 9062|  18.2k|#endif
 9063|  18.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail12eisel_lemireINS1_18ieee_binary_formatILi53EEEEEmlm:
11744|  24.6k|{
11745|  24.6k|    constexpr int mantissa_bits = Format::mantissa_bits();
11746|  24.6k|    constexpr std::uint64_t infinity = static_cast<std::uint64_t>(Format::infinite_power()) << mantissa_bits;
11747|  24.6k|    if (w == 0 || q < Format::smallest_power_of_ten())
  ------------------
  |  Branch (11747:9): [True: 672, False: 24.0k]
  |  Branch (11747:19): [True: 2.20k, False: 21.8k]
  ------------------
11748|  2.87k|    {
11749|  2.87k|        return 0;
11750|  2.87k|    }
11751|  21.8k|    if (q > Format::largest_power_of_ten())
  ------------------
  |  Branch (11751:9): [True: 1.81k, False: 19.9k]
  ------------------
11752|  1.81k|    {
11753|  1.81k|        return infinity;
11754|  1.81k|    }
11755|       |
11756|  19.9k|    const int lz = count_leading_zeros(w);
11757|  19.9k|    w <<= static_cast<unsigned>(lz);
11758|  19.9k|    const auto index = static_cast<std::size_t>(2 * (q - pow5_128_smallest_power));
11759|  19.9k|    uint128_parts product = full_multiplication(w, pow5_128()[index]);
11760|  19.9k|    constexpr std::uint64_t precision_mask = 0xFFFFFFFFFFFFFFFFu >> (mantissa_bits + 3);
11761|  19.9k|    if ((product.high & precision_mask) == precision_mask)
  ------------------
  |  Branch (11761:9): [True: 2.95k, False: 17.0k]
  ------------------
11762|  2.95k|    {
11763|       |        // the lower bits may carry into the result: use the next 64 bits of 5^q
11764|  2.95k|        const uint128_parts second = full_multiplication(w, pow5_128()[index + 1]);
11765|  2.95k|        product.low += second.high;
11766|  2.95k|        if (second.high > product.low)
  ------------------
  |  Branch (11766:13): [True: 1.45k, False: 1.50k]
  ------------------
11767|  1.45k|        {
11768|  1.45k|            ++product.high;
11769|  1.45k|        }
11770|  2.95k|    }
11771|       |
11772|  19.9k|    const auto upperbit = static_cast<int>(product.high >> 63u);
11773|  19.9k|    const int shift = upperbit + 64 - mantissa_bits - 3;
11774|  19.9k|    std::uint64_t mantissa = product.high >> static_cast<unsigned>(shift);
11775|       |    // floor(log2(10^q)) + 63 + bias, with log2(10) ~ 217706 / 2^16
11776|  19.9k|    std::int64_t power2 = (((152170 + 65536) * q) >> 16) + 63 + upperbit - lz - Format::minimum_exponent();
11777|       |
11778|  19.9k|    if (power2 <= 0) // subnormal
  ------------------
  |  Branch (11778:9): [True: 2.74k, False: 17.2k]
  ------------------
11779|  2.74k|    {
11780|  2.74k|        if (-power2 + 1 >= 64)
  ------------------
  |  Branch (11780:13): [True: 474, False: 2.27k]
  ------------------
11781|    474|        {
11782|    474|            return 0;
11783|    474|        }
11784|  2.27k|        mantissa >>= static_cast<unsigned>(-power2 + 1);
11785|       |        // no tie is possible here: that needs a small |q|
11786|  2.27k|        mantissa += (mantissa & 1u);
11787|  2.27k|        mantissa >>= 1u;
11788|       |        // rounding up may produce the smallest normal number
11789|  2.27k|        power2 = (mantissa < (std::uint64_t{1} << mantissa_bits)) ? 0 : 1;
  ------------------
  |  Branch (11789:18): [True: 2.27k, False: 0]
  ------------------
11790|  2.27k|        return (mantissa & ((std::uint64_t{1} << mantissa_bits) - 1)) | (static_cast<std::uint64_t>(power2) << mantissa_bits);
11791|  2.74k|    }
11792|       |
11793|       |    // a value exactly between two floats rounds to even; this can only
11794|       |    // happen for small |q|, where 5^q is exact
11795|  17.2k|    if (product.low <= 1 && q >= Format::min_exponent_round_to_even() && q <= Format::max_exponent_round_to_even()
  ------------------
  |  Branch (11795:9): [True: 7.11k, False: 10.1k]
  |  Branch (11795:29): [True: 5.55k, False: 1.55k]
  |  Branch (11795:74): [True: 4.84k, False: 708]
  ------------------
11796|  4.84k|            && (mantissa & 3u) == 1 && (mantissa << static_cast<unsigned>(shift)) == product.high)
  ------------------
  |  Branch (11796:16): [True: 2.20k, False: 2.64k]
  |  Branch (11796:40): [True: 1.05k, False: 1.15k]
  ------------------
11797|  1.05k|    {
11798|  1.05k|        mantissa &= ~std::uint64_t{1};
11799|  1.05k|    }
11800|  17.2k|    mantissa += (mantissa & 1u);
11801|  17.2k|    mantissa >>= 1u;
11802|  17.2k|    if (mantissa >= (std::uint64_t{2} << mantissa_bits))
  ------------------
  |  Branch (11802:9): [True: 618, False: 16.6k]
  ------------------
11803|    618|    {
11804|    618|        mantissa = std::uint64_t{1} << mantissa_bits;
11805|    618|        ++power2;
11806|    618|    }
11807|  17.2k|    mantissa &= ~(std::uint64_t{1} << mantissa_bits);
11808|  17.2k|    if (power2 >= Format::infinite_power())
  ------------------
  |  Branch (11808:9): [True: 102, False: 17.1k]
  ------------------
11809|    102|    {
11810|    102|        return infinity;
11811|    102|    }
11812|  17.1k|    return mantissa | (static_cast<std::uint64_t>(power2) << mantissa_bits);
11813|  17.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE21smallest_power_of_tenEv:
11477|  24.0k|    {
11478|  24.0k|        return -342;
11479|  24.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE20largest_power_of_tenEv:
11481|  21.8k|    {
11482|  21.8k|        return 308;
11483|  21.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE16minimum_exponentEv:
11469|  22.0k|    {
11470|  22.0k|        return -1023;
11471|  22.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE26min_exponent_round_to_evenEv:
11485|  7.11k|    {
11486|  7.11k|        return -4;
11487|  7.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE26max_exponent_round_to_evenEv:
11489|  5.55k|    {
11490|  5.55k|        return 23;
11491|  5.55k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE14infinite_powerEv:
11473|  17.2k|    {
11474|  17.2k|        return 0x7FF;
11475|  17.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE8sign_bitEv:
11465|  18.2k|    {
11466|  18.2k|        return 63;
11467|  18.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE14convert_numberENS1_10lexer_baseISG_E10token_typeEm:
14810|  18.6k|    {
14811|       |        // accept() only needs to know whether the input is valid, so it sets
14812|       |        // discard_values (see json.hpp), and an integer token whose
14813|       |        // digit count shows that it fits is reported without calling
14814|       |        // convert_integer(). A number with up to 18 digits always fits into
14815|       |        // both std::uint64_t and std::int64_t (18 nines is about 1e18, below
14816|       |        // INT64_MAX, which is about 9.2e18). Longer tokens take the exact path
14817|       |        // below, including the fallback to floating point when the value does
14818|       |        // not fit.
14819|       |        //
14820|       |        // With a narrower number_unsigned_t/number_integer_t (e.g.
14821|       |        // std::uint32_t), the exact path would reclassify some of these tokens
14822|       |        // as (finite) floats, while this check reports integers. That does not
14823|       |        // change the result of accept(): it always parses through
14824|       |        // json_sax_acceptor, whose number callbacks discard their argument and
14825|       |        // return true, and the parser rejects neither integers nor finite
14826|       |        // floats. value_unsigned/value_integer are left unset here, so a caller
14827|       |        // that reads the converted value must not set discard_values.
14828|       |        //
14829|       |        // On contiguous input, scan_number_bulk_contiguous() converts integer
14830|       |        // tokens itself and does not pass them to this function, unless
14831|       |        // JSON_DIAGNOSTIC_POSITIONS is enabled. This check is therefore only
14832|       |        // reached for input without bulk access (e.g. streams), with
14833|       |        // JSON_DIAGNOSTIC_POSITIONS, or when scan_number_bulk_contiguous()
14834|       |        // falls back to scan_number().
14835|  18.6k|        if (discard_values())
  ------------------
  |  Branch (14835:13): [True: 0, False: 18.6k]
  ------------------
14836|      0|        {
14837|      0|            constexpr std::size_t safe_digit_count = 18;
14838|      0|            if (number_type == token_type::value_unsigned && token_buffer.size() <= safe_digit_count)
  ------------------
  |  Branch (14838:17): [True: 0, False: 0]
  |  Branch (14838:62): [True: 0, False: 0]
  ------------------
14839|      0|            {
14840|      0|                return token_type::value_unsigned;
14841|      0|            }
14842|      0|            if (number_type == token_type::value_integer && token_buffer.size() - 1 <= safe_digit_count)
  ------------------
  |  Branch (14842:17): [True: 0, False: 0]
  |  Branch (14842:61): [True: 0, False: 0]
  ------------------
14843|      0|            {
14844|      0|                return token_type::value_integer;
14845|      0|            }
14846|      0|        }
14847|       |
14848|  18.6k|        const char* const num_begin = token_buffer.data();
14849|  18.6k|        const char* const num_end = num_begin + token_buffer.size();
14850|       |
14851|  18.6k|        if (number_type != token_type::value_float)
  ------------------
  |  Branch (14851:13): [True: 8.38k, False: 10.2k]
  ------------------
14852|  8.38k|        {
14853|  8.38k|            const token_type integer_result = convert_integer(number_type, num_begin, num_end);
14854|  8.38k|            if (integer_result != token_type::uninitialized)
  ------------------
  |  Branch (14854:17): [True: 8.38k, False: 0]
  ------------------
14855|  8.38k|            {
14856|  8.38k|                return integer_result;
14857|  8.38k|            }
14858|  8.38k|        }
14859|       |
14860|       |        // this code is reached if we parse a floating-point number or if an
14861|       |        // integer conversion above overflowed. float and double (and long
14862|       |        // double where it is binary64) are converted by the library itself,
14863|       |        // correctly rounded and independent of the locale; other long double
14864|       |        // formats use std::from_chars when available, otherwise the
14865|       |        // locale-aware strtold.
14866|  10.2k|        if (convert_float_fast(num_begin, num_end, decimal_point_position, mantissa_end, value_float))
  ------------------
  |  Branch (14866:13): [True: 10.2k, False: 0]
  ------------------
14867|  10.2k|        {
14868|  10.2k|            return token_type::value_float;
14869|  10.2k|        }
14870|       |
14871|      0|        convert_float_locale_aware(token_buffer, decimal_point_position, value_float);
14872|      0|        return token_type::value_float;
14873|  10.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18convert_float_fastIdEEbPKcS4_mmRT_:
12235|  10.2k|{
12236|  10.2k|    return convert_float_fast(first, last, decimal_point_position, mantissa_end, value,
12237|  10.2k|                              std::integral_constant<bool, has_native_float_format<FloatType>::value> {});
12238|  10.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail18convert_float_fastIdEEbPKcS4_mmRT_NSt3__117integral_constantIbLb1EEE:
12202|  10.2k|{
12203|  10.2k|    value = parse_float_native<FloatType>(first, last, decimal_point_position, mantissa_end);
12204|  10.2k|    return true;
12205|  10.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail18parse_float_nativeIdEET_PKcS5_mm:
12146|  10.2k|{
12147|  10.2k|    using result_type = native_float_t<FloatType>;
12148|  10.2k|    using format = ieee_binary_format<std::numeric_limits<FloatType>::digits>;
12149|  10.2k|    static_assert(std::numeric_limits<result_type>::digits == std::numeric_limits<FloatType>::digits, "unexpected float format");
12150|       |
12151|  10.2k|    const float_significand s = parse_float_significand(first, last, decimal_point_position, mantissa_end);
12152|  10.2k|    if (JSON_HEDLEY_LIKELY(!s.truncated))
  ------------------
  |  | 1696|  10.2k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 3.90k, False: 6.39k]
  |  |  ------------------
  ------------------
12153|  3.90k|    {
12154|  3.90k|        return decimal_to_float<FloatType>(s);
12155|  3.90k|    }
12156|       |
12157|  6.39k|    std::uint64_t bits = eisel_lemire<format>(s.exponent, s.w);
12158|  6.39k|    if (JSON_HEDLEY_UNLIKELY(bits != eisel_lemire<format>(s.exponent, s.w + 1)))
  ------------------
  |  | 1697|  6.39k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2.02k, False: 4.36k]
  |  |  ------------------
  ------------------
12159|  2.02k|    {
12160|  2.02k|        bits = digit_comparison<format>(first, last, bits);
12161|  2.02k|    }
12162|  6.39k|    result_type value{};
12163|  6.39k|    float_from_bits(bits | (s.negative ? (std::uint64_t{1} << format::sign_bit()) : 0u), value);
  ------------------
  |  Branch (12163:29): [True: 612, False: 5.77k]
  ------------------
12164|  6.39k|    const FloatType result = value;
12165|  6.39k|    return result;
12166|  10.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail23parse_float_significandEPKcS3_mm:
11677|  10.2k|{
11678|  10.2k|    float_significand s;
11679|  10.2k|    const char* p = first;
11680|  10.2k|    s.negative = *p == '-';
11681|  10.2k|    p += s.negative ? 1 : 0;
  ------------------
  |  Branch (11681:10): [True: 1.07k, False: 9.22k]
  ------------------
11682|  10.2k|    const bool has_dot = decimal_point_position != std::string::npos;
11683|  10.2k|    const char* const mantissa_last = first + mantissa_end;
11684|  10.2k|    const char* const integer_last = has_dot ? first + decimal_point_position : mantissa_last;
  ------------------
  |  Branch (11684:38): [True: 5.02k, False: 5.27k]
  ------------------
11685|       |
11686|  10.2k|    std::uint64_t w = 0;
11687|  10.2k|    int remaining = 19; // digits that still fit into w
11688|  10.2k|    if (*p != '0') // the integer part is "0" or [1-9][0-9]*
  ------------------
  |  Branch (11688:9): [True: 8.96k, False: 1.33k]
  ------------------
11689|  8.96k|    {
11690|  8.96k|        p = accumulate_significant_digits(p, integer_last, remaining, w);
11691|  8.96k|        s.exponent = integer_last - p;
11692|  8.96k|        s.truncated = has_nonzero_digit(p, integer_last);
11693|  8.96k|    }
11694|       |
11695|  10.2k|    if (has_dot)
  ------------------
  |  Branch (11695:9): [True: 5.02k, False: 5.27k]
  ------------------
11696|  5.02k|    {
11697|  5.02k|        p = integer_last + 1;
11698|  5.02k|        if (w == 0)
  ------------------
  |  Branch (11698:13): [True: 1.33k, False: 3.69k]
  ------------------
11699|  1.33k|        {
11700|       |            // zeros after the decimal point of "0." are not significant
11701|  1.33k|            const char* const zeros = p;
11702|  7.97k|            while (p != mantissa_last && *p == '0')
  ------------------
  |  Branch (11702:20): [True: 7.80k, False: 174]
  |  Branch (11702:42): [True: 6.64k, False: 1.15k]
  ------------------
11703|  6.64k|            {
11704|  6.64k|                ++p;
11705|  6.64k|            }
11706|  1.33k|            s.exponent -= p - zeros;
11707|  1.33k|        }
11708|  5.02k|        const char* const digits = p;
11709|  5.02k|        p = accumulate_significant_digits(p, mantissa_last, remaining, w);
11710|  5.02k|        s.exponent -= p - digits;
11711|  5.02k|        s.truncated = s.truncated || has_nonzero_digit(p, mantissa_last);
  ------------------
  |  Branch (11711:23): [True: 168, False: 4.85k]
  |  Branch (11711:38): [True: 2.67k, False: 2.18k]
  ------------------
11712|  5.02k|    }
11713|       |
11714|  10.2k|    if (mantissa_last != last)
  ------------------
  |  Branch (11714:9): [True: 3.52k, False: 6.77k]
  ------------------
11715|  3.52k|    {
11716|  3.52k|        s.exponent += parse_float_exponent(mantissa_last + 1, last);
11717|  3.52k|    }
11718|  10.2k|    s.w = w;
11719|  10.2k|    return s;
11720|  10.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail29accumulate_significant_digitsEPKcS3_RiRm:
11618|  13.9k|{
11619|  33.2k|    while (remaining >= 8 && last - p >= 8)
  ------------------
  |  Branch (11619:12): [True: 21.4k, False: 11.7k]
  |  Branch (11619:30): [True: 19.2k, False: 2.19k]
  ------------------
11620|  19.2k|    {
11621|  19.2k|        w = (w * 100000000u) + parse_eight_digits(read_eight_bytes(p));
11622|  19.2k|        p += 8;
11623|  19.2k|        remaining -= 8;
11624|  19.2k|    }
11625|  50.3k|    for (; remaining > 0 && p != last; ++p, --remaining)
  ------------------
  |  Branch (11625:12): [True: 39.9k, False: 10.3k]
  |  Branch (11625:29): [True: 36.3k, False: 3.62k]
  ------------------
11626|  36.3k|    {
11627|  36.3k|        w = (w * 10u) + static_cast<std::uint64_t>(*p - '0');
11628|  36.3k|    }
11629|  13.9k|    return p;
11630|  13.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail17has_nonzero_digitEPKcS3_:
11597|  13.8k|{
11598|  32.8k|    for (; first != last; ++first)
  ------------------
  |  Branch (11598:12): [True: 25.3k, False: 7.42k]
  ------------------
11599|  25.3k|    {
11600|  25.3k|        if (*first != '0')
  ------------------
  |  Branch (11600:13): [True: 6.39k, False: 18.9k]
  ------------------
11601|  6.39k|        {
11602|  6.39k|            return true;
11603|  6.39k|        }
11604|  25.3k|    }
11605|  7.42k|    return false;
11606|  13.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail20parse_float_exponentEPKcS3_:
11635|  3.94k|{
11636|  3.94k|    const bool negative = *first == '-';
11637|  3.94k|    first += (*first == '-' || *first == '+') ? 1 : 0;
  ------------------
  |  Branch (11637:15): [True: 2.22k, False: 1.71k]
  |  Branch (11637:32): [True: 138, False: 1.57k]
  ------------------
11638|  3.94k|    constexpr std::int64_t saturation = 100000000000000000; // 10^17
11639|  3.94k|    std::int64_t value = 0;
11640|  34.7k|    for (; first != last; ++first)
  ------------------
  |  Branch (11640:12): [True: 30.7k, False: 3.94k]
  ------------------
11641|  30.7k|    {
11642|  30.7k|        if (value < saturation)
  ------------------
  |  Branch (11642:13): [True: 29.3k, False: 1.38k]
  ------------------
11643|  29.3k|        {
11644|  29.3k|            value = (value * 10) + (*first - '0');
11645|  29.3k|        }
11646|  30.7k|    }
11647|  3.94k|    return negative ? -value : value;
  ------------------
  |  Branch (11647:12): [True: 2.22k, False: 1.71k]
  ------------------
11648|  3.94k|}
_ZN8nlohmann16json_abi_v3_12_06detail16digit_comparisonINS1_18ieee_binary_formatILi53EEEEEmPKcS6_m:
11938|  2.02k|{
11939|  2.02k|    const char* p = first + ((*first == '-') ? 1 : 0);
  ------------------
  |  Branch (11939:30): [True: 48, False: 1.98k]
  ------------------
11940|       |
11941|       |    // D, in chunks of up to 9 digits, and s
11942|  2.02k|    float_bigint digits(0);
11943|  2.02k|    std::int64_t count = 0;
11944|  2.02k|    std::int64_t point = 0; // the value is 0.D... * 10^point
11945|  2.02k|    bool truncated = false;
11946|  2.02k|    std::uint32_t chunk = 0;
11947|  2.02k|    int chunk_digits = 0;
11948|  2.02k|    static const std::array<std::uint32_t, 10> powers_of_ten = {{1u, 10u, 100u, 1000u, 10000u, 100000u, 1000000u, 10000000u, 100000000u, 1000000000u}};
11949|  2.02k|    const auto append = [&](char c) noexcept
11950|  2.02k|    {
11951|  2.02k|        if (count < Format::max_digits())
11952|  2.02k|        {
11953|  2.02k|            chunk = (chunk * 10u) + static_cast<std::uint32_t>(c - '0');
11954|  2.02k|            ++count;
11955|  2.02k|            if (++chunk_digits == 9)
11956|  2.02k|            {
11957|  2.02k|                digits.multiply_add(powers_of_ten[9], chunk);
11958|  2.02k|                chunk = 0;
11959|  2.02k|                chunk_digits = 0;
11960|  2.02k|            }
11961|  2.02k|        }
11962|  2.02k|        else
11963|  2.02k|        {
11964|  2.02k|            truncated = truncated || c != '0';
11965|  2.02k|        }
11966|  2.02k|    };
11967|  2.02k|    bool significant = false;
11968|  36.4k|    for (; p != last && *p >= '0' && *p <= '9'; ++p)
  ------------------
  |  Branch (11968:12): [True: 35.8k, False: 648]
  |  Branch (11968:25): [True: 34.7k, False: 1.09k]
  |  Branch (11968:38): [True: 34.4k, False: 282]
  ------------------
11969|  34.4k|    {
11970|  34.4k|        significant = significant || *p != '0';
  ------------------
  |  Branch (11970:23): [True: 32.4k, False: 2.02k]
  |  Branch (11970:38): [True: 1.72k, False: 306]
  ------------------
11971|  34.4k|        if (significant)
  ------------------
  |  Branch (11971:13): [True: 34.1k, False: 306]
  ------------------
11972|  34.1k|        {
11973|  34.1k|            append(*p);
11974|  34.1k|            ++point;
11975|  34.1k|        }
11976|  34.4k|    }
11977|  2.02k|    if (p != last && *p == '.')
  ------------------
  |  Branch (11977:9): [True: 1.38k, False: 648]
  |  Branch (11977:22): [True: 1.09k, False: 282]
  ------------------
11978|  1.09k|    {
11979|  28.4k|        for (++p; p != last && *p >= '0' && *p <= '9'; ++p)
  ------------------
  |  Branch (11979:19): [True: 27.4k, False: 960]
  |  Branch (11979:32): [True: 27.4k, False: 0]
  |  Branch (11979:45): [True: 27.3k, False: 138]
  ------------------
11980|  27.3k|        {
11981|  27.3k|            significant = significant || *p != '0';
  ------------------
  |  Branch (11981:27): [True: 26.7k, False: 528]
  |  Branch (11981:42): [True: 306, False: 222]
  ------------------
11982|  27.3k|            if (significant)
  ------------------
  |  Branch (11982:17): [True: 27.0k, False: 222]
  ------------------
11983|  27.0k|            {
11984|  27.0k|                append(*p);
11985|  27.0k|            }
11986|    222|            else
11987|    222|            {
11988|    222|                --point;
11989|    222|            }
11990|  27.3k|        }
11991|  1.09k|    }
11992|  2.02k|    if (chunk_digits != 0)
  ------------------
  |  Branch (11992:9): [True: 1.86k, False: 168]
  ------------------
11993|  1.86k|    {
11994|  1.86k|        digits.multiply_add(powers_of_ten[static_cast<std::size_t>(chunk_digits)], chunk);
11995|  1.86k|    }
11996|  2.02k|    if (p != last)
  ------------------
  |  Branch (11996:9): [True: 420, False: 1.60k]
  ------------------
11997|    420|    {
11998|    420|        point += parse_float_exponent(p + 1, last);
11999|    420|    }
12000|  2.02k|    const std::int64_t s = point - count; // v = D * 10^s
12001|       |
12002|       |    // the midpoint above the lower candidate
12003|  2.02k|    constexpr int mantissa_bits = Format::mantissa_bits();
12004|  2.02k|    const std::uint64_t exponent_field = lower >> mantissa_bits;
12005|  2.02k|    std::uint64_t mantissa = lower & ((std::uint64_t{1} << mantissa_bits) - 1);
12006|  2.02k|    std::int64_t e = 1 + Format::minimum_exponent() - mantissa_bits; // of the smallest subnormal number
12007|  2.02k|    if (exponent_field != 0)
  ------------------
  |  Branch (12007:9): [True: 1.91k, False: 114]
  ------------------
12008|  1.91k|    {
12009|  1.91k|        mantissa |= std::uint64_t{1} << mantissa_bits;
12010|  1.91k|        e += static_cast<std::int64_t>(exponent_field) - 1;
12011|  1.91k|    }
12012|  2.02k|    float_bigint midpoint((2 * mantissa) + 1);
12013|  2.02k|    const std::int64_t midpoint_exponent = e - 1; // m = midpoint * 2^midpoint_exponent
12014|       |
12015|       |    // compare D * 5^s * 2^s with midpoint * 2^midpoint_exponent
12016|  2.02k|    if (s >= 0)
  ------------------
  |  Branch (12016:9): [True: 894, False: 1.13k]
  ------------------
12017|    894|    {
12018|    894|        digits.multiply_power_of_five(s);
12019|    894|    }
12020|  1.13k|    else
12021|  1.13k|    {
12022|  1.13k|        midpoint.multiply_power_of_five(-s);
12023|  1.13k|    }
12024|  2.02k|    const std::int64_t shift = s - midpoint_exponent;
12025|  2.02k|    if (shift >= 0)
  ------------------
  |  Branch (12025:9): [True: 696, False: 1.33k]
  ------------------
12026|    696|    {
12027|    696|        digits.shift_left(shift);
12028|    696|    }
12029|  1.33k|    else
12030|  1.33k|    {
12031|  1.33k|        midpoint.shift_left(-shift);
12032|  1.33k|    }
12033|  2.02k|    const int order = digits.compare(midpoint);
12034|  2.02k|    const bool round_up = order > 0 || (order == 0 && (truncated || (mantissa & 1u) != 0));
  ------------------
  |  Branch (12034:27): [True: 684, False: 1.34k]
  |  Branch (12034:41): [True: 288, False: 1.05k]
  |  Branch (12034:56): [True: 0, False: 288]
  |  Branch (12034:69): [True: 36, False: 252]
  ------------------
12035|  2.02k|    return lower + (round_up ? 1u : 0u);
  ------------------
  |  Branch (12035:21): [True: 720, False: 1.30k]
  ------------------
12036|  2.02k|}
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigintC2Em:
11821|  4.05k|    {
11822|  8.11k|        for (; value != 0; value >>= 32u)
  ------------------
  |  Branch (11822:16): [True: 4.05k, False: 4.05k]
  ------------------
11823|  4.05k|        {
11824|  4.05k|            limbs[count++] = static_cast<std::uint32_t>(value);
11825|  4.05k|        }
11826|  4.05k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail16digit_comparisonINS1_18ieee_binary_formatILi53EEEEEmPKcS6_mENKUlcE_clEc:
11950|  61.2k|    {
11951|  61.2k|        if (count < Format::max_digits())
  ------------------
  |  Branch (11951:13): [True: 61.2k, False: 0]
  ------------------
11952|  61.2k|        {
11953|  61.2k|            chunk = (chunk * 10u) + static_cast<std::uint32_t>(c - '0');
11954|  61.2k|            ++count;
11955|  61.2k|            if (++chunk_digits == 9)
  ------------------
  |  Branch (11955:17): [True: 6.22k, False: 54.9k]
  ------------------
11956|  6.22k|            {
11957|  6.22k|                digits.multiply_add(powers_of_ten[9], chunk);
11958|  6.22k|                chunk = 0;
11959|  6.22k|                chunk_digits = 0;
11960|  6.22k|            }
11961|  61.2k|        }
11962|      0|        else
11963|      0|        {
11964|      0|            truncated = truncated || c != '0';
  ------------------
  |  Branch (11964:25): [True: 0, False: 0]
  |  Branch (11964:38): [True: 0, False: 0]
  ------------------
11965|      0|        }
11966|  61.2k|    };
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE10max_digitsEv:
11501|  61.2k|    {
11502|  61.2k|        return 769;
11503|  61.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigint12multiply_addEjj:
11830|  15.1k|    {
11831|  15.1k|        std::uint64_t carry = summand;
11832|   104k|        for (std::size_t i = 0; i < count; ++i)
  ------------------
  |  Branch (11832:33): [True: 88.8k, False: 15.1k]
  ------------------
11833|  88.8k|        {
11834|  88.8k|            const std::uint64_t product = (static_cast<std::uint64_t>(limbs[i]) * factor) + carry;
11835|  88.8k|            limbs[i] = static_cast<std::uint32_t>(product);
11836|  88.8k|            carry = product >> 32u;
11837|  88.8k|        }
11838|  15.1k|        if (carry != 0)
  ------------------
  |  Branch (11838:13): [True: 13.1k, False: 2.06k]
  ------------------
11839|  13.1k|        {
11840|  13.1k|            JSON_ASSERT(count < limbs.size());
  ------------------
  |  | 2643|  13.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11840:13): [True: 13.1k, False: 0]
  ------------------
11841|  13.1k|            limbs[count++] = static_cast<std::uint32_t>(carry);
11842|  13.1k|        }
11843|  15.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigint22multiply_power_of_fiveEl:
11847|  2.02k|    {
11848|  2.02k|        static const std::array<std::uint32_t, 14> powers =
11849|  2.02k|        {
11850|  2.02k|            {1u, 5u, 25u, 125u, 625u, 3125u, 15625u, 78125u, 390625u, 1953125u, 9765625u, 48828125u, 244140625u, 1220703125u}
11851|  2.02k|        };
11852|  7.10k|        for (; n >= 13; n -= 13)
  ------------------
  |  Branch (11852:16): [True: 5.07k, False: 2.02k]
  ------------------
11853|  5.07k|        {
11854|  5.07k|            multiply_add(powers[13], 0);
11855|  5.07k|        }
11856|  2.02k|        multiply_add(powers[static_cast<std::size_t>(n)], 0);
11857|  2.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigint10shift_leftEl:
11861|  2.02k|    {
11862|  2.02k|        if (count == 0)
  ------------------
  |  Branch (11862:13): [True: 0, False: 2.02k]
  ------------------
11863|      0|        {
11864|      0|            return;
11865|      0|        }
11866|  2.02k|        const auto limb_shift = static_cast<std::size_t>(n / 32);
11867|  2.02k|        const auto bit_shift = static_cast<unsigned>(n % 32);
11868|  2.02k|        JSON_ASSERT(count + limb_shift + 1 <= limbs.size());
  ------------------
  |  | 2643|  2.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11868:9): [True: 2.02k, False: 0]
  ------------------
11869|  2.02k|        if (bit_shift != 0)
  ------------------
  |  Branch (11869:13): [True: 1.78k, False: 246]
  ------------------
11870|  1.78k|        {
11871|  1.78k|            std::uint32_t carry = 0;
11872|  6.83k|            for (std::size_t i = 0; i < count; ++i)
  ------------------
  |  Branch (11872:37): [True: 5.05k, False: 1.78k]
  ------------------
11873|  5.05k|            {
11874|  5.05k|                const std::uint32_t limb = limbs[i];
11875|  5.05k|                limbs[i] = (limb << bit_shift) | carry;
11876|  5.05k|                carry = limb >> (32u - bit_shift);
11877|  5.05k|            }
11878|  1.78k|            if (carry != 0)
  ------------------
  |  Branch (11878:17): [True: 1.03k, False: 744]
  ------------------
11879|  1.03k|            {
11880|  1.03k|                limbs[count++] = carry;
11881|  1.03k|            }
11882|  1.78k|        }
11883|  2.02k|        if (limb_shift != 0)
  ------------------
  |  Branch (11883:13): [True: 774, False: 1.25k]
  ------------------
11884|    774|        {
11885|  3.60k|            for (std::size_t i = count; i-- > 0;)
  ------------------
  |  Branch (11885:41): [True: 2.83k, False: 774]
  ------------------
11886|  2.83k|            {
11887|  2.83k|                limbs[i + limb_shift] = limbs[i];
11888|  2.83k|            }
11889|  5.37k|            for (std::size_t i = 0; i < limb_shift; ++i)
  ------------------
  |  Branch (11889:37): [True: 4.60k, False: 774]
  ------------------
11890|  4.60k|            {
11891|  4.60k|                limbs[i] = 0;
11892|  4.60k|            }
11893|    774|            count += limb_shift;
11894|    774|        }
11895|  2.02k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12float_bigint7compareERKS2_:
11899|  2.02k|    {
11900|  2.02k|        if (count != other.count)
  ------------------
  |  Branch (11900:13): [True: 0, False: 2.02k]
  ------------------
11901|      0|        {
11902|      0|            return count < other.count ? -1 : 1;
  ------------------
  |  Branch (11902:20): [True: 0, False: 0]
  ------------------
11903|      0|        }
11904|  6.18k|        for (std::size_t i = count; i-- > 0;)
  ------------------
  |  Branch (11904:37): [True: 5.89k, False: 288]
  ------------------
11905|  5.89k|        {
11906|  5.89k|            if (limbs[i] != other.limbs[i])
  ------------------
  |  Branch (11906:17): [True: 1.74k, False: 4.15k]
  ------------------
11907|  1.74k|            {
11908|  1.74k|                return limbs[i] < other.limbs[i] ? -1 : 1;
  ------------------
  |  Branch (11908:24): [True: 1.05k, False: 684]
  ------------------
11909|  1.74k|            }
11910|  5.89k|        }
11911|    288|        return 0;
11912|  2.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE11scan_numberEv:
14466|  10.2k|    {
14467|       |        // reset token_buffer to store the number's bytes
14468|  10.2k|        reset();
14469|       |
14470|       |        // the type of the parsed number; initially set to unsigned; will be
14471|       |        // changed if minus sign, decimal point, or exponent is read
14472|  10.2k|        token_type number_type = token_type::value_unsigned;
14473|       |
14474|       |        // offset just past the last mantissa byte in token_buffer (i.e. the
14475|       |        // index of 'e'/'E', or the whole token when there is no exponent).
14476|       |        // convert_number() uses it to split the token; npos means
14477|       |        // "not seen an exponent yet" and is resolved at scan_number_done
14478|  10.2k|        std::size_t mantissa_end = std::string::npos;
14479|       |
14480|       |        // state (init): we just found out we need to scan a number
14481|  10.2k|        switch (current)
14482|  10.2k|        {
14483|    390|            case '-':
  ------------------
  |  Branch (14483:13): [True: 390, False: 9.84k]
  ------------------
14484|    390|            {
14485|    390|                add(current);
14486|    390|                goto scan_number_minus;
14487|      0|            }
14488|       |
14489|  1.11k|            case '0':
  ------------------
  |  Branch (14489:13): [True: 1.11k, False: 9.12k]
  ------------------
14490|  1.11k|            {
14491|  1.11k|                add(current);
14492|  1.11k|                goto scan_number_zero;
14493|      0|            }
14494|       |
14495|    894|            case '1':
  ------------------
  |  Branch (14495:13): [True: 894, False: 9.33k]
  ------------------
14496|  2.40k|            case '2':
  ------------------
  |  Branch (14496:13): [True: 1.51k, False: 8.71k]
  ------------------
14497|  3.18k|            case '3':
  ------------------
  |  Branch (14497:13): [True: 780, False: 9.45k]
  ------------------
14498|  4.86k|            case '4':
  ------------------
  |  Branch (14498:13): [True: 1.67k, False: 8.55k]
  ------------------
14499|  5.74k|            case '5':
  ------------------
  |  Branch (14499:13): [True: 882, False: 9.34k]
  ------------------
14500|  6.67k|            case '6':
  ------------------
  |  Branch (14500:13): [True: 930, False: 9.30k]
  ------------------
14501|  7.20k|            case '7':
  ------------------
  |  Branch (14501:13): [True: 534, False: 9.69k]
  ------------------
14502|  8.16k|            case '8':
  ------------------
  |  Branch (14502:13): [True: 960, False: 9.27k]
  ------------------
14503|  8.73k|            case '9':
  ------------------
  |  Branch (14503:13): [True: 564, False: 9.66k]
  ------------------
14504|  8.73k|            {
14505|  8.73k|                add(current);
14506|  8.73k|                goto scan_number_any1;
14507|  8.16k|            }
14508|       |
14509|       |            // all other characters are rejected outside scan_number()
14510|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (14510:13): [True: 0, False: 10.2k]
  ------------------
14511|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14511:17): [Folded, False: 0]
  ------------------
14512|  10.2k|        }
14513|       |
14514|    390|scan_number_minus:
14515|       |        // state: we just parsed a leading minus sign
14516|    390|        number_type = token_type::value_integer;
14517|    390|        switch (get())
14518|    390|        {
14519|     24|            case '0':
  ------------------
  |  Branch (14519:13): [True: 24, False: 366]
  ------------------
14520|     24|            {
14521|     24|                add(current);
14522|     24|                goto scan_number_zero;
14523|      0|            }
14524|       |
14525|     24|            case '1':
  ------------------
  |  Branch (14525:13): [True: 24, False: 366]
  ------------------
14526|     42|            case '2':
  ------------------
  |  Branch (14526:13): [True: 18, False: 372]
  ------------------
14527|     66|            case '3':
  ------------------
  |  Branch (14527:13): [True: 24, False: 366]
  ------------------
14528|     84|            case '4':
  ------------------
  |  Branch (14528:13): [True: 18, False: 372]
  ------------------
14529|    102|            case '5':
  ------------------
  |  Branch (14529:13): [True: 18, False: 372]
  ------------------
14530|    132|            case '6':
  ------------------
  |  Branch (14530:13): [True: 30, False: 360]
  ------------------
14531|    150|            case '7':
  ------------------
  |  Branch (14531:13): [True: 18, False: 372]
  ------------------
14532|    168|            case '8':
  ------------------
  |  Branch (14532:13): [True: 18, False: 372]
  ------------------
14533|    186|            case '9':
  ------------------
  |  Branch (14533:13): [True: 18, False: 372]
  ------------------
14534|    186|            {
14535|    186|                add(current);
14536|    186|                goto scan_number_any1;
14537|    168|            }
14538|       |
14539|    180|            default:
  ------------------
  |  Branch (14539:13): [True: 180, False: 210]
  ------------------
14540|    180|            {
14541|    180|                error_message = "invalid number; expected digit after '-'";
14542|    180|                return token_type::parse_error;
14543|    168|            }
14544|    390|        }
14545|       |
14546|  1.13k|scan_number_zero:
14547|       |        // state: we just parse a zero (maybe with a leading minus sign)
14548|  1.13k|        switch (get())
14549|  1.13k|        {
14550|    150|            case '.':
  ------------------
  |  Branch (14550:13): [True: 150, False: 984]
  ------------------
14551|    150|            {
14552|    150|                add(current);
14553|    150|                decimal_point_position = token_buffer.size() - 1;
14554|    150|                goto scan_number_decimal1;
14555|      0|            }
14556|       |
14557|     54|            case 'e':
  ------------------
  |  Branch (14557:13): [True: 54, False: 1.08k]
  ------------------
14558|    120|            case 'E':
  ------------------
  |  Branch (14558:13): [True: 66, False: 1.06k]
  ------------------
14559|    120|            {
14560|    120|                add(current);
14561|    120|                goto scan_number_exponent;
14562|     54|            }
14563|       |
14564|    864|            default:
  ------------------
  |  Branch (14564:13): [True: 864, False: 270]
  ------------------
14565|    864|                goto scan_number_done;
14566|  1.13k|        }
14567|       |
14568|  18.5k|scan_number_any1:
14569|       |        // state: we just parsed a number 0-9 (maybe with a leading minus sign)
14570|  18.5k|        switch (get())
14571|  18.5k|        {
14572|  2.45k|            case '0':
  ------------------
  |  Branch (14572:13): [True: 2.45k, False: 16.1k]
  ------------------
14573|  3.11k|            case '1':
  ------------------
  |  Branch (14573:13): [True: 660, False: 17.9k]
  ------------------
14574|  3.75k|            case '2':
  ------------------
  |  Branch (14574:13): [True: 642, False: 17.9k]
  ------------------
14575|  4.39k|            case '3':
  ------------------
  |  Branch (14575:13): [True: 636, False: 17.9k]
  ------------------
14576|  5.00k|            case '4':
  ------------------
  |  Branch (14576:13): [True: 612, False: 17.9k]
  ------------------
14577|  5.71k|            case '5':
  ------------------
  |  Branch (14577:13): [True: 708, False: 17.8k]
  ------------------
14578|  6.59k|            case '6':
  ------------------
  |  Branch (14578:13): [True: 882, False: 17.6k]
  ------------------
14579|  7.17k|            case '7':
  ------------------
  |  Branch (14579:13): [True: 582, False: 17.9k]
  ------------------
14580|  7.79k|            case '8':
  ------------------
  |  Branch (14580:13): [True: 618, False: 17.9k]
  ------------------
14581|  9.64k|            case '9':
  ------------------
  |  Branch (14581:13): [True: 1.85k, False: 16.7k]
  ------------------
14582|  9.64k|            {
14583|  9.64k|                add(current);
14584|  9.64k|                goto scan_number_any1;
14585|  7.79k|            }
14586|       |
14587|    732|            case '.':
  ------------------
  |  Branch (14587:13): [True: 732, False: 17.8k]
  ------------------
14588|    732|            {
14589|    732|                add(current);
14590|    732|                decimal_point_position = token_buffer.size() - 1;
14591|    732|                goto scan_number_decimal1;
14592|  7.79k|            }
14593|       |
14594|    378|            case 'e':
  ------------------
  |  Branch (14594:13): [True: 378, False: 18.1k]
  ------------------
14595|    660|            case 'E':
  ------------------
  |  Branch (14595:13): [True: 282, False: 18.2k]
  ------------------
14596|    660|            {
14597|    660|                add(current);
14598|    660|                goto scan_number_exponent;
14599|    378|            }
14600|       |
14601|  7.52k|            default:
  ------------------
  |  Branch (14601:13): [True: 7.52k, False: 11.0k]
  ------------------
14602|  7.52k|                goto scan_number_done;
14603|  18.5k|        }
14604|       |
14605|    882|scan_number_decimal1:
14606|       |        // state: we just parsed a decimal point
14607|    882|        number_type = token_type::value_float;
14608|    882|        switch (get())
14609|    882|        {
14610|    114|            case '0':
  ------------------
  |  Branch (14610:13): [True: 114, False: 768]
  ------------------
14611|    168|            case '1':
  ------------------
  |  Branch (14611:13): [True: 54, False: 828]
  ------------------
14612|    204|            case '2':
  ------------------
  |  Branch (14612:13): [True: 36, False: 846]
  ------------------
14613|    270|            case '3':
  ------------------
  |  Branch (14613:13): [True: 66, False: 816]
  ------------------
14614|    306|            case '4':
  ------------------
  |  Branch (14614:13): [True: 36, False: 846]
  ------------------
14615|    336|            case '5':
  ------------------
  |  Branch (14615:13): [True: 30, False: 852]
  ------------------
14616|    378|            case '6':
  ------------------
  |  Branch (14616:13): [True: 42, False: 840]
  ------------------
14617|    414|            case '7':
  ------------------
  |  Branch (14617:13): [True: 36, False: 846]
  ------------------
14618|    432|            case '8':
  ------------------
  |  Branch (14618:13): [True: 18, False: 864]
  ------------------
14619|    468|            case '9':
  ------------------
  |  Branch (14619:13): [True: 36, False: 846]
  ------------------
14620|    468|            {
14621|    468|                add(current);
14622|    468|                goto scan_number_decimal2;
14623|    432|            }
14624|       |
14625|    414|            default:
  ------------------
  |  Branch (14625:13): [True: 414, False: 468]
  ------------------
14626|    414|            {
14627|    414|                error_message = "invalid number; expected digit after '.'";
14628|    414|                return token_type::parse_error;
14629|    432|            }
14630|    882|        }
14631|       |
14632|  6.41k|scan_number_decimal2:
14633|       |        // we just parsed at least one number after a decimal point
14634|  6.41k|        switch (get())
14635|  6.41k|        {
14636|    768|            case '0':
  ------------------
  |  Branch (14636:13): [True: 768, False: 5.64k]
  ------------------
14637|  1.38k|            case '1':
  ------------------
  |  Branch (14637:13): [True: 612, False: 5.80k]
  ------------------
14638|  1.99k|            case '2':
  ------------------
  |  Branch (14638:13): [True: 612, False: 5.80k]
  ------------------
14639|  2.64k|            case '3':
  ------------------
  |  Branch (14639:13): [True: 648, False: 5.76k]
  ------------------
14640|  3.19k|            case '4':
  ------------------
  |  Branch (14640:13): [True: 558, False: 5.85k]
  ------------------
14641|  3.74k|            case '5':
  ------------------
  |  Branch (14641:13): [True: 546, False: 5.86k]
  ------------------
14642|  4.28k|            case '6':
  ------------------
  |  Branch (14642:13): [True: 540, False: 5.87k]
  ------------------
14643|  4.83k|            case '7':
  ------------------
  |  Branch (14643:13): [True: 546, False: 5.86k]
  ------------------
14644|  5.36k|            case '8':
  ------------------
  |  Branch (14644:13): [True: 534, False: 5.88k]
  ------------------
14645|  5.94k|            case '9':
  ------------------
  |  Branch (14645:13): [True: 582, False: 5.83k]
  ------------------
14646|  5.94k|            {
14647|  5.94k|                add(current);
14648|  5.94k|                goto scan_number_decimal2;
14649|  5.36k|            }
14650|       |
14651|    210|            case 'e':
  ------------------
  |  Branch (14651:13): [True: 210, False: 6.20k]
  ------------------
14652|    468|            case 'E':
  ------------------
  |  Branch (14652:13): [True: 258, False: 6.15k]
  ------------------
14653|    468|            {
14654|    468|                add(current);
14655|    468|                goto scan_number_exponent;
14656|    210|            }
14657|       |
14658|      0|            default:
  ------------------
  |  Branch (14658:13): [True: 0, False: 6.41k]
  ------------------
14659|      0|                goto scan_number_done;
14660|  6.41k|        }
14661|       |
14662|  1.24k|scan_number_exponent:
14663|       |        // we just parsed an exponent
14664|  1.24k|        number_type = token_type::value_float;
14665|       |        // this label is reached only right after the 'e'/'E' was appended (from
14666|       |        // the zero, any1, and decimal2 states), so the mantissa ends before it
14667|  1.24k|        mantissa_end = token_buffer.size() - 1;
14668|  1.24k|        switch (get())
14669|  1.24k|        {
14670|     60|            case '+':
  ------------------
  |  Branch (14670:13): [True: 60, False: 1.18k]
  ------------------
14671|    126|            case '-':
  ------------------
  |  Branch (14671:13): [True: 66, False: 1.18k]
  ------------------
14672|    126|            {
14673|    126|                add(current);
14674|    126|                goto scan_number_sign;
14675|     60|            }
14676|       |
14677|      0|            case '0':
  ------------------
  |  Branch (14677:13): [True: 0, False: 1.24k]
  ------------------
14678|      0|            case '1':
  ------------------
  |  Branch (14678:13): [True: 0, False: 1.24k]
  ------------------
14679|      0|            case '2':
  ------------------
  |  Branch (14679:13): [True: 0, False: 1.24k]
  ------------------
14680|      0|            case '3':
  ------------------
  |  Branch (14680:13): [True: 0, False: 1.24k]
  ------------------
14681|      0|            case '4':
  ------------------
  |  Branch (14681:13): [True: 0, False: 1.24k]
  ------------------
14682|      0|            case '5':
  ------------------
  |  Branch (14682:13): [True: 0, False: 1.24k]
  ------------------
14683|      0|            case '6':
  ------------------
  |  Branch (14683:13): [True: 0, False: 1.24k]
  ------------------
14684|      0|            case '7':
  ------------------
  |  Branch (14684:13): [True: 0, False: 1.24k]
  ------------------
14685|      0|            case '8':
  ------------------
  |  Branch (14685:13): [True: 0, False: 1.24k]
  ------------------
14686|      0|            case '9':
  ------------------
  |  Branch (14686:13): [True: 0, False: 1.24k]
  ------------------
14687|      0|            {
14688|      0|                add(current);
14689|      0|                goto scan_number_any2;
14690|      0|            }
14691|       |
14692|  1.12k|            default:
  ------------------
  |  Branch (14692:13): [True: 1.12k, False: 126]
  ------------------
14693|  1.12k|            {
14694|  1.12k|                error_message =
14695|  1.12k|                    "invalid number; expected '+', '-', or digit after exponent";
14696|  1.12k|                return token_type::parse_error;
14697|      0|            }
14698|  1.24k|        }
14699|       |
14700|    126|scan_number_sign:
14701|       |        // we just parsed an exponent sign
14702|    126|        switch (get())
14703|    126|        {
14704|      0|            case '0':
  ------------------
  |  Branch (14704:13): [True: 0, False: 126]
  ------------------
14705|      0|            case '1':
  ------------------
  |  Branch (14705:13): [True: 0, False: 126]
  ------------------
14706|      0|            case '2':
  ------------------
  |  Branch (14706:13): [True: 0, False: 126]
  ------------------
14707|      0|            case '3':
  ------------------
  |  Branch (14707:13): [True: 0, False: 126]
  ------------------
14708|      0|            case '4':
  ------------------
  |  Branch (14708:13): [True: 0, False: 126]
  ------------------
14709|      0|            case '5':
  ------------------
  |  Branch (14709:13): [True: 0, False: 126]
  ------------------
14710|      0|            case '6':
  ------------------
  |  Branch (14710:13): [True: 0, False: 126]
  ------------------
14711|      0|            case '7':
  ------------------
  |  Branch (14711:13): [True: 0, False: 126]
  ------------------
14712|      0|            case '8':
  ------------------
  |  Branch (14712:13): [True: 0, False: 126]
  ------------------
14713|      0|            case '9':
  ------------------
  |  Branch (14713:13): [True: 0, False: 126]
  ------------------
14714|      0|            {
14715|      0|                add(current);
14716|      0|                goto scan_number_any2;
14717|      0|            }
14718|       |
14719|    126|            default:
  ------------------
  |  Branch (14719:13): [True: 126, False: 0]
  ------------------
14720|    126|            {
14721|    126|                error_message = "invalid number; expected digit after exponent sign";
14722|    126|                return token_type::parse_error;
14723|      0|            }
14724|    126|        }
14725|       |
14726|      0|scan_number_any2:
14727|       |        // we just parsed a number after the exponent or exponent sign
14728|      0|        switch (get())
14729|      0|        {
14730|      0|            case '0':
  ------------------
  |  Branch (14730:13): [True: 0, False: 0]
  ------------------
14731|      0|            case '1':
  ------------------
  |  Branch (14731:13): [True: 0, False: 0]
  ------------------
14732|      0|            case '2':
  ------------------
  |  Branch (14732:13): [True: 0, False: 0]
  ------------------
14733|      0|            case '3':
  ------------------
  |  Branch (14733:13): [True: 0, False: 0]
  ------------------
14734|      0|            case '4':
  ------------------
  |  Branch (14734:13): [True: 0, False: 0]
  ------------------
14735|      0|            case '5':
  ------------------
  |  Branch (14735:13): [True: 0, False: 0]
  ------------------
14736|      0|            case '6':
  ------------------
  |  Branch (14736:13): [True: 0, False: 0]
  ------------------
14737|      0|            case '7':
  ------------------
  |  Branch (14737:13): [True: 0, False: 0]
  ------------------
14738|      0|            case '8':
  ------------------
  |  Branch (14738:13): [True: 0, False: 0]
  ------------------
14739|      0|            case '9':
  ------------------
  |  Branch (14739:13): [True: 0, False: 0]
  ------------------
14740|      0|            {
14741|      0|                add(current);
14742|      0|                goto scan_number_any2;
14743|      0|            }
14744|       |
14745|      0|            default:
  ------------------
  |  Branch (14745:13): [True: 0, False: 0]
  ------------------
14746|      0|                goto scan_number_done;
14747|      0|        }
14748|       |
14749|  8.38k|scan_number_done:
14750|       |        // unget the character after the number (we only read it to know that
14751|       |        // we are done scanning a number)
14752|  8.38k|        unget();
14753|       |
14754|       |        // no exponent was scanned: the mantissa spans the whole token
14755|  8.38k|        if (mantissa_end == std::string::npos)
  ------------------
  |  Branch (14755:13): [True: 8.38k, False: 0]
  ------------------
14756|  8.38k|        {
14757|  8.38k|            mantissa_end = token_buffer.size();
14758|  8.38k|        }
14759|       |
14760|  8.38k|        return convert_number(number_type, mantissa_end);
14761|      0|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16get_token_stringEv:
15624|  54.9k|    {
15625|  54.9k|        std::vector<char_type> reconstructed;
15626|  54.9k|        const std::vector<char_type>& chars = collect_token_chars(reconstructed, std::integral_constant<bool, lazy_token_string> {});
15627|       |
15628|       |        // escape control characters
15629|  54.9k|        std::string result;
15630|  54.9k|        for (const auto c : chars)
  ------------------
  |  Branch (15630:27): [True: 642k, False: 54.9k]
  ------------------
15631|   642k|        {
15632|   642k|            if (static_cast<unsigned char>(c) <= '\x1F')
  ------------------
  |  Branch (15632:17): [True: 8.73k, False: 633k]
  ------------------
15633|  8.73k|            {
15634|       |                // escape control characters
15635|  8.73k|                std::array<char, 9> cs{{}};
15636|  8.73k|                static_cast<void>((std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
15637|  8.73k|                result += cs.data();
15638|  8.73k|            }
15639|   633k|            else
15640|   633k|            {
15641|       |                // add character as is
15642|   633k|                result.push_back(static_cast<std::string::value_type>(c));
15643|   633k|            }
15644|   642k|        }
15645|       |
15646|  54.9k|        return result;
15647|  54.9k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE19collect_token_charsERNS6_IcSB_EENS4_17integral_constantIbLb1EEE:
15587|  54.9k|    {
15588|  54.9k|        return collect_token_chars_lazy(out, std::integral_constant<bool, adapter_token> {});
15589|  54.9k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE24collect_token_chars_lazyERNS6_IcSB_EENS4_17integral_constantIbLb0EEE:
15601|  54.9k|    {
15602|       |        // a pending unget of a real (non-EOF) character means that character
15603|       |        // was consumed from the input but is not part of the token; EOF is
15604|       |        // never consumed, so it must not be subtracted (mirrors unget())
15605|  54.9k|        const bool pending_real_unget = next_unget && current != char_traits<char_type>::eof();
  ------------------
  |  Branch (15605:41): [True: 8.38k, False: 46.5k]
  |  Branch (15605:55): [True: 0, False: 8.38k]
  ------------------
15606|  54.9k|        const std::size_t stop = ia.get_consumed_count() - (pending_real_unget ? 1u : 0u);
  ------------------
  |  Branch (15606:61): [True: 0, False: 54.9k]
  ------------------
15607|  54.9k|        if (JSON_HEDLEY_LIKELY(stop >= token_string_start))
  ------------------
  |  | 1696|  54.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 54.9k, False: 0]
  |  |  ------------------
  ------------------
15608|  54.9k|        {
15609|  54.9k|            ia.copy_consumed_range(token_string_start, stop, out);
15610|  54.9k|        }
15611|  54.9k|        return out;
15612|  54.9k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E19copy_consumed_rangeINSt3__16vectorIcNS7_9allocatorIcEEEEEEvmmRT_:
10162|  54.9k|    {
10163|  54.9k|        const auto from = std::next(begin, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(first_index));
10164|  54.9k|        const auto to = std::next(begin, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(last_index));
10165|  54.9k|        out.insert(out.end(), from, to);
10166|  54.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA22_KcS9_EEET_DpOT0_:
 5516|  11.7k|{
 5517|  11.7k|    OutStringType str;
 5518|  11.7k|    str.reserve(concat_length(args...));
 5519|  11.7k|    concat_into(str, std::forward<Args>(args)...);
 5520|  11.7k|    return str;
 5521|  11.7k|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA22_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5479|  11.7k|{
 5480|  11.7k|    out.append(std::forward<Arg>(arg));
 5481|  11.7k|    concat_into(out, std::forward<Args>(rest)...);
 5482|  11.7k|}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE18get_number_integerEv:
15450|  1.86k|    {
15451|  1.86k|        return value_integer;
15452|  1.86k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE19get_number_unsignedEv:
15456|  10.4k|    {
15457|  10.4k|        return value_unsigned;
15458|  10.4k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EE16get_number_floatEv:
15462|  19.2k|    {
15463|  19.2k|        return value_float;
15464|  19.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA26_KcRKS9_cEEET_DpOT0_:
 5516|    684|{
 5517|    684|    OutStringType str;
 5518|    684|    str.reserve(concat_length(args...));
 5519|    684|    concat_into(str, std::forward<Args>(args)...);
 5520|    684|    return str;
 5521|    684|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcEEEmPKcDpRKT_:
 5420|    684|{
 5421|    684|    return ::strlen(cstr) + concat_length(rest...);
 5422|    684|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJcEEEmRKT_DpRKT0_:
 5426|    684|{
 5427|    684|    return str.size() + concat_length(rest...);
 5428|    684|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJEEEmcDpRKT_:
 5414|    684|{
 5415|    684|    return 1 + concat_length(rest...);
 5416|    684|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA26_KcJRKS9_cETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5479|    684|{
 5480|    684|    out.append(std::forward<Arg>(arg));
 5481|    684|    concat_into(out, std::forward<Args>(rest)...);
 5482|    684|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5479|    684|{
 5480|    684|    out.append(std::forward<Arg>(arg));
 5481|    684|    concat_into(out, std::forward<Args>(rest)...);
 5482|    684|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcJETnNS3_9enable_ifIXaantsr24detect_string_can_appendIT_T0_EE5valuesr27detect_string_can_append_opISB_SC_EE5valueEiE4typeELi0EEEvRSB_OSC_DpOT1_:
 5488|    684|{
 5489|    684|    out += std::forward<Arg>(arg);
 5490|    684|    concat_into(out, std::forward<Args>(rest)...);
 5491|    684|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EELb0EED2Ev:
13659|  43.1k|    ~lexer() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE16get_ubjson_arrayEv:
22063|   488k|    {
22064|   488k|        std::pair<std::size_t, char_int_type> size_and_type;
22065|   488k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|   488k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 645, False: 487k]
  |  |  ------------------
  ------------------
22066|    645|        {
22067|    645|            return false;
22068|    645|        }
22069|       |
22070|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
22071|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
22072|       |
22073|   487k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22073:13): [True: 20.2k, False: 467k]
  ------------------
22074|  20.2k|        {
22075|  20.2k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
22076|       |
22077|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
22078|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
22079|       |            // that determines size_and_type.first is read, so it is emitted first there to
22080|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
22081|       |            // 'C' elements are read as unsigned bytes, but BJData limits a char to 0..127
22082|  20.2k|            const bool nd_is_char = size_and_type.second == 'C';
22083|  20.2k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (22083:17): [True: 1.38k, False: 18.8k]
  |  Branch (22083:48): [True: 1.20k, False: 17.6k]
  ------------------
22084|  2.59k|            {
22085|  2.59k|                size_and_type.second = 'U';
22086|  2.59k|            }
22087|       |
22088|  20.2k|            string_t key = "_ArrayData_";
22089|  20.2k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1697|  40.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1, False: 20.2k]
  |  |  |  Branch (1697:94): [True: 0, False: 20.2k]
  |  |  |  Branch (1697:94): [True: 3, False: 20.2k]
  |  |  ------------------
  ------------------
22090|      1|            {
22091|      1|                return false;
22092|      1|            }
22093|       |
22094|       |            // the numbers that are in the input, in one loop; the rest (if
22095|       |            // the input ends early) one by one below
22096|  20.2k|            std::size_t remaining = size_and_type.first;
22097|  20.2k|            if (!nd_is_char && JSON_HEDLEY_UNLIKELY(!parse_ubjson_typed_run(remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {})))
  ------------------
  |  | 1697|  18.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 18.8k]
  |  |  ------------------
  ------------------
  |  Branch (22097:17): [True: 18.8k, False: 1.39k]
  |  Branch (22097:17): [True: 0, False: 20.2k]
  ------------------
22098|      0|            {
22099|      0|                return false;
22100|      0|            }
22101|       |
22102|  29.2k|            for (std::size_t i = size_and_type.first - remaining; i < size_and_type.first; ++i)
  ------------------
  |  Branch (22102:67): [True: 9.14k, False: 20.0k]
  ------------------
22103|  9.14k|            {
22104|  9.14k|                if (nd_is_char)
  ------------------
  |  Branch (22104:21): [True: 4.83k, False: 4.31k]
  ------------------
22105|  4.83k|                {
22106|  4.83k|                    get();
22107|  4.83k|                    if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|  4.83k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 22, False: 4.81k]
  |  |  ------------------
  ------------------
22108|     22|                    {
22109|     22|                        return false;
22110|     22|                    }
22111|  4.81k|                    if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|  4.81k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 15, False: 4.79k]
  |  |  ------------------
  ------------------
22112|     15|                    {
22113|     15|                        return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
22114|     15|                    }
22115|  4.79k|                    if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(current))))
  ------------------
  |  | 1697|  4.79k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 4.79k]
  |  |  ------------------
  ------------------
22116|      0|                    {
22117|      0|                        return false;
22118|      0|                    }
22119|  4.79k|                    continue;
22120|  4.79k|                }
22121|       |
22122|  4.31k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1697|  4.31k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 154, False: 4.16k]
  |  |  ------------------
  ------------------
22123|    154|                {
22124|    154|                    return false;
22125|    154|                }
22126|  4.31k|            }
22127|       |
22128|  20.0k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (22128:21): [True: 19.7k, False: 354]
  |  Branch (22128:41): [True: 19.7k, False: 0]
  ------------------
22129|  20.2k|        }
22130|       |
22131|       |        // If BJData type marker is 'B' decode as binary
22132|   467k|        if (size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (22132:13): [True: 174k, False: 292k]
  |  Branch (22132:44): [True: 9.12k, False: 165k]
  ------------------
22133|  9.12k|        {
22134|  9.12k|            binary_t result;
22135|  9.12k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (22135:20): [True: 8.73k, False: 387]
  |  Branch (22135:63): [True: 8.73k, False: 0]
  ------------------
22136|  9.12k|        }
22137|       |
22138|   458k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22138:13): [True: 165k, False: 292k]
  ------------------
22139|   165k|        {
22140|       |            // reading an element of a valueless type consumes no input, so the
22141|       |            // declared count alone decides how much is allocated; the check is
22142|       |            // made before the start event so that no container is opened that
22143|       |            // is then abandoned. See @ref max_valueless_container_size.
22144|   165k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1697|   826k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 165k]
  |  |  |  Branch (1697:94): [True: 0, False: 165k]
  |  |  |  Branch (1697:94): [True: 0, False: 165k]
  |  |  |  Branch (1697:94): [True: 0, False: 165k]
  |  |  |  Branch (1697:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
22145|   165k|                                     && size_and_type.first > max_valueless_container_size))
22146|      0|            {
22147|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
22148|      0|            }
22149|       |
22150|   165k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1697|   165k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 127, False: 165k]
  |  |  ------------------
  ------------------
22151|    127|            {
22152|    127|                return false;
22153|    127|            }
22154|       |
22155|   165k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (22155:17): [True: 0, False: 165k]
  ------------------
22156|      0|            {
22157|       |                // a no-op is not a value, so a container of them holds none;
22158|       |                // the declared size has already been passed to the SAX parser
22159|      0|                container_stack.back().remaining = 0;
22160|      0|            }
22161|       |
22162|   165k|            return size_and_type.second == 0
  ------------------
  |  Branch (22162:20): [True: 146k, False: 19.0k]
  ------------------
22163|  19.0k|                   || parse_ubjson_typed_run(container_stack.back().remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {});
  ------------------
  |  Branch (22163:23): [True: 19.0k, False: 0]
  ------------------
22164|   165k|        }
22165|       |
22166|   292k|        return enter_array(detail::unknown_size());
22167|   458k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runERmmNS4_17integral_constantIbLb1EEE:
21974|  37.8k|    {
21975|  37.8k|        switch (type)
21976|  37.8k|        {
21977|  6.09k|            case 'U':
  ------------------
  |  Branch (21977:13): [True: 6.09k, False: 31.8k]
  ------------------
21978|  6.09k|                return parse_ubjson_typed_run<std::uint8_t>(remaining);
21979|  7.78k|            case 'i':
  ------------------
  |  Branch (21979:13): [True: 7.78k, False: 30.1k]
  ------------------
21980|  7.78k|                return parse_ubjson_typed_run<std::int8_t>(remaining);
21981|  2.38k|            case 'I':
  ------------------
  |  Branch (21981:13): [True: 2.38k, False: 35.5k]
  ------------------
21982|  2.38k|                return parse_ubjson_typed_run<std::int16_t>(remaining);
21983|  3.06k|            case 'l':
  ------------------
  |  Branch (21983:13): [True: 3.06k, False: 34.8k]
  ------------------
21984|  3.06k|                return parse_ubjson_typed_run<std::int32_t>(remaining);
21985|  2.38k|            case 'L':
  ------------------
  |  Branch (21985:13): [True: 2.38k, False: 35.5k]
  ------------------
21986|  2.38k|                return parse_ubjson_typed_run<std::int64_t>(remaining);
21987|  2.68k|            case 'u':
  ------------------
  |  Branch (21987:13): [True: 2.68k, False: 35.2k]
  ------------------
21988|  2.68k|                return parse_ubjson_typed_run<std::uint16_t>(remaining);
21989|  2.57k|            case 'm':
  ------------------
  |  Branch (21989:13): [True: 2.57k, False: 35.3k]
  ------------------
21990|  2.57k|                return parse_ubjson_typed_run<std::uint32_t>(remaining);
21991|  2.01k|            case 'M':
  ------------------
  |  Branch (21991:13): [True: 2.01k, False: 35.8k]
  ------------------
21992|  2.01k|                return parse_ubjson_typed_run<std::uint64_t>(remaining);
21993|  2.38k|            case 'd':
  ------------------
  |  Branch (21993:13): [True: 2.38k, False: 35.5k]
  ------------------
21994|  2.38k|                return parse_ubjson_typed_run<float>(remaining);
21995|  3.56k|            case 'D':
  ------------------
  |  Branch (21995:13): [True: 3.56k, False: 34.3k]
  ------------------
21996|  3.56k|                return parse_ubjson_typed_run<double>(remaining);
21997|  2.97k|            default:
  ------------------
  |  Branch (21997:13): [True: 2.97k, False: 34.9k]
  ------------------
21998|  2.97k|                return true;
21999|  37.8k|        }
22000|  37.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIhEEbRm:
22010|  6.09k|    {
22011|  6.09k|        constexpr std::size_t size = sizeof(NumberType);
22012|  6.09k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  6.09k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 681, False: 5.41k]
  ------------------
22014|    681|        {
22015|    681|            return true;
22016|    681|        }
22017|  5.41k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  5.41k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  5.41k|        std::size_t read = 0;
22021|  5.41k|        bool accepted = true;
22022|  34.4k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 28.9k, False: 5.41k]
  |  Branch (22022:32): [True: 28.9k, False: 0]
  ------------------
22023|  28.9k|        {
22024|  28.9k|            NumberType number{};
22025|  28.9k|            std::memcpy(&number, data + (read * size), size);
22026|  28.9k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 28.9k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  28.9k|            ++read;
22031|  28.9k|            accepted = emit_ubjson_number(number);
22032|  28.9k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  5.41k|        ia.bulk_skip(read * size);
22035|  5.41k|        chars_read += read * size;
22036|  5.41k|        current = data[(read * size) - 1];
22037|  5.41k|        remaining -= read;
22038|  5.41k|        return accepted;
22039|  6.09k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIhTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22055|  28.9k|    {
22056|  28.9k|        return emit_unsigned(number);
22057|  28.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIaEEbRm:
22010|  7.78k|    {
22011|  7.78k|        constexpr std::size_t size = sizeof(NumberType);
22012|  7.78k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  7.78k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 561, False: 7.22k]
  ------------------
22014|    561|        {
22015|    561|            return true;
22016|    561|        }
22017|  7.22k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  7.22k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  7.22k|        std::size_t read = 0;
22021|  7.22k|        bool accepted = true;
22022|  36.2k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 29.0k, False: 7.22k]
  |  Branch (22022:32): [True: 29.0k, False: 0]
  ------------------
22023|  29.0k|        {
22024|  29.0k|            NumberType number{};
22025|  29.0k|            std::memcpy(&number, data + (read * size), size);
22026|  29.0k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 29.0k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  29.0k|            ++read;
22031|  29.0k|            accepted = emit_ubjson_number(number);
22032|  29.0k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  7.22k|        ia.bulk_skip(read * size);
22035|  7.22k|        chars_read += read * size;
22036|  7.22k|        current = data[(read * size) - 1];
22037|  7.22k|        remaining -= read;
22038|  7.22k|        return accepted;
22039|  7.78k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIaTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22049|  29.0k|    {
22050|  29.0k|        return emit_signed(number);
22051|  29.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIsEEbRm:
22010|  2.38k|    {
22011|  2.38k|        constexpr std::size_t size = sizeof(NumberType);
22012|  2.38k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  2.38k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 603, False: 1.77k]
  ------------------
22014|    603|        {
22015|    603|            return true;
22016|    603|        }
22017|  1.77k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  1.77k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  1.77k|        std::size_t read = 0;
22021|  1.77k|        bool accepted = true;
22022|  14.6k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 12.8k, False: 1.77k]
  |  Branch (22022:32): [True: 12.8k, False: 0]
  ------------------
22023|  12.8k|        {
22024|  12.8k|            NumberType number{};
22025|  12.8k|            std::memcpy(&number, data + (read * size), size);
22026|  12.8k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 12.8k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  12.8k|            ++read;
22031|  12.8k|            accepted = emit_ubjson_number(number);
22032|  12.8k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  1.77k|        ia.bulk_skip(read * size);
22035|  1.77k|        chars_read += read * size;
22036|  1.77k|        current = data[(read * size) - 1];
22037|  1.77k|        remaining -= read;
22038|  1.77k|        return accepted;
22039|  2.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIsTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22049|  12.8k|    {
22050|  12.8k|        return emit_signed(number);
22051|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIiEEbRm:
22010|  3.06k|    {
22011|  3.06k|        constexpr std::size_t size = sizeof(NumberType);
22012|  3.06k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  3.06k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 771, False: 2.28k]
  ------------------
22014|    771|        {
22015|    771|            return true;
22016|    771|        }
22017|  2.28k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  2.28k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  2.28k|        std::size_t read = 0;
22021|  2.28k|        bool accepted = true;
22022|  9.91k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 7.62k, False: 2.28k]
  |  Branch (22022:32): [True: 7.62k, False: 0]
  ------------------
22023|  7.62k|        {
22024|  7.62k|            NumberType number{};
22025|  7.62k|            std::memcpy(&number, data + (read * size), size);
22026|  7.62k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 7.62k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  7.62k|            ++read;
22031|  7.62k|            accepted = emit_ubjson_number(number);
22032|  7.62k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  2.28k|        ia.bulk_skip(read * size);
22035|  2.28k|        chars_read += read * size;
22036|  2.28k|        current = data[(read * size) - 1];
22037|  2.28k|        remaining -= read;
22038|  2.28k|        return accepted;
22039|  3.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIiTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22049|  7.62k|    {
22050|  7.62k|        return emit_signed(number);
22051|  7.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIlEEbRm:
22010|  2.38k|    {
22011|  2.38k|        constexpr std::size_t size = sizeof(NumberType);
22012|  2.38k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  2.38k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 732, False: 1.65k]
  ------------------
22014|    732|        {
22015|    732|            return true;
22016|    732|        }
22017|  1.65k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  1.65k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  1.65k|        std::size_t read = 0;
22021|  1.65k|        bool accepted = true;
22022|  5.92k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 4.27k, False: 1.65k]
  |  Branch (22022:32): [True: 4.27k, False: 0]
  ------------------
22023|  4.27k|        {
22024|  4.27k|            NumberType number{};
22025|  4.27k|            std::memcpy(&number, data + (read * size), size);
22026|  4.27k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 4.27k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  4.27k|            ++read;
22031|  4.27k|            accepted = emit_ubjson_number(number);
22032|  4.27k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  1.65k|        ia.bulk_skip(read * size);
22035|  1.65k|        chars_read += read * size;
22036|  1.65k|        current = data[(read * size) - 1];
22037|  1.65k|        remaining -= read;
22038|  1.65k|        return accepted;
22039|  2.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIlTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22049|  4.27k|    {
22050|  4.27k|        return emit_signed(number);
22051|  4.27k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runItEEbRm:
22010|  2.68k|    {
22011|  2.68k|        constexpr std::size_t size = sizeof(NumberType);
22012|  2.68k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  2.68k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 693, False: 1.98k]
  ------------------
22014|    693|        {
22015|    693|            return true;
22016|    693|        }
22017|  1.98k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  1.98k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  1.98k|        std::size_t read = 0;
22021|  1.98k|        bool accepted = true;
22022|  13.8k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 11.9k, False: 1.98k]
  |  Branch (22022:32): [True: 11.9k, False: 0]
  ------------------
22023|  11.9k|        {
22024|  11.9k|            NumberType number{};
22025|  11.9k|            std::memcpy(&number, data + (read * size), size);
22026|  11.9k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 11.9k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  11.9k|            ++read;
22031|  11.9k|            accepted = emit_ubjson_number(number);
22032|  11.9k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  1.98k|        ia.bulk_skip(read * size);
22035|  1.98k|        chars_read += read * size;
22036|  1.98k|        current = data[(read * size) - 1];
22037|  1.98k|        remaining -= read;
22038|  1.98k|        return accepted;
22039|  2.68k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberItTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22055|  11.9k|    {
22056|  11.9k|        return emit_unsigned(number);
22057|  11.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIjEEbRm:
22010|  2.57k|    {
22011|  2.57k|        constexpr std::size_t size = sizeof(NumberType);
22012|  2.57k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  2.57k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 606, False: 1.97k]
  ------------------
22014|    606|        {
22015|    606|            return true;
22016|    606|        }
22017|  1.97k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  1.97k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  1.97k|        std::size_t read = 0;
22021|  1.97k|        bool accepted = true;
22022|  8.84k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 6.87k, False: 1.97k]
  |  Branch (22022:32): [True: 6.87k, False: 0]
  ------------------
22023|  6.87k|        {
22024|  6.87k|            NumberType number{};
22025|  6.87k|            std::memcpy(&number, data + (read * size), size);
22026|  6.87k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 6.87k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  6.87k|            ++read;
22031|  6.87k|            accepted = emit_ubjson_number(number);
22032|  6.87k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  1.97k|        ia.bulk_skip(read * size);
22035|  1.97k|        chars_read += read * size;
22036|  1.97k|        current = data[(read * size) - 1];
22037|  1.97k|        remaining -= read;
22038|  1.97k|        return accepted;
22039|  2.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIjTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22055|  6.87k|    {
22056|  6.87k|        return emit_unsigned(number);
22057|  6.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runImEEbRm:
22010|  2.01k|    {
22011|  2.01k|        constexpr std::size_t size = sizeof(NumberType);
22012|  2.01k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  2.01k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 747, False: 1.26k]
  ------------------
22014|    747|        {
22015|    747|            return true;
22016|    747|        }
22017|  1.26k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  1.26k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  1.26k|        std::size_t read = 0;
22021|  1.26k|        bool accepted = true;
22022|  5.13k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 3.87k, False: 1.26k]
  |  Branch (22022:32): [True: 3.87k, False: 0]
  ------------------
22023|  3.87k|        {
22024|  3.87k|            NumberType number{};
22025|  3.87k|            std::memcpy(&number, data + (read * size), size);
22026|  3.87k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 3.87k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  3.87k|            ++read;
22031|  3.87k|            accepted = emit_ubjson_number(number);
22032|  3.87k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  1.26k|        ia.bulk_skip(read * size);
22035|  1.26k|        chars_read += read * size;
22036|  1.26k|        current = data[(read * size) - 1];
22037|  1.26k|        remaining -= read;
22038|  1.26k|        return accepted;
22039|  2.01k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberImTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISQ_EE5valueEiE4typeELi0EEEbSQ_:
22055|  3.87k|    {
22056|  3.87k|        return emit_unsigned(number);
22057|  3.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIfEEbRm:
22010|  2.38k|    {
22011|  2.38k|        constexpr std::size_t size = sizeof(NumberType);
22012|  2.38k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  2.38k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 645, False: 1.74k]
  ------------------
22014|    645|        {
22015|    645|            return true;
22016|    645|        }
22017|  1.74k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  1.74k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  1.74k|        std::size_t read = 0;
22021|  1.74k|        bool accepted = true;
22022|  11.2k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 9.46k, False: 1.74k]
  |  Branch (22022:32): [True: 9.46k, False: 0]
  ------------------
22023|  9.46k|        {
22024|  9.46k|            NumberType number{};
22025|  9.46k|            std::memcpy(&number, data + (read * size), size);
22026|  9.46k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 9.46k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  9.46k|            ++read;
22031|  9.46k|            accepted = emit_ubjson_number(number);
22032|  9.46k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  1.74k|        ia.bulk_skip(read * size);
22035|  1.74k|        chars_read += read * size;
22036|  1.74k|        current = data[(read * size) - 1];
22037|  1.74k|        remaining -= read;
22038|  1.74k|        return accepted;
22039|  2.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIfTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEbSQ_:
22043|  9.46k|    {
22044|  9.46k|        return emit_float(number);
22045|  9.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22parse_ubjson_typed_runIdEEbRm:
22010|  3.56k|    {
22011|  3.56k|        constexpr std::size_t size = sizeof(NumberType);
22012|  3.56k|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|  3.56k|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 840, False: 2.72k]
  ------------------
22014|    840|        {
22015|    840|            return true;
22016|    840|        }
22017|  2.72k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|  2.72k|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|  2.72k|        std::size_t read = 0;
22021|  2.72k|        bool accepted = true;
22022|  41.3k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 38.6k, False: 2.72k]
  |  Branch (22022:32): [True: 38.6k, False: 0]
  ------------------
22023|  38.6k|        {
22024|  38.6k|            NumberType number{};
22025|  38.6k|            std::memcpy(&number, data + (read * size), size);
22026|  38.6k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 38.6k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  38.6k|            ++read;
22031|  38.6k|            accepted = emit_ubjson_number(number);
22032|  38.6k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|  2.72k|        ia.bulk_skip(read * size);
22035|  2.72k|        chars_read += read * size;
22036|  2.72k|        current = data[(read * size) - 1];
22037|  2.72k|        remaining -= read;
22038|  2.72k|        return accepted;
22039|  3.56k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE18emit_ubjson_numberIdTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEbSQ_:
22043|  38.6k|    {
22044|  38.6k|        return emit_float(number);
22045|  38.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
23219|  9.12k|    {
23220|  9.12k|        return get_bytes(len, "binary", result);
23221|  9.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17get_ubjson_objectEv:
22173|  94.6k|    {
22174|  94.6k|        std::pair<std::size_t, char_int_type> size_and_type;
22175|  94.6k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  94.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 136, False: 94.5k]
  |  |  ------------------
  ------------------
22176|    136|        {
22177|    136|            return false;
22178|    136|        }
22179|       |
22180|       |        // do not accept ND-array size in objects in BJData
22181|  94.5k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22181:13): [True: 3, False: 94.5k]
  ------------------
22182|      3|        {
22183|      3|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
22184|      3|        }
22185|       |
22186|  94.5k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22186:13): [True: 33.5k, False: 60.9k]
  ------------------
22187|  33.5k|        {
22188|  33.5k|            return enter_object(size_and_type.first, size_and_type.second);
22189|  33.5k|        }
22190|       |
22191|  60.9k|        return enter_object(detail::unknown_size());
22192|  94.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17get_ubjson_stringERSC_bPKc:
21355|   225k|    {
21356|   225k|        if (get_char)
  ------------------
  |  Branch (21356:13): [True: 129k, False: 95.7k]
  ------------------
21357|   129k|        {
21358|       |            // no get_ignore_noop() here: the byte read next must be a string
21359|       |            // length type specification, and a no-op ('N') is not valid in
21360|       |            // that position. No-ops at positions where a value may appear are
21361|       |            // already consumed by the callers via get_ignore_noop().
21362|   129k|            get();
21363|   129k|        }
21364|       |
21365|   225k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|   225k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 275, False: 225k]
  |  |  ------------------
  ------------------
21366|    275|        {
21367|    275|            return false;
21368|    275|        }
21369|       |
21370|   225k|        switch (current)
21371|   225k|        {
21372|  62.6k|            case 'U':
  ------------------
  |  Branch (21372:13): [True: 62.6k, False: 162k]
  ------------------
21373|  62.6k|            {
21374|  62.6k|                return get_string_with_length<std::uint8_t>(result, context);
21375|      0|            }
21376|       |
21377|   150k|            case 'i':
  ------------------
  |  Branch (21377:13): [True: 150k, False: 74.4k]
  ------------------
21378|   150k|            {
21379|   150k|                std::int8_t len{};
21380|   150k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21380:24): [True: 150k, False: 12]
  |  Branch (21380:43): [True: 150k, False: 15]
  |  Branch (21380:78): [True: 150k, False: 102]
  |  Branch (21380:105): [True: 150k, False: 0]
  ------------------
21381|      0|            }
21382|       |
21383|  2.18k|            case 'I':
  ------------------
  |  Branch (21383:13): [True: 2.18k, False: 223k]
  ------------------
21384|  2.18k|            {
21385|  2.18k|                std::int16_t len{};
21386|  2.18k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21386:24): [True: 2.17k, False: 15]
  |  Branch (21386:43): [True: 2.16k, False: 9]
  |  Branch (21386:78): [True: 1.99k, False: 171]
  |  Branch (21386:105): [True: 1.99k, False: 0]
  ------------------
21387|      0|            }
21388|       |
21389|  1.52k|            case 'l':
  ------------------
  |  Branch (21389:13): [True: 1.52k, False: 223k]
  ------------------
21390|  1.52k|            {
21391|  1.52k|                std::int32_t len{};
21392|  1.52k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21392:24): [True: 1.49k, False: 27]
  |  Branch (21392:43): [True: 1.40k, False: 93]
  |  Branch (21392:78): [True: 1.18k, False: 222]
  |  Branch (21392:105): [True: 1.18k, False: 0]
  ------------------
21393|      0|            }
21394|       |
21395|  1.57k|            case 'L':
  ------------------
  |  Branch (21395:13): [True: 1.57k, False: 223k]
  ------------------
21396|  1.57k|            {
21397|  1.57k|                std::int64_t len{};
21398|  1.57k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21398:24): [True: 1.53k, False: 39]
  |  Branch (21398:43): [True: 1.34k, False: 189]
  |  Branch (21398:78): [True: 909, False: 435]
  |  Branch (21398:105): [True: 909, False: 0]
  ------------------
21399|      0|            }
21400|       |
21401|  2.77k|            case 'u':
  ------------------
  |  Branch (21401:13): [True: 2.77k, False: 222k]
  ------------------
21402|  2.77k|            {
21403|  2.77k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21403:21): [True: 0, False: 2.77k]
  ------------------
21404|      0|                {
21405|      0|                    break;
21406|      0|                }
21407|  2.77k|                return get_string_with_length<std::uint16_t>(result, context);
21408|  2.77k|            }
21409|       |
21410|  1.27k|            case 'm':
  ------------------
  |  Branch (21410:13): [True: 1.27k, False: 223k]
  ------------------
21411|  1.27k|            {
21412|  1.27k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21412:21): [True: 0, False: 1.27k]
  ------------------
21413|      0|                {
21414|      0|                    break;
21415|      0|                }
21416|  1.27k|                return get_string_with_length<std::uint32_t>(result, context);
21417|  1.27k|            }
21418|       |
21419|  1.65k|            case 'M':
  ------------------
  |  Branch (21419:13): [True: 1.65k, False: 223k]
  ------------------
21420|  1.65k|            {
21421|  1.65k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21421:21): [True: 0, False: 1.65k]
  ------------------
21422|      0|                {
21423|      0|                    break;
21424|      0|                }
21425|  1.65k|                return get_string_with_length<std::uint64_t>(result, context);
21426|  1.65k|            }
21427|       |
21428|    210|            default:
  ------------------
  |  Branch (21428:13): [True: 210, False: 225k]
  ------------------
21429|    210|                break;
21430|   225k|        }
21431|    210|        return length_type_error("", "string");
21432|   225k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE26check_ubjson_string_lengthIaEEbT_:
21332|   150k|    {
21333|   150k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|   150k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 15, False: 150k]
  |  |  ------------------
  ------------------
21334|     15|        {
21335|     15|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     15|        }
21337|   150k|        return true;
21338|   150k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringIaEEbT_RSC_:
23119|   150k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|   150k|        return get_bytes(len, "string", result);
23130|   150k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesIaSC_EEbT_PKcRT0_:
23245|   150k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|   150k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|   150k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 125k, False: 24.9k]
  ------------------
23250|   125k|        {
23251|   125k|            return true;
23252|   125k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  24.9k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  24.9k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 102, False: 24.8k]
  ------------------
23258|    102|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    102|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 102, False: 0]
  ------------------
23262|    102|                                       ? static_cast<std::size_t>(len)
23263|    102|                                       : chunk_size;
23264|    102|            const std::size_t old_size = result.size();
23265|    102|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    102|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    102|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 102, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    102|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    102|            chars_read += bytes_read;
23273|    102|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    102|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 102, False: 0]
  |  |  ------------------
  ------------------
23274|    102|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    102|                result.resize(old_size + bytes_read);
23279|    102|                ++chars_read;
23280|    102|                current = char_traits<char_type>::eof();
23281|    102|                return unexpect_eof(context);
23282|    102|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|  24.8k|        return true;
23288|  24.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockIaEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|   150k|    {
23295|   150k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 24.8k, False: 125k]
  ------------------
23296|  24.8k|        {
23297|  24.8k|            return false;
23298|  24.8k|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|   125k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|   125k|        const std::size_t remaining = ia.bulk_remaining();
23303|   125k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 102, False: 125k]
  ------------------
23304|    102|        {
23305|    102|            return false; // (the loop reports the premature end)
23306|    102|        }
23307|   125k|        const auto n = static_cast<std::size_t>(ulen);
23308|   125k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|   125k|        ia.bulk_skip(n);
23310|   125k|        chars_read += n;
23311|   125k|        return true;
23312|   125k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE26check_ubjson_string_lengthIsEEbT_:
21332|  2.17k|    {
21333|  2.17k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|  2.17k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 9, False: 2.16k]
  |  |  ------------------
  ------------------
21334|      9|        {
21335|      9|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      9|        }
21337|  2.16k|        return true;
21338|  2.17k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringIsEEbT_RSC_:
23119|  2.16k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  2.16k|        return get_bytes(len, "string", result);
23130|  2.16k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesIsSC_EEbT_PKcRT0_:
23245|  2.16k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  2.16k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  2.16k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 1.15k, False: 1.01k]
  ------------------
23250|  1.15k|        {
23251|  1.15k|            return true;
23252|  1.15k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  1.01k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  1.01k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 171, False: 843]
  ------------------
23258|    171|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    171|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 111, False: 60]
  ------------------
23262|    171|                                       ? static_cast<std::size_t>(len)
23263|    171|                                       : chunk_size;
23264|    171|            const std::size_t old_size = result.size();
23265|    171|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    171|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    171|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 171, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    171|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    171|            chars_read += bytes_read;
23273|    171|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    171|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 171, False: 0]
  |  |  ------------------
  ------------------
23274|    171|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    171|                result.resize(old_size + bytes_read);
23279|    171|                ++chars_read;
23280|    171|                current = char_traits<char_type>::eof();
23281|    171|                return unexpect_eof(context);
23282|    171|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    843|        return true;
23288|  1.01k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockIsEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  2.16k|    {
23295|  2.16k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 843, False: 1.32k]
  ------------------
23296|    843|        {
23297|    843|            return false;
23298|    843|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  1.32k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  1.32k|        const std::size_t remaining = ia.bulk_remaining();
23303|  1.32k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 171, False: 1.15k]
  ------------------
23304|    171|        {
23305|    171|            return false; // (the loop reports the premature end)
23306|    171|        }
23307|  1.15k|        const auto n = static_cast<std::size_t>(ulen);
23308|  1.15k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  1.15k|        ia.bulk_skip(n);
23310|  1.15k|        chars_read += n;
23311|  1.15k|        return true;
23312|  1.32k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE26check_ubjson_string_lengthIiEEbT_:
21332|  1.49k|    {
21333|  1.49k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|  1.49k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 93, False: 1.40k]
  |  |  ------------------
  ------------------
21334|     93|        {
21335|     93|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     93|        }
21337|  1.40k|        return true;
21338|  1.49k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE26check_ubjson_string_lengthIlEEbT_:
21332|  1.53k|    {
21333|  1.53k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|  1.53k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 189, False: 1.34k]
  |  |  ------------------
  ------------------
21334|    189|        {
21335|    189|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|    189|        }
21337|  1.34k|        return true;
21338|  1.53k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringIlEEbT_RSC_:
23119|  1.34k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  1.34k|        return get_bytes(len, "string", result);
23130|  1.34k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE9get_bytesIlSC_EEbT_PKcRT0_:
23245|  1.34k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  1.34k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  1.34k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 426, False: 918]
  ------------------
23250|    426|        {
23251|    426|            return true;
23252|    426|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    918|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    918|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 435, False: 483]
  ------------------
23258|    435|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    435|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 105, False: 330]
  ------------------
23262|    435|                                       ? static_cast<std::size_t>(len)
23263|    435|                                       : chunk_size;
23264|    435|            const std::size_t old_size = result.size();
23265|    435|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    435|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    435|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 435, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    435|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    435|            chars_read += bytes_read;
23273|    435|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    435|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 435, False: 0]
  |  |  ------------------
  ------------------
23274|    435|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    435|                result.resize(old_size + bytes_read);
23279|    435|                ++chars_read;
23280|    435|                current = char_traits<char_type>::eof();
23281|    435|                return unexpect_eof(context);
23282|    435|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    483|        return true;
23288|    918|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE17append_from_blockIlEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  1.34k|    {
23295|  1.34k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 483, False: 861]
  ------------------
23296|    483|        {
23297|    483|            return false;
23298|    483|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    861|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    861|        const std::size_t remaining = ia.bulk_remaining();
23303|    861|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 435, False: 426]
  ------------------
23304|    435|        {
23305|    435|            return false; // (the loop reports the premature end)
23306|    435|        }
23307|    426|        const auto n = static_cast<std::size_t>(ulen);
23308|    426|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    426|        ia.bulk_skip(n);
23310|    426|        chars_read += n;
23311|    426|        return true;
23312|    861|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE22get_string_with_lengthImEEbRSC_PKc:
23198|  1.65k|    {
23199|  1.65k|        NumberType len{};
23200|  1.65k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 1.59k, False: 57]
  |  Branch (23200:35): [True: 1.04k, False: 555]
  |  Branch (23200:62): [True: 1.04k, False: 0]
  ------------------
23201|  1.65k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE10get_stringImEEbT_RSC_:
23119|  1.59k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  1.59k|        return get_bytes(len, "string", result);
23130|  1.59k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE15get_ignore_noopEv:
22874|  2.23M|    {
22875|  2.23M|        do
22876|  2.25M|        {
22877|  2.25M|            get();
22878|  2.25M|        }
22879|  2.25M|        while (current == 'N');
  ------------------
  |  Branch (22879:16): [True: 17.7k, False: 2.23M]
  ------------------
22880|       |
22881|  2.23M|        return current;
22882|  2.23M|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE3getEv:
22840|  2.93M|    {
22841|  2.93M|        ++chars_read;
22842|  2.93M|        return current = ia.get_character();
22843|  2.93M|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E13get_characterEv:
10120|  2.93M|    {
10121|  2.93M|        if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  2.93M|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.86M, False: 71.1k]
  |  |  ------------------
  ------------------
10122|  2.86M|        {
10123|  2.86M|            auto result = char_traits<char_type>::to_int_type(*current);
10124|  2.86M|            std::advance(current, 1);
10125|  2.86M|            return result;
10126|  2.86M|        }
10127|       |
10128|  71.1k|        ++eof_reads;
10129|  71.1k|        return char_traits<char_type>::eof();
10130|  2.93M|    }
_ZN8nlohmann16json_abi_v3_12_06detail11char_traitsIhE11to_int_typeEh:
 4432|  3.34M|    {
 4433|  3.34M|        return static_cast<int_type>(c);
 4434|  3.34M|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEE15last_byte_errorENS1_12exception_idERKSC_PKcSS_:
23407|  2.91k|    {
23408|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
23409|  2.91k|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
23410|  2.91k|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (23410:51): [True: 2.49k, False: 423]
  ------------------
23411|  2.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRKS9_RPKcRA16_SC_S9_EEET_DpOT0_:
 5516|    846|{
 5517|    846|    OutStringType str;
 5518|    846|    str.reserve(concat_length(args...));
 5519|    846|    concat_into(str, std::forward<Args>(args)...);
 5520|    846|    return str;
 5521|    846|} // LCOV_EXCL_LINE (exception cleanup only)
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJPKcA16_cS9_EEEmRKT_DpRKT0_:
 5426|    846|{
 5427|    846|    return str.size() + concat_length(rest...);
 5428|    846|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JRPKcRA16_SC_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5479|    846|{
 5480|    846|    out.append(std::forward<Arg>(arg));
 5481|    846|    concat_into(out, std::forward<Args>(rest)...);
 5482|    846|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2ENS0_6detail7value_tE:
41570|   910k|        : m_data(stored_kind(v))
41571|   910k|    {
41572|   910k|        assert_invariant();
41573|   910k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11stored_kindENS0_6detail7value_tE:
39780|   910k|    {
39781|   910k|        return (std::is_same<number_integer_t, number_unsigned_t>::value && t == value_t::number_unsigned) ? value_t::number_integer : t;
  ------------------
  |  Branch (39781:17): [Folded, False: 910k]
  |  Branch (39781:77): [True: 0, False: 0]
  ------------------
39782|   910k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dataC2ENS0_6detail7value_tE:
45568|   910k|            : m_type(v), m_value(v)
45569|   910k|        {
45570|   910k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2ENS0_6detail7value_tE:
39867|   910k|        {
39868|   910k|            switch (t)
39869|   910k|            {
39870|   166k|                case value_t::object:
  ------------------
  |  Branch (39870:17): [True: 166k, False: 743k]
  ------------------
39871|   903k|                case value_t::array:
  ------------------
  |  Branch (39871:17): [True: 736k, False: 174k]
  ------------------
39872|   903k|                case value_t::string:
  ------------------
  |  Branch (39872:17): [True: 0, False: 910k]
  ------------------
39873|   903k|                case value_t::binary:
  ------------------
  |  Branch (39873:17): [True: 0, False: 910k]
  ------------------
39874|   903k|                {
39875|       |                    // allocating: kept out of line, so the scalar cases below inline
39876|   903k|                    init_owned(t);
39877|   903k|                    break;
39878|   903k|                }
39879|       |
39880|      0|                case value_t::boolean:
  ------------------
  |  Branch (39880:17): [True: 0, False: 910k]
  ------------------
39881|      0|                {
39882|      0|                    boolean = static_cast<boolean_t>(false);
39883|      0|                    break;
39884|   903k|                }
39885|       |
39886|      0|                case value_t::number_integer:
  ------------------
  |  Branch (39886:17): [True: 0, False: 910k]
  ------------------
39887|      0|                {
39888|      0|                    number_integer = static_cast<number_integer_t>(0);
39889|      0|                    break;
39890|   903k|                }
39891|       |
39892|      0|                case value_t::number_unsigned:
  ------------------
  |  Branch (39892:17): [True: 0, False: 910k]
  ------------------
39893|      0|                {
39894|      0|                    number_unsigned = static_cast<number_unsigned_t>(0);
39895|      0|                    break;
39896|   903k|                }
39897|       |
39898|      0|                case value_t::number_float:
  ------------------
  |  Branch (39898:17): [True: 0, False: 910k]
  ------------------
39899|      0|                {
39900|      0|                    number_float = static_cast<number_float_t>(0.0);
39901|      0|                    break;
39902|   903k|                }
39903|       |
39904|      0|                case value_t::null:
  ------------------
  |  Branch (39904:17): [True: 0, False: 910k]
  ------------------
39905|      0|                {
39906|      0|                    object = nullptr;  // silence warning, see #821
39907|      0|                    break;
39908|   903k|                }
39909|       |
39910|  7.45k|                case value_t::discarded:
  ------------------
  |  Branch (39910:17): [True: 7.45k, False: 903k]
  ------------------
39911|  7.45k|                default:
  ------------------
  |  Branch (39911:17): [True: 0, False: 910k]
  ------------------
39912|  7.45k|                {
39913|  7.45k|                    object = nullptr;  // silence warning, see #821
39914|  7.45k|                    if (JSON_HEDLEY_UNLIKELY(t == value_t::null))
  ------------------
  |  | 1697|  7.45k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.45k]
  |  |  ------------------
  ------------------
39915|      0|                    {
39916|      0|                        detail::throw_literal<other_error>(detail::exception_id::internal_error, "961c151d2e87f2686a955a9be24d316f1362bf21 3.12.0", nullptr); // LCOV_EXCL_LINE
39917|      0|                    }
39918|  7.45k|                    break;
39919|  7.45k|                }
39920|   910k|            }
39921|   910k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value10init_ownedENS0_6detail7value_tE:
39925|   903k|        {
39926|   903k|            switch (t)
39927|   903k|            {
39928|   166k|                case value_t::object:
  ------------------
  |  Branch (39928:17): [True: 166k, False: 736k]
  ------------------
39929|   166k|                    object = create<object_t>();
39930|   166k|                    break;
39931|   736k|                case value_t::array:
  ------------------
  |  Branch (39931:17): [True: 736k, False: 166k]
  ------------------
39932|   736k|                    array = create<array_t>();
39933|   736k|                    break;
39934|      0|                case value_t::string:
  ------------------
  |  Branch (39934:17): [True: 0, False: 903k]
  ------------------
39935|      0|                    string = create<string_t>("");
39936|      0|                    break;
39937|      0|                case value_t::binary:
  ------------------
  |  Branch (39937:17): [True: 0, False: 903k]
  ------------------
39938|      0|                    binary = create<binary_t>();
39939|      0|                    break;
39940|      0|                case value_t::null: // LCOV_EXCL_LINE
  ------------------
  |  Branch (39940:17): [True: 0, False: 903k]
  ------------------
39941|      0|                case value_t::boolean:
  ------------------
  |  Branch (39941:17): [True: 0, False: 903k]
  ------------------
39942|      0|                case value_t::number_integer:
  ------------------
  |  Branch (39942:17): [True: 0, False: 903k]
  ------------------
39943|      0|                case value_t::number_unsigned:
  ------------------
  |  Branch (39943:17): [True: 0, False: 903k]
  ------------------
39944|      0|                case value_t::number_float:
  ------------------
  |  Branch (39944:17): [True: 0, False: 903k]
  ------------------
39945|      0|                case value_t::discarded:
  ------------------
  |  Branch (39945:17): [True: 0, False: 903k]
  ------------------
39946|      0|                default:
  ------------------
  |  Branch (39946:17): [True: 0, False: 903k]
  ------------------
39947|      0|                    break; // LCOV_EXCL_LINE
39948|   903k|            }
39949|   903k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createINS3_ISA_SE_NS2_4lessISA_EENS8_INS2_4pairIKSA_SE_EEEEEEJEEEPT_DpOT0_:
39788|   166k|    {
39789|   166k|        AllocatorType<T> alloc;
39790|   166k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
39791|       |
39792|   166k|        auto deleter = [&](T * obj)
39793|   166k|        {
39794|   166k|            AllocatorTraits::deallocate(alloc, obj, 1);
39795|   166k|        };
39796|   166k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
39797|   166k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
39798|   166k|        JSON_ASSERT(obj);
  ------------------
  |  | 2643|   166k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (39798:9): [True: 166k, False: 0]
  ------------------
39799|   166k|        return obj.release();
39800|   166k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createINS4_ISE_NS8_ISE_EEEEJEEEPT_DpOT0_:
39788|   736k|    {
39789|   736k|        AllocatorType<T> alloc;
39790|   736k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
39791|       |
39792|   736k|        auto deleter = [&](T * obj)
39793|   736k|        {
39794|   736k|            AllocatorTraits::deallocate(alloc, obj, 1);
39795|   736k|        };
39796|   736k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
39797|   736k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
39798|   736k|        JSON_ASSERT(obj);
  ------------------
  |  | 2643|   736k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (39798:9): [True: 736k, False: 0]
  ------------------
39799|   736k|        return obj.release();
39800|   736k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEaSESE_:
41982|   417k|    {
41983|       |        // check that the passed value is valid
41984|   417k|        other.assert_invariant();
41985|       |
41986|   417k|        using std::swap;
41987|   417k|        swap(m_data.m_type, other.m_data.m_type);
41988|   417k|        swap(m_data.m_value, other.m_data.m_value);
41989|       |
41990|       |#if JSON_DIAGNOSTIC_POSITIONS
41991|       |        swap(start_position, other.start_position);
41992|       |        swap(end_position, other.end_position);
41993|       |#endif
41994|       |
41995|   417k|        json_base_class_t::operator=(std::move(other));
41996|       |
41997|   417k|        set_parents();
41998|   417k|        assert_invariant();
41999|   417k|        return *this;
42000|   417k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_26json_sax_dom_binary_parserISG_SK_EEED2Ev:
18487|  86.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEED2Ev:
17434|  86.9k|    ~json_sax_dom_binary_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterINSt3__16vectorIhNS3_9allocatorIhEEEETnNS3_9enable_ifIXsr28is_contiguous_byte_containerIT_EE5valueEiE4typeELi0EEEDTcl13input_adaptercldtfp_4dataEplcldtfp_4dataEcldtfp_4sizeEEERKS9_:
10700|  72.0k|{
10701|  72.0k|    return input_adapter(container.data(), container.data() + container.size());
10702|  72.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterIPKhS4_vEENS1_30iterator_input_adapter_factoryIT_T0_vE12adapter_typeES6_S7_:
10603|  86.9k|{
10604|  86.9k|    using factory_type = iterator_input_adapter_factory<IteratorType, SentinelType>;
10605|  86.9k|    return factory_type::create(first, last);
10606|  86.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail30iterator_input_adapter_factoryIPKhS4_vE6createES4_S4_:
10465|  86.9k|    {
10466|  86.9k|        return adapter_type(std::move(first), std::move(last));
10467|  86.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_EC2ES4_S4_:
10116|  86.9k|        : begin(first), current(std::move(first)), end(std::move(last))
10117|  86.9k|    {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9to_bjdataERKSE_bbNS0_6detail16bjdata_version_tENSH_15error_handler_tE:
45752|  42.1k|    {
45753|  42.1k|        return to_binary_vector(j, error_handler, [&](vector_binary_writer<std::uint8_t>& w)
45754|  42.1k|        {
45755|  42.1k|            w.write_ubjson(j, use_size, use_type, true, true, version);
45756|  42.1k|        });
45757|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16to_binary_vectorIZNSE_9to_bjdataERKSE_bbNS0_6detail16bjdata_version_tENSI_15error_handler_tEEUlRNSI_13binary_writerISE_hNSI_18output_vector_sinkIhSC_EEEEE_EESD_SH_SK_T_:
42454|  42.1k|    {
42455|  42.1k|        std::vector<std::uint8_t> result;
42456|  42.1k|        result.reserve(detail::binary_initial_capacity(j));
42457|  42.1k|        {
42458|       |            // the sink sets the size of result when it is destroyed, which
42459|       |            // must happen before result is returned (without NRVO, it is moved)
42460|  42.1k|            auto writer = vector_writer(result, error_handler);
42461|  42.1k|            write(writer);
42462|  42.1k|        }
42463|  42.1k|        return result;
42464|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23binary_initial_capacityINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEmRKT_:
29542|  42.1k|{
29543|  42.1k|    return (std::max)(binary_reserve_hint(j), min_vector_sink_capacity);
29544|  42.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail19binary_reserve_hintINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEmRKT_:
29517|  42.1k|{
29518|  42.1k|    if (j.is_array())
  ------------------
  |  Branch (29518:9): [True: 22.6k, False: 19.5k]
  ------------------
29519|  22.6k|    {
29520|  22.6k|        return j.size() + 1;
29521|  22.6k|    }
29522|       |
29523|  19.5k|    if (j.is_object())
  ------------------
  |  Branch (29523:9): [True: 5.78k, False: 13.7k]
  ------------------
29524|  5.78k|    {
29525|  5.78k|        return (j.size() * 2) + 1;
29526|  5.78k|    }
29527|       |
29528|  13.7k|    return 0;
29529|  19.5k|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE13vector_writerIhEENS0_6detail13binary_writerISE_T_NSG_18output_vector_sinkISI_NS8_ISI_EEEEEERNS4_ISI_SK_EENSG_15error_handler_tE:
39470|  42.1k|    {
39471|  42.1k|        return vector_binary_writer<CharType>(::nlohmann::detail::output_vector_sink<CharType>(v), error_handler);
39472|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEEC2ERNS3_6vectorIhS5_EE:
28977|  42.1k|        : v(&vec), cursor(vec.data() + vec.size()), limit(cursor)
28978|  42.1k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEEC2ESI_NS1_15error_handler_tE:
29574|  42.1k|        : oa(std::move(sink)), error_handler(error_handler_)
29575|  42.1k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEEC2EOS6_:
28985|  42.1k|        : v(other.v), cursor(other.cursor), limit(other.limit)
28986|  42.1k|    {
28987|  42.1k|        other.v = nullptr;
28988|  42.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEED2Ev:
28991|  84.3k|    {
28992|  84.3k|        if (v != nullptr)
  ------------------
  |  Branch (28992:13): [True: 42.1k, False: 42.1k]
  ------------------
28993|  42.1k|        {
28994|  42.1k|            v->resize(position());
28995|  42.1k|        }
28996|  84.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE8positionEv:
29094|   126k|    {
29095|   126k|        return static_cast<std::size_t>(cursor - v->data());
29096|   126k|    }
_ZZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9to_bjdataERKSE_bbNS0_6detail16bjdata_version_tENSH_15error_handler_tEENKUlRNSH_13binary_writerISE_hNSH_18output_vector_sinkIhSC_EEEEE_clESO_:
45754|  42.1k|        {
45755|  42.1k|            w.write_ubjson(j, use_size, use_type, true, true, version);
45756|  42.1k|        });
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_ubjsonERKSG_bbbbNS1_16bjdata_version_tEm:
30018|   480k|    {
30019|   480k|        if (JSON_HEDLEY_UNLIKELY(depth >= recursion_depth_limit()) && (j.is_array() || j.is_object()))
  ------------------
  |  | 1697|   961k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5.33k, False: 475k]
  |  |  ------------------
  ------------------
  |  Branch (30019:72): [True: 1.60k, False: 3.72k]
  |  Branch (30019:88): [True: 2.60k, False: 1.12k]
  ------------------
30020|  4.20k|        {
30021|  4.20k|            write_ubjson_iterative(j, use_count, use_type, add_prefix, use_bjdata, bjdata_version);
30022|  4.20k|            return;
30023|  4.20k|        }
30024|       |
30025|   476k|        const bool bjdata_draft3 = use_bjdata && bjdata_version == bjdata_version_t::draft3;
  ------------------
  |  Branch (30025:36): [True: 476k, False: 0]
  |  Branch (30025:50): [True: 0, False: 476k]
  ------------------
30026|       |
30027|   476k|        switch (j.type())
30028|   476k|        {
30029|  29.9k|            case value_t::null:
  ------------------
  |  Branch (30029:13): [True: 29.9k, False: 446k]
  ------------------
30030|  29.9k|            {
30031|  29.9k|                if (add_prefix)
  ------------------
  |  Branch (30031:21): [True: 29.9k, False: 0]
  ------------------
30032|  29.9k|                {
30033|  29.9k|                    oa.write_character(to_char_type('Z'));
30034|  29.9k|                }
30035|  29.9k|                break;
30036|      0|            }
30037|       |
30038|  50.8k|            case value_t::boolean:
  ------------------
  |  Branch (30038:13): [True: 50.8k, False: 425k]
  ------------------
30039|  50.8k|            {
30040|  50.8k|                if (add_prefix)
  ------------------
  |  Branch (30040:21): [True: 50.8k, False: 0]
  ------------------
30041|  50.8k|                {
30042|  50.8k|                    oa.write_character(j.m_data.m_value.boolean
  ------------------
  |  Branch (30042:40): [True: 28.1k, False: 22.6k]
  ------------------
30043|  50.8k|                                       ? to_char_type('T')
30044|  50.8k|                                       : to_char_type('F'));
30045|  50.8k|                }
30046|  50.8k|                break;
30047|      0|            }
30048|       |
30049|  15.0k|            case value_t::number_integer:
  ------------------
  |  Branch (30049:13): [True: 15.0k, False: 461k]
  ------------------
30050|  27.0k|            case value_t::number_unsigned:
  ------------------
  |  Branch (30050:13): [True: 11.9k, False: 464k]
  ------------------
30051|  27.0k|            {
30052|  27.0k|                if (j.m_data.m_type == value_t::number_integer)
  ------------------
  |  Branch (30052:21): [True: 15.0k, False: 11.9k]
  ------------------
30053|  15.0k|                {
30054|  15.0k|                    write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata);
30055|  15.0k|                }
30056|  11.9k|                else
30057|  11.9k|                {
30058|  11.9k|                    write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata);
30059|  11.9k|                }
30060|  27.0k|                break;
30061|  15.0k|            }
30062|       |
30063|  17.3k|            case value_t::number_float:
  ------------------
  |  Branch (30063:13): [True: 17.3k, False: 459k]
  ------------------
30064|  17.3k|            {
30065|  17.3k|                write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata);
30066|  17.3k|                break;
30067|  15.0k|            }
30068|       |
30069|  49.0k|            case value_t::string:
  ------------------
  |  Branch (30069:13): [True: 49.0k, False: 427k]
  ------------------
30070|  49.0k|            {
30071|  49.0k|                write_ubjson_text(*j.m_data.m_value.string, j, add_prefix, use_bjdata);
30072|  49.0k|                break;
30073|  15.0k|            }
30074|       |
30075|   237k|            case value_t::array:
  ------------------
  |  Branch (30075:13): [True: 237k, False: 239k]
  ------------------
30076|   237k|            {
30077|   237k|                bool prefix_required = true;
30078|   237k|                const bool write_closer = write_ubjson_start_container<true>(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
30079|       |
30080|   237k|                {
30081|   237k|                    const auto& array = *j.m_data.m_value.array;
30082|   237k|                    if (starts_with_ubjson_number(array, use_bjdata, std::integral_constant<bool, ubjson_integers_fit_64_bits()>()))
  ------------------
  |  Branch (30082:25): [True: 41.1k, False: 195k]
  ------------------
30083|  41.1k|                    {
30084|  41.1k|                        write_ubjson_array_elements(array, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth);
30085|  41.1k|                    }
30086|   195k|                    else
30087|   195k|                    {
30088|   195k|                        for (const auto& el : array)
  ------------------
  |  Branch (30088:45): [True: 388k, False: 195k]
  ------------------
30089|   388k|                        {
30090|   388k|                            write_ubjson(el, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth + 1);
30091|   388k|                        }
30092|   195k|                    }
30093|   237k|                }
30094|       |
30095|   237k|                if (write_closer)
  ------------------
  |  Branch (30095:21): [True: 87.8k, False: 149k]
  ------------------
30096|  87.8k|                {
30097|  87.8k|                    oa.write_character(to_char_type(']'));
30098|  87.8k|                }
30099|       |
30100|   237k|                break;
30101|  15.0k|            }
30102|       |
30103|  5.97k|            case value_t::binary:
  ------------------
  |  Branch (30103:13): [True: 5.97k, False: 470k]
  ------------------
30104|  5.97k|            {
30105|  5.97k|                if (add_prefix)
  ------------------
  |  Branch (30105:21): [True: 5.97k, False: 0]
  ------------------
30106|  5.97k|                {
30107|  5.97k|                    oa.write_character(to_char_type('['));
30108|  5.97k|                }
30109|       |
30110|  5.97k|                if (use_type && (bjdata_draft3 || !j.m_data.m_value.binary->empty()))
  ------------------
  |  Branch (30110:21): [True: 1.99k, False: 3.98k]
  |  Branch (30110:34): [True: 0, False: 1.99k]
  |  Branch (30110:51): [True: 1.36k, False: 628]
  ------------------
30111|  1.36k|                {
30112|  1.36k|                    if (!use_count)
  ------------------
  |  Branch (30112:25): [True: 0, False: 1.36k]
  ------------------
30113|      0|                    {
30114|      0|                        throw_size_marker_required(j);
30115|      0|                    }
30116|  1.36k|                    oa.write_character(to_char_type('$'));
30117|  1.36k|                    oa.write_character(bjdata_draft3 ? 'B' : 'U');
  ------------------
  |  Branch (30117:40): [True: 0, False: 1.36k]
  ------------------
30118|  1.36k|                }
30119|       |
30120|  5.97k|                if (use_count)
  ------------------
  |  Branch (30120:21): [True: 3.98k, False: 1.99k]
  ------------------
30121|  3.98k|                {
30122|  3.98k|                    oa.write_character(to_char_type('#'));
30123|  3.98k|                    write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata);
30124|  3.98k|                }
30125|       |
30126|  5.97k|                if (use_type)
  ------------------
  |  Branch (30126:21): [True: 1.99k, False: 3.98k]
  ------------------
30127|  1.99k|                {
30128|  1.99k|                    write_bytes(j.m_data.m_value.binary->data(), j.m_data.m_value.binary->size());
30129|  1.99k|                }
30130|  3.98k|                else
30131|  3.98k|                {
30132|  3.98k|                    write_ubjson_binary_bytes(*j.m_data.m_value.binary, bjdata_draft3);
30133|  3.98k|                }
30134|       |
30135|  5.97k|                if (!use_count)
  ------------------
  |  Branch (30135:21): [True: 1.99k, False: 3.98k]
  ------------------
30136|  1.99k|                {
30137|  1.99k|                    oa.write_character(to_char_type(']'));
30138|  1.99k|                }
30139|       |
30140|  5.97k|                break;
30141|  15.0k|            }
30142|       |
30143|  59.5k|            case value_t::object:
  ------------------
  |  Branch (30143:13): [True: 59.5k, False: 417k]
  ------------------
30144|  59.5k|            {
30145|  59.5k|                if (use_bjdata && is_bjdata_ndarray(j))
  ------------------
  |  Branch (30145:21): [True: 59.5k, False: 0]
  |  Branch (30145:35): [True: 20.8k, False: 38.6k]
  ------------------
30146|  20.8k|                {
30147|  20.8k|                    if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type, bjdata_version))  // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
  ------------------
  |  Branch (30147:25): [True: 11.1k, False: 9.67k]
  ------------------
30148|  11.1k|                    {
30149|  11.1k|                        break;
30150|  11.1k|                    }
30151|  20.8k|                }
30152|       |
30153|  48.3k|                bool prefix_required = true;
30154|  48.3k|                const bool write_closer = write_ubjson_start_container<false>(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
30155|       |
30156|  48.3k|                write_ubjson_members(j, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth);
30157|       |
30158|  48.3k|                if (write_closer)
  ------------------
  |  Branch (30158:21): [True: 18.0k, False: 30.3k]
  ------------------
30159|  18.0k|                {
30160|  18.0k|                    oa.write_character(to_char_type('}'));
30161|  18.0k|                }
30162|       |
30163|  48.3k|                break;
30164|  59.5k|            }
30165|       |
30166|      0|            case value_t::discarded:
  ------------------
  |  Branch (30166:13): [True: 0, False: 476k]
  ------------------
30167|      0|            default:
  ------------------
  |  Branch (30167:13): [True: 0, False: 476k]
  ------------------
30168|      0|                throw_on_discarded(j, use_bjdata ? input_format_t::bjdata : input_format_t::ubjson);
  ------------------
  |  Branch (30168:39): [True: 0, False: 0]
  ------------------
30169|   476k|        }
30170|   476k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22write_ubjson_iterativeERKSG_bbbbNS1_16bjdata_version_tE:
30789|  4.20k|    {
30790|  4.20k|        std::vector<ubjson_frame> stack;
30791|  4.20k|        write_ubjson_value_or_push(root, add_prefix, use_count, use_type, use_bjdata, bjdata_version, stack);
30792|       |
30793|  22.3k|        while (!stack.empty())
  ------------------
  |  Branch (30793:16): [True: 18.1k, False: 4.20k]
  ------------------
30794|  18.1k|        {
30795|  18.1k|            const ubjson_frame current = stack.back();
30796|  18.1k|            const BasicJsonType& j = *current.value;
30797|       |
30798|  18.1k|            if (j.is_array())
  ------------------
  |  Branch (30798:17): [True: 12.9k, False: 5.27k]
  ------------------
30799|  12.9k|            {
30800|  12.9k|                const auto& array = *j.m_data.m_value.array;
30801|  12.9k|                if (current.array_it == array.cend())
  ------------------
  |  Branch (30801:21): [True: 4.01k, False: 8.89k]
  ------------------
30802|  4.01k|                {
30803|  4.01k|                    if (!use_count)
  ------------------
  |  Branch (30803:25): [True: 1.45k, False: 2.56k]
  ------------------
30804|  1.45k|                    {
30805|  1.45k|                        oa.write_character(to_char_type(']'));
30806|  1.45k|                    }
30807|  4.01k|                    stack.pop_back();
30808|  4.01k|                    continue;
30809|  4.01k|                }
30810|       |
30811|  8.89k|                const BasicJsonType* child = &(*current.array_it);
30812|  8.89k|                const bool child_prefix = current.prefix_required;
30813|  8.89k|                ++stack.back().array_it;
30814|  8.89k|                write_ubjson_value_or_push(*child, child_prefix, use_count, use_type, use_bjdata, bjdata_version, stack);
30815|  8.89k|            }
30816|  5.27k|            else
30817|  5.27k|            {
30818|  5.27k|                const auto& object = *j.m_data.m_value.object;
30819|  5.27k|                if (current.object_it == object.cend())
  ------------------
  |  Branch (30819:21): [True: 1.89k, False: 3.38k]
  ------------------
30820|  1.89k|                {
30821|  1.89k|                    if (!use_count)
  ------------------
  |  Branch (30821:25): [True: 684, False: 1.20k]
  ------------------
30822|    684|                    {
30823|    684|                        oa.write_character(to_char_type('}'));
30824|    684|                    }
30825|  1.89k|                    stack.pop_back();
30826|  1.89k|                    continue;
30827|  1.89k|                }
30828|       |
30829|       |                // a converted key must outlive the reference returned by sanitize_utf8_for_write
30830|  3.38k|                const object_key_string_t key_string = current.object_it->first;
30831|  3.38k|                write_ubjson_text(key_string, j, false, use_bjdata);
30832|  3.38k|                const BasicJsonType* child = &(current.object_it->second);
30833|  3.38k|                const bool child_prefix = current.prefix_required;
30834|  3.38k|                ++stack.back().object_it;
30835|  3.38k|                write_ubjson_value_or_push(*child, child_prefix, use_count, use_type, use_bjdata, bjdata_version, stack);
30836|  3.38k|            }
30837|  18.1k|        }
30838|  4.20k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_ubjson_value_or_pushERKSG_bbbbNS1_16bjdata_version_tERNS6_INSJ_12ubjson_frameENSA_ISN_EEEE:
30741|  16.4k|    {
30742|  16.4k|        if (!j.is_array() && !j.is_object())
  ------------------
  |  Branch (30742:13): [True: 11.6k, False: 4.84k]
  |  Branch (30742:30): [True: 8.10k, False: 3.53k]
  ------------------
30743|  8.10k|        {
30744|  8.10k|            write_ubjson(j, use_count, use_type, add_prefix, use_bjdata, bjdata_version);
30745|  8.10k|            return;
30746|  8.10k|        }
30747|       |
30748|  8.37k|        if (use_bjdata && j.is_object() && is_bjdata_ndarray(j)
  ------------------
  |  Branch (30748:13): [True: 8.37k, False: 0]
  |  Branch (30748:27): [True: 3.53k, False: 4.84k]
  |  Branch (30748:44): [True: 522, False: 3.01k]
  ------------------
30749|    522|                && !write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type, bjdata_version))
  ------------------
  |  Branch (30749:20): [True: 106, False: 416]
  ------------------
30750|    106|        {
30751|       |            // fully written as an ND-array: nothing below it to come back to
30752|    106|            return;
30753|    106|        }
30754|       |
30755|  8.27k|        const bool is_array = j.is_array();
30756|  8.27k|        bool prefix_required = true;
30757|  8.27k|        if (is_array)
  ------------------
  |  Branch (30757:13): [True: 4.84k, False: 3.43k]
  ------------------
30758|  4.84k|        {
30759|  4.84k|            write_ubjson_start_container<true>(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
30760|  4.84k|        }
30761|  3.43k|        else
30762|  3.43k|        {
30763|  3.43k|            write_ubjson_start_container<false>(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
30764|  3.43k|        }
30765|       |
30766|  8.27k|        const bool empty = is_array ? j.m_data.m_value.array->empty() : j.m_data.m_value.object->empty();
  ------------------
  |  Branch (30766:28): [True: 4.84k, False: 3.43k]
  ------------------
30767|  8.27k|        if (!empty)
  ------------------
  |  Branch (30767:13): [True: 5.90k, False: 2.37k]
  ------------------
30768|  5.90k|        {
30769|  5.90k|            stack.emplace_back(&j, prefix_required);
30770|  5.90k|            return;
30771|  5.90k|        }
30772|       |
30773|       |        // write_ubjson_start_container returns !use_count, i.e. whether a
30774|       |        // closer still has to be written; use_count is constant for the whole
30775|       |        // document, so that is recomputed here instead of being carried along
30776|  2.37k|        if (!use_count)
  ------------------
  |  Branch (30776:13): [True: 878, False: 1.49k]
  ------------------
30777|    878|        {
30778|    878|            oa.write_character(to_char_type(is_array ? ']' : '}'));
  ------------------
  |  Branch (30778:45): [True: 306, False: 572]
  ------------------
30779|    878|        }
30780|  2.37k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12ubjson_frameC2EPKSG_b:
30709|  5.90k|            : binary_container_frame(value_)
30710|  5.90k|            , prefix_required(prefix_required_)
30711|  5.90k|        {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22binary_container_frameC2EPKSG_:
30431|  5.90k|            : value(value_)
30432|  5.90k|        {
30433|  5.90k|            if (value->is_object())
  ------------------
  |  Branch (30433:17): [True: 1.89k, False: 4.01k]
  ------------------
30434|  1.89k|            {
30435|  1.89k|                object_it = value->m_data.m_value.object->cbegin();
30436|  1.89k|            }
30437|  4.01k|            else
30438|  4.01k|            {
30439|  4.01k|                array_it = value->m_data.m_value.array->cbegin();
30440|  4.01k|            }
30441|  5.90k|        }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4typeEv:
42051|   745k|    {
42052|   745k|        return m_data.m_type;
42053|   745k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE15write_characterEh:
29002|   652k|    {
29003|   652k|        if (JSON_HEDLEY_UNLIKELY(cursor == limit))
  ------------------
  |  | 1697|   652k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 45.4k, False: 607k]
  |  |  ------------------
  ------------------
29004|  45.4k|        {
29005|  45.4k|            grow(1);
29006|  45.4k|        }
29007|   652k|        *cursor++ = c;
29008|   652k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE4growEm:
29109|  83.7k|    {
29110|       |        // use the capacity the vector already has, else at least double it;
29111|       |        // never less than min_vector_sink_capacity, so that a small value does not
29112|       |        // reallocate for every few bytes
29113|  83.7k|        const std::size_t written = position();
29114|  83.7k|        const std::size_t needed = written + length;
29115|  83.7k|        const std::size_t capacity = (std::max)(min_vector_sink_capacity, needed <= v->capacity()
  ------------------
  |  Branch (29115:75): [True: 42.1k, False: 41.5k]
  ------------------
29116|  83.7k|                                                ? v->capacity()
29117|  83.7k|                                                : (std::max)(needed, v->capacity() * 2));
29118|  83.7k|        v->reserve(capacity);
29119|       |        // resize() zeroes the characters it adds. Zeroing all of a doubled
29120|       |        // capacity, megabytes of a fresh allocation, at once faults in its
29121|       |        // pages and evicts them from the cache before the writer gets there,
29122|       |        // so its stores miss again; a window ahead of the position is still
29123|       |        // cached when they come (the binary writers on a long array of
29124|       |        // numbers: 4-26 % faster on x86, 1-2.5 % on Apple M1)
29125|  83.7k|        v->resize((std::min)(capacity, (std::max)(needed, written + vector_sink_window)));
29126|  83.7k|        cursor = v->data() + written;
29127|  83.7k|        limit = v->data() + v->size();
29128|  83.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12to_char_typeIhTnPNS4_9enable_ifIXsr3std11is_unsignedIT_EE5valueEvE4typeELPv0EEEhh:
34871|  1.66M|    {
34872|  1.66M|        return x;
34873|  1.66M|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE31write_number_with_ubjson_prefixIlTnNS4_9enable_ifIXsr11is_integralIT_EE5valueEiE4typeELi0EEEvSM_bb:
32946|  19.7k|    {
32947|  19.7k|        const CharType prefix = ubjson_integer_prefix(n, use_bjdata);
32948|  19.7k|        if (add_prefix)
  ------------------
  |  Branch (32948:13): [True: 17.9k, False: 1.81k]
  ------------------
32949|  17.9k|        {
32950|  17.9k|            oa.write_character(prefix);
32951|  17.9k|        }
32952|  19.7k|        write_ubjson_integer_payload(prefix, n, use_bjdata);
32953|  19.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE21ubjson_integer_prefixIlEEhT_b:
33340|  35.3k|    {
33341|  35.3k|        if (value_in_range_of<std::int8_t>(n))
  ------------------
  |  Branch (33341:13): [True: 17.0k, False: 18.3k]
  ------------------
33342|  17.0k|        {
33343|  17.0k|            return 'i';
33344|  17.0k|        }
33345|  18.3k|        if (value_in_range_of<std::uint8_t>(n))
  ------------------
  |  Branch (33345:13): [True: 1.01k, False: 17.2k]
  ------------------
33346|  1.01k|        {
33347|  1.01k|            return 'U';
33348|  1.01k|        }
33349|  17.2k|        if (value_in_range_of<std::int16_t>(n))
  ------------------
  |  Branch (33349:13): [True: 5.50k, False: 11.7k]
  ------------------
33350|  5.50k|        {
33351|  5.50k|            return 'I';
33352|  5.50k|        }
33353|  11.7k|        if (use_bjdata && value_in_range_of<std::uint16_t>(n))
  ------------------
  |  Branch (33353:13): [True: 11.7k, False: 0]
  |  Branch (33353:27): [True: 872, False: 10.9k]
  ------------------
33354|    872|        {
33355|    872|            return 'u';
33356|    872|        }
33357|  10.9k|        if (value_in_range_of<std::int32_t>(n))
  ------------------
  |  Branch (33357:13): [True: 4.82k, False: 6.10k]
  ------------------
33358|  4.82k|        {
33359|  4.82k|            return 'l';
33360|  4.82k|        }
33361|  6.10k|        if (use_bjdata && value_in_range_of<std::uint32_t>(n))
  ------------------
  |  Branch (33361:13): [True: 6.10k, False: 0]
  |  Branch (33361:27): [True: 656, False: 5.44k]
  ------------------
33362|    656|        {
33363|    656|            return 'm';
33364|    656|        }
33365|  5.44k|        if (value_in_range_of<std::int64_t>(n))
  ------------------
  |  Branch (33365:13): [True: 5.44k, False: 0]
  ------------------
33366|  5.44k|        {
33367|  5.44k|            return 'L';
33368|  5.44k|        }
33369|      0|        if (use_bjdata && std::is_unsigned<NumberType>::value && integer_fits_max<std::uint64_t>(n))
  ------------------
  |  Branch (33369:13): [True: 0, False: 0]
  |  Branch (33369:27): [Folded, False: 0]
  |  Branch (33369:66): [True: 0, False: 0]
  ------------------
33370|      0|        {
33371|      0|            return 'M';
33372|      0|        }
33373|       |        // anything else is treated as a high-precision number
33374|      0|        return 'H';
33375|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIalEEbT0_:
 5295|  44.5k|{
 5296|  44.5k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  44.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IalLb0EvE4testEl:
 5279|  44.5k|    {
 5280|  44.5k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  44.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IalLb1ELb1EE4testEl:
 5263|  44.5k|    {
 5264|  44.5k|        using CommonType = typename std::common_type<OfType, T>::type;
 5265|  44.5k|        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
  ------------------
  |  Branch (5265:16): [True: 38.7k, False: 5.88k]
  ------------------
 5266|  38.7k|               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5266:19): [True: 25.5k, False: 13.1k]
  ------------------
 5267|  44.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIhlEEbT0_:
 5295|  19.8k|{
 5296|  19.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  19.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IhlLb0EvE4testEl:
 5279|  19.8k|    {
 5280|  19.8k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IhlLb0ELb1EE4testEl:
 5253|  19.8k|    {
 5254|  19.8k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|  19.8k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 13.9k, False: 5.90k]
  |  Branch (5255:28): [True: 1.97k, False: 12.0k]
  ------------------
 5256|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIslEEbT0_:
 5295|  23.4k|{
 5296|  23.4k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  23.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IslLb0EvE4testEl:
 5279|  23.4k|    {
 5280|  23.4k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  23.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IslLb1ELb1EE4testEl:
 5263|  23.4k|    {
 5264|  23.4k|        using CommonType = typename std::common_type<OfType, T>::type;
 5265|  23.4k|        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
  ------------------
  |  Branch (5265:16): [True: 20.2k, False: 3.13k]
  ------------------
 5266|  20.2k|               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5266:19): [True: 11.4k, False: 8.80k]
  ------------------
 5267|  23.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofItlEEbT0_:
 5295|  13.0k|{
 5296|  13.0k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  13.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ItlLb0EvE4testEl:
 5279|  13.0k|    {
 5280|  13.0k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  13.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ItlLb0ELb1EE4testEl:
 5253|  13.0k|    {
 5254|  13.0k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|  13.0k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 9.53k, False: 3.47k]
  |  Branch (5255:28): [True: 1.46k, False: 8.06k]
  ------------------
 5256|  13.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIilEEbT0_:
 5295|  14.9k|{
 5296|  14.9k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  14.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IilLb0EvE4testEl:
 5279|  14.9k|    {
 5280|  14.9k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IilLb1ELb1EE4testEl:
 5263|  14.9k|    {
 5264|  14.9k|        using CommonType = typename std::common_type<OfType, T>::type;
 5265|  14.9k|        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
  ------------------
  |  Branch (5265:16): [True: 12.9k, False: 1.99k]
  ------------------
 5266|  12.9k|               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5266:19): [True: 8.61k, False: 4.36k]
  ------------------
 5267|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIjlEEbT0_:
 5295|  7.03k|{
 5296|  7.03k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  7.03k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IjlLb0EvE4testEl:
 5279|  7.03k|    {
 5280|  7.03k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  7.03k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IjlLb0ELb1EE4testEl:
 5253|  7.03k|    {
 5254|  7.03k|        using CommonType = typename std::common_type<OfType, T>::type;
 5255|  7.03k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5255:16): [True: 5.12k, False: 1.91k]
  |  Branch (5255:28): [True: 1.21k, False: 3.90k]
  ------------------
 5256|  7.03k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_integer_payloadIlEEvhT_b:
33383|  19.7k|    {
33384|  19.7k|        switch (prefix)
33385|  19.7k|        {
33386|  7.71k|            case 'i':
  ------------------
  |  Branch (33386:13): [True: 7.71k, False: 12.0k]
  ------------------
33387|  7.71k|                write_number(static_cast<std::int8_t>(n), use_bjdata);
33388|  7.71k|                break;
33389|    678|            case 'U':
  ------------------
  |  Branch (33389:13): [True: 678, False: 19.0k]
  ------------------
33390|    678|                write_number(static_cast<std::uint8_t>(n), use_bjdata);
33391|    678|                break;
33392|  3.69k|            case 'I':
  ------------------
  |  Branch (33392:13): [True: 3.69k, False: 16.0k]
  ------------------
33393|  3.69k|                write_number(static_cast<std::int16_t>(n), use_bjdata);
33394|  3.69k|                break;
33395|    630|            case 'u':
  ------------------
  |  Branch (33395:13): [True: 630, False: 19.1k]
  ------------------
33396|    630|                write_number(static_cast<std::uint16_t>(n), use_bjdata);
33397|    630|                break;
33398|  3.44k|            case 'l':
  ------------------
  |  Branch (33398:13): [True: 3.44k, False: 16.3k]
  ------------------
33399|  3.44k|                write_number(static_cast<std::int32_t>(n), use_bjdata);
33400|  3.44k|                break;
33401|    432|            case 'm':
  ------------------
  |  Branch (33401:13): [True: 432, False: 19.3k]
  ------------------
33402|    432|                write_number(static_cast<std::uint32_t>(n), use_bjdata);
33403|    432|                break;
33404|  3.15k|            case 'L':
  ------------------
  |  Branch (33404:13): [True: 3.15k, False: 16.5k]
  ------------------
33405|  3.15k|                write_number(static_cast<std::int64_t>(n), use_bjdata);
33406|  3.15k|                break;
33407|      0|            case 'M':
  ------------------
  |  Branch (33407:13): [True: 0, False: 19.7k]
  ------------------
33408|      0|                write_number(static_cast<std::uint64_t>(n), use_bjdata);
33409|      0|                break;
33410|      0|            default:
  ------------------
  |  Branch (33410:13): [True: 0, False: 19.7k]
  ------------------
33411|      0|            {
33412|      0|                JSON_ASSERT(prefix == 'H');
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (33412:17): [True: 0, False: 0]
  ------------------
33413|      0|                write_ubjson_high_precision(n, use_bjdata);
33414|      0|                break;
33415|      0|            }
33416|  19.7k|        }
33417|  19.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIaEEvT_b:
34737|  16.2k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  16.2k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  16.2k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  16.2k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 16.2k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  16.2k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  16.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE16write_charactersEPKhm:
29015|  63.6k|    {
29016|  63.6k|        if (JSON_HEDLEY_UNLIKELY(space() < length))
  ------------------
  |  | 1697|  63.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1.75k, False: 61.9k]
  |  |  ------------------
  ------------------
29017|  1.75k|        {
29018|  1.75k|            if (length >= max_reserve_size)
  ------------------
  |  Branch (29018:17): [True: 115, False: 1.63k]
  ------------------
29019|    115|            {
29020|    115|                append(s, length);
29021|    115|                return;
29022|    115|            }
29023|  1.63k|            grow(length);
29024|  1.63k|        }
29025|  63.5k|        if (length <= 32)
  ------------------
  |  Branch (29025:13): [True: 63.2k, False: 307]
  ------------------
29026|  63.2k|        {
29027|  63.2k|            copy_short(cursor, s, length, std::integral_constant<bool, sizeof(CharType) == 1>());
29028|  63.2k|            cursor += length;
29029|  63.2k|        }
29030|    307|        else
29031|    307|        {
29032|    307|            std::memcpy(cursor, s, length * sizeof(CharType));
29033|    307|            cursor += length;
29034|    307|        }
29035|  63.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE5spaceEv:
29100|   444k|    {
29101|   444k|        return static_cast<std::size_t>(limit - cursor);
29102|   444k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE6appendEPKhm:
29136|    115|    {
29137|    115|        const std::size_t written = position();
29138|    115|        v->resize(written);
29139|    115|        if (v->capacity() - written < length)
  ------------------
  |  Branch (29139:13): [True: 115, False: 0]
  ------------------
29140|    115|        {
29141|       |            // grow geometrically, with room for the writes that follow, so
29142|       |            // that the next grow() need not reallocate right away
29143|    115|            v->reserve((std::max)(v->capacity() * 2, written + length + max_reserve_size));
29144|    115|        }
29145|    115|        v->insert(v->end(), s, s + length);
29146|    115|        cursor = v->data() + v->size();
29147|    115|        limit = cursor;
29148|    115|    }
_ZN8nlohmann16json_abi_v3_12_06detail10copy_shortIhEEvPT_PKS3_mNSt3__117integral_constantIbLb1EEE:
28898|   198k|{
28899|   198k|    JSON_ASSERT(length <= 32);
  ------------------
  |  | 2643|   198k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28899:5): [True: 198k, False: 0]
  ------------------
28900|   198k|    if (length >= 16)
  ------------------
  |  Branch (28900:9): [True: 2.57k, False: 195k]
  ------------------
28901|  2.57k|    {
28902|  2.57k|        std::array<char, 16> first; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
28903|  2.57k|        std::array<char, 16> last; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
28904|  2.57k|        std::memcpy(first.data(), src, 16);
28905|  2.57k|        std::memcpy(last.data(), src + (length - 16), 16);
28906|  2.57k|        std::memcpy(dst, first.data(), 16);
28907|  2.57k|        std::memcpy(dst + (length - 16), last.data(), 16);
28908|  2.57k|    }
28909|   195k|    else if (length >= 8)
  ------------------
  |  Branch (28909:14): [True: 59.7k, False: 136k]
  ------------------
28910|  59.7k|    {
28911|  59.7k|        std::array<char, 8> first; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
28912|  59.7k|        std::array<char, 8> last; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
28913|  59.7k|        std::memcpy(first.data(), src, 8);
28914|  59.7k|        std::memcpy(last.data(), src + (length - 8), 8);
28915|  59.7k|        std::memcpy(dst, first.data(), 8);
28916|  59.7k|        std::memcpy(dst + (length - 8), last.data(), 8);
28917|  59.7k|    }
28918|   136k|    else if (length >= 4)
  ------------------
  |  Branch (28918:14): [True: 22.5k, False: 113k]
  ------------------
28919|  22.5k|    {
28920|  22.5k|        std::array<char, 4> first; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
28921|  22.5k|        std::array<char, 4> last; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
28922|  22.5k|        std::memcpy(first.data(), src, 4);
28923|  22.5k|        std::memcpy(last.data(), src + (length - 4), 4);
28924|  22.5k|        std::memcpy(dst, first.data(), 4);
28925|  22.5k|        std::memcpy(dst + (length - 4), last.data(), 4);
28926|  22.5k|    }
28927|   113k|    else if (length != 0)
  ------------------
  |  Branch (28927:14): [True: 90.0k, False: 23.4k]
  ------------------
28928|  90.0k|    {
28929|       |        // 1 to 3: the first, the middle, and the last character
28930|  90.0k|        const CharType a = src[0];
28931|  90.0k|        const CharType b = src[length >> 1];
28932|  90.0k|        const CharType c = src[length - 1];
28933|  90.0k|        dst[0] = a;
28934|  90.0k|        dst[length >> 1] = b;
28935|  90.0k|        dst[length - 1] = c;
28936|  90.0k|    }
28937|   198k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIhEEvT_b:
34737|  5.08k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  5.08k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  5.08k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  5.08k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 5.08k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  5.08k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  5.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIsEEvT_b:
34737|  5.39k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  5.39k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  5.39k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  5.39k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 5.39k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  5.39k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  5.39k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberItEEvT_b:
34737|  1.78k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  1.78k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  1.78k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  1.78k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 1.78k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  1.78k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  1.78k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIiEEvT_b:
34737|  4.92k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  4.92k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  4.92k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  4.92k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 4.92k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  4.92k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIjEEvT_b:
34737|  1.82k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  1.82k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  1.82k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  1.82k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 1.82k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  1.82k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  1.82k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIlEEvT_b:
34737|  4.58k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  4.58k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  4.58k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  4.58k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 4.58k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  4.58k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  4.58k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberImEEvT_b:
34737|  2.00k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  2.00k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  2.00k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  2.00k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 2.00k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  2.00k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  2.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE31write_number_with_ubjson_prefixImTnNS4_9enable_ifIXsr11is_integralIT_EE5valueEiE4typeELi0EEEvSM_bb:
32946|  22.1k|    {
32947|  22.1k|        const CharType prefix = ubjson_integer_prefix(n, use_bjdata);
32948|  22.1k|        if (add_prefix)
  ------------------
  |  Branch (32948:13): [True: 20.0k, False: 2.03k]
  ------------------
32949|  20.0k|        {
32950|  20.0k|            oa.write_character(prefix);
32951|  20.0k|        }
32952|  22.1k|        write_ubjson_integer_payload(prefix, n, use_bjdata);
32953|  22.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE21ubjson_integer_prefixImEEhT_b:
33340|  47.2k|    {
33341|  47.2k|        if (value_in_range_of<std::int8_t>(n))
  ------------------
  |  Branch (33341:13): [True: 25.5k, False: 21.6k]
  ------------------
33342|  25.5k|        {
33343|  25.5k|            return 'i';
33344|  25.5k|        }
33345|  21.6k|        if (value_in_range_of<std::uint8_t>(n))
  ------------------
  |  Branch (33345:13): [True: 8.21k, False: 13.4k]
  ------------------
33346|  8.21k|        {
33347|  8.21k|            return 'U';
33348|  8.21k|        }
33349|  13.4k|        if (value_in_range_of<std::int16_t>(n))
  ------------------
  |  Branch (33349:13): [True: 2.16k, False: 11.3k]
  ------------------
33350|  2.16k|        {
33351|  2.16k|            return 'I';
33352|  2.16k|        }
33353|  11.3k|        if (use_bjdata && value_in_range_of<std::uint16_t>(n))
  ------------------
  |  Branch (33353:13): [True: 11.3k, False: 0]
  |  Branch (33353:27): [True: 1.96k, False: 9.34k]
  ------------------
33354|  1.96k|        {
33355|  1.96k|            return 'u';
33356|  1.96k|        }
33357|  9.34k|        if (value_in_range_of<std::int32_t>(n))
  ------------------
  |  Branch (33357:13): [True: 1.77k, False: 7.57k]
  ------------------
33358|  1.77k|        {
33359|  1.77k|            return 'l';
33360|  1.77k|        }
33361|  7.57k|        if (use_bjdata && value_in_range_of<std::uint32_t>(n))
  ------------------
  |  Branch (33361:13): [True: 7.57k, False: 0]
  |  Branch (33361:27): [True: 2.02k, False: 5.54k]
  ------------------
33362|  2.02k|        {
33363|  2.02k|            return 'm';
33364|  2.02k|        }
33365|  5.54k|        if (value_in_range_of<std::int64_t>(n))
  ------------------
  |  Branch (33365:13): [True: 2.11k, False: 3.43k]
  ------------------
33366|  2.11k|        {
33367|  2.11k|            return 'L';
33368|  2.11k|        }
33369|  3.43k|        if (use_bjdata && std::is_unsigned<NumberType>::value && integer_fits_max<std::uint64_t>(n))
  ------------------
  |  Branch (33369:13): [True: 3.43k, False: 0]
  |  Branch (33369:27): [True: 0, Folded]
  |  Branch (33369:66): [True: 3.43k, False: 0]
  ------------------
33370|  3.43k|        {
33371|  3.43k|            return 'M';
33372|  3.43k|        }
33373|       |        // anything else is treated as a high-precision number
33374|      0|        return 'H';
33375|  3.43k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIamEEbT0_:
 5295|  50.2k|{
 5296|  50.2k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  50.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IamLb0EvE4testEm:
 5279|  50.2k|    {
 5280|  50.2k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  50.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IamLb1ELb0EE4testEm:
 5243|  50.2k|    {
 5244|  50.2k|        using CommonType = typename std::common_type<OfType, T>::type;
 5245|  50.2k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5246|  50.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIhmEEbT0_:
 5295|  29.8k|{
 5296|  29.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  29.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IhmLb0EvE4testEm:
 5279|  29.8k|    {
 5280|  29.8k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  29.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IhmLb0ELb0EE4testEm:
 5233|  29.8k|    {
 5234|  29.8k|        using CommonType = typename std::common_type<OfType, T>::type;
 5235|  29.8k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5236|  29.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIsmEEbT0_:
 5295|  14.0k|{
 5296|  14.0k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  14.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IsmLb0EvE4testEm:
 5279|  14.0k|    {
 5280|  14.0k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  14.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IsmLb1ELb0EE4testEm:
 5243|  14.0k|    {
 5244|  14.0k|        using CommonType = typename std::common_type<OfType, T>::type;
 5245|  14.0k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5246|  14.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofItmEEbT0_:
 5295|  16.8k|{
 5296|  16.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  16.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ItmLb0EvE4testEm:
 5279|  16.8k|    {
 5280|  16.8k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  16.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ItmLb0ELb0EE4testEm:
 5233|  16.8k|    {
 5234|  16.8k|        using CommonType = typename std::common_type<OfType, T>::type;
 5235|  16.8k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5236|  16.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIimEEbT0_:
 5295|  9.84k|{
 5296|  9.84k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  9.84k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IimLb0EvE4testEm:
 5279|  9.84k|    {
 5280|  9.84k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  9.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IimLb1ELb0EE4testEm:
 5243|  9.84k|    {
 5244|  9.84k|        using CommonType = typename std::common_type<OfType, T>::type;
 5245|  9.84k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5246|  9.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIjmEEbT0_:
 5295|  11.2k|{
 5296|  11.2k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5297|  11.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IjmLb0EvE4testEm:
 5279|  11.2k|    {
 5280|  11.2k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5281|  11.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IjmLb0ELb0EE4testEm:
 5233|  11.2k|    {
 5234|  11.2k|        using CommonType = typename std::common_type<OfType, T>::type;
 5235|  11.2k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5236|  11.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE16integer_fits_maxImmEEbT0_:
30223|  62.5k|    {
30224|  62.5k|        return integer_fits_max<TargetType>(n, std::integral_constant<bool, integer_range<TargetType, NumberType>::may_exceed_max>());
30225|  62.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE16integer_fits_maxImmEEbT0_NS4_17integral_constantIbLb0EEE:
30229|  62.5k|    {
30230|  62.5k|        return true;
30231|  62.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_integer_payloadImEEvhT_b:
33383|  22.1k|    {
33384|  22.1k|        switch (prefix)
33385|  22.1k|        {
33386|  8.54k|            case 'i':
  ------------------
  |  Branch (33386:13): [True: 8.54k, False: 13.5k]
  ------------------
33387|  8.54k|                write_number(static_cast<std::int8_t>(n), use_bjdata);
33388|  8.54k|                break;
33389|  4.41k|            case 'U':
  ------------------
  |  Branch (33389:13): [True: 4.41k, False: 17.7k]
  ------------------
33390|  4.41k|                write_number(static_cast<std::uint8_t>(n), use_bjdata);
33391|  4.41k|                break;
33392|  1.70k|            case 'I':
  ------------------
  |  Branch (33392:13): [True: 1.70k, False: 20.4k]
  ------------------
33393|  1.70k|                write_number(static_cast<std::int16_t>(n), use_bjdata);
33394|  1.70k|                break;
33395|  1.15k|            case 'u':
  ------------------
  |  Branch (33395:13): [True: 1.15k, False: 20.9k]
  ------------------
33396|  1.15k|                write_number(static_cast<std::uint16_t>(n), use_bjdata);
33397|  1.15k|                break;
33398|  1.48k|            case 'l':
  ------------------
  |  Branch (33398:13): [True: 1.48k, False: 20.6k]
  ------------------
33399|  1.48k|                write_number(static_cast<std::int32_t>(n), use_bjdata);
33400|  1.48k|                break;
33401|  1.39k|            case 'm':
  ------------------
  |  Branch (33401:13): [True: 1.39k, False: 20.7k]
  ------------------
33402|  1.39k|                write_number(static_cast<std::uint32_t>(n), use_bjdata);
33403|  1.39k|                break;
33404|  1.42k|            case 'L':
  ------------------
  |  Branch (33404:13): [True: 1.42k, False: 20.7k]
  ------------------
33405|  1.42k|                write_number(static_cast<std::int64_t>(n), use_bjdata);
33406|  1.42k|                break;
33407|  2.00k|            case 'M':
  ------------------
  |  Branch (33407:13): [True: 2.00k, False: 20.1k]
  ------------------
33408|  2.00k|                write_number(static_cast<std::uint64_t>(n), use_bjdata);
33409|  2.00k|                break;
33410|      0|            default:
  ------------------
  |  Branch (33410:13): [True: 0, False: 22.1k]
  ------------------
33411|      0|            {
33412|      0|                JSON_ASSERT(prefix == 'H');
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (33412:17): [True: 0, False: 0]
  ------------------
33413|      0|                write_ubjson_high_precision(n, use_bjdata);
33414|      0|                break;
33415|      0|            }
33416|  22.1k|        }
33417|  22.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE7reserveEm:
29046|   380k|    {
29047|   380k|        JSON_ASSERT(length <= max_reserve_size);
  ------------------
  |  | 2643|   380k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29047:9): [True: 380k, False: 0]
  ------------------
29048|   380k|        if (JSON_HEDLEY_UNLIKELY(space() < length))
  ------------------
  |  | 1697|   380k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 36.6k, False: 344k]
  |  |  ------------------
  ------------------
29049|  36.6k|        {
29050|  36.6k|            grow(length);
29051|  36.6k|        }
29052|   380k|        return cursor;
29053|   380k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE6commitEm:
29058|   380k|    {
29059|   380k|        cursor += length;
29060|   380k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE31write_number_with_ubjson_prefixIdTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEvSM_bb:
32932|  19.4k|    {
32933|  19.4k|        if (add_prefix)
  ------------------
  |  Branch (32933:13): [True: 18.4k, False: 970]
  ------------------
32934|  18.4k|        {
32935|  18.4k|            oa.write_character(get_ubjson_float_prefix<NumberType>());
32936|  18.4k|        }
32937|  19.4k|        write_number(n, use_bjdata);
32938|  19.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE23get_ubjson_float_prefixIdEEhv:
33523|   137k|    {
33524|   137k|        static_assert(std::is_same<FloatType, float>::value || std::is_same<FloatType, double>::value,
33525|   137k|                      "number_float_t must be float or double for the UBJSON/BJData writer");
33526|   137k|        return std::is_same<FloatType, float>::value ? 'd' : 'D';  // float 32 / float 64
  ------------------
  |  Branch (33526:16): [Folded, False: 137k]
  ------------------
33527|   137k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIdEEvT_b:
34737|  19.4k|    {
34738|       |        // step 1: write the number to an array of length NumberType
34739|  19.4k|        std::array<CharType, sizeof(NumberType)> vec{};
34740|  19.4k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
34741|       |
34742|       |        // step 2: write the array to output (with possible reordering)
34743|  19.4k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (34743:13): [True: 0, False: 19.4k]
  ------------------
34744|      0|        {
34745|       |            // reverse byte order prior to conversion if necessary
34746|      0|            reverse_bytes(vec);
34747|      0|        }
34748|       |
34749|  19.4k|        oa.write_characters(vec.data(), sizeof(NumberType));
34750|  19.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE17write_ubjson_textERKSC_RKSG_bb:
33170|   136k|    {
33171|   136k|        const std::size_t size = value.size();
33172|   136k|        if (JSON_HEDLEY_LIKELY(error_handler == error_handler_t::keep) && JSON_HEDLEY_LIKELY(size <= max_text_in_reservation - 1))
  ------------------
  |  | 1696|   273k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 136k, False: 0]
  |  |  ------------------
  ------------------
                      if (JSON_HEDLEY_LIKELY(error_handler == error_handler_t::keep) && JSON_HEDLEY_LIKELY(size <= max_text_in_reservation - 1))
  ------------------
  |  | 1696|   136k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 136k, False: 322]
  |  |  ------------------
  ------------------
33173|   136k|        {
33174|   136k|            CharType* const out = oa.reserve(size + 3);
33175|   136k|            CharType* p = out;
33176|   136k|            if (add_marker)
  ------------------
  |  Branch (33176:17): [True: 60.7k, False: 75.4k]
  ------------------
33177|  60.7k|            {
33178|  60.7k|                *p++ = to_char_type('S');
33179|  60.7k|            }
33180|   136k|            *p++ = to_char_type(size <= 127 ? 'i' : 'U');
  ------------------
  |  Branch (33180:33): [True: 136k, False: 238]
  ------------------
33181|   136k|            *p++ = to_char_type(static_cast<std::uint8_t>(size));
33182|   136k|            copy_characters(p, reinterpret_cast<const CharType*>(value.data()), size);
33183|   136k|            oa.commit(static_cast<std::size_t>(p - out) + size);
33184|   136k|            return;
33185|   136k|        }
33186|       |
33187|    322|        write_ubjson_checked_text(value, context, add_marker, use_bjdata);
33188|    322|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE15copy_charactersEPhPKhm:
32745|   136k|    {
32746|   136k|        if (length <= 32)
  ------------------
  |  Branch (32746:13): [True: 135k, False: 1.10k]
  ------------------
32747|   135k|        {
32748|   135k|            copy_short(dst, src, length, std::integral_constant<bool, sizeof(CharType) == 1>());
32749|   135k|        }
32750|  1.10k|        else
32751|  1.10k|        {
32752|  1.10k|            std::memcpy(dst, src, length * sizeof(CharType));
32753|  1.10k|        }
32754|   136k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE25write_ubjson_checked_textERKSC_RKSG_bb:
33194|    322|    {
33195|    322|        string_t storage;
33196|    322|        const string_t& sanitized = sanitize_utf8_for_write(value, context, storage);
33197|    322|        if (add_marker)
  ------------------
  |  Branch (33197:13): [True: 158, False: 164]
  ------------------
33198|    158|        {
33199|    158|            oa.write_character(to_char_type('S'));
33200|    158|        }
33201|    322|        write_number_with_ubjson_prefix(sanitized.size(), true, use_bjdata);
33202|    322|        write_bytes(sanitized.data(), sanitized.size());
33203|    322|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE23sanitize_utf8_for_writeERKSC_RKSG_RSC_:
34513|    322|    {
34514|    322|        switch (error_handler)
34515|    322|        {
34516|    322|            case error_handler_t::keep:
  ------------------
  |  Branch (34516:13): [True: 322, False: 0]
  ------------------
34517|    322|                return s; // NOLINT(bugprone-return-const-ref-from-parameter): callers pass lvalues that outlive the call
34518|       |
34519|      0|            case error_handler_t::strict:
  ------------------
  |  Branch (34519:13): [True: 0, False: 322]
  ------------------
34520|      0|                check_utf8(s, context);
34521|      0|                return s; // NOLINT(bugprone-return-const-ref-from-parameter): callers pass lvalues that outlive the call
34522|       |
34523|      0|            case error_handler_t::replace:
  ------------------
  |  Branch (34523:13): [True: 0, False: 322]
  ------------------
34524|      0|            case error_handler_t::ignore:
  ------------------
  |  Branch (34524:13): [True: 0, False: 322]
  ------------------
34525|      0|            default:
  ------------------
  |  Branch (34525:13): [True: 0, False: 322]
  ------------------
34526|      0|                if (is_valid_utf8(s))
  ------------------
  |  Branch (34526:21): [True: 0, False: 0]
  ------------------
34527|      0|                {
34528|      0|                    return s; // NOLINT(bugprone-return-const-ref-from-parameter): callers pass lvalues that outlive the call
34529|      0|                }
34530|      0|                storage = sanitize_utf8(s, error_handler);
34531|      0|                return storage;
34532|    322|        }
34533|    322|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_start_containerILb1EEEbRKSG_bbbbRb:
30634|   241k|    {
30635|   241k|        prefix_required = true;
30636|   241k|        if (add_prefix)
  ------------------
  |  Branch (30636:13): [True: 241k, False: 0]
  ------------------
30637|   241k|        {
30638|   241k|            oa.write_character(to_char_type(IsArray ? '[' : '{'));
  ------------------
  |  Branch (30638:45): [True: 241k, Folded]
  ------------------
30639|   241k|        }
30640|       |
30641|   241k|        const std::size_t size = IsArray ? j.m_data.m_value.array->size() : j.m_data.m_value.object->size();
  ------------------
  |  Branch (30641:34): [True: 241k, Folded]
  ------------------
30642|       |
30643|   241k|        if (use_type && size != 0)
  ------------------
  |  Branch (30643:13): [True: 76.1k, False: 165k]
  |  Branch (30643:25): [True: 72.5k, False: 3.53k]
  ------------------
30644|  72.5k|        {
30645|  72.5k|            if (!use_count)
  ------------------
  |  Branch (30645:17): [True: 0, False: 72.5k]
  ------------------
30646|      0|            {
30647|      0|                throw_size_marker_required(j);
30648|      0|            }
30649|  72.5k|            const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
30650|       |            // the first element of an array has been compared with itself
30651|  72.5k|            const bool same_prefix = std::all_of(IsArray ? j.begin() + 1 : j.begin(), j.end(),
  ------------------
  |  Branch (30651:50): [True: 72.5k, Folded]
  ------------------
30652|  72.5k|                                                 [this, first_prefix, use_bjdata](const BasicJsonType & v)
30653|  72.5k|            {
30654|  72.5k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
30655|  72.5k|            });
30656|       |
30657|       |            // an optimized array of a valueless type carries no payload, so a
30658|       |            // reader has nothing but the declared count to bound the allocation
30659|       |            // by and refuses an excessive one. Write the unoptimized form for
30660|       |            // those, at one byte per element, so the result can be read back.
30661|       |            // Objects are not affected: every element is preceded by its key.
30662|  72.5k|            const bool valueless_type = (first_prefix == 'Z' || first_prefix == 'T' || first_prefix == 'F');
  ------------------
  |  Branch (30662:42): [True: 818, False: 71.7k]
  |  Branch (30662:65): [True: 1.26k, False: 70.5k]
  |  Branch (30662:88): [True: 997, False: 69.5k]
  ------------------
30663|  72.5k|            const bool excessive_valueless = IsArray
  ------------------
  |  Branch (30663:46): [True: 72.5k, Folded]
  ------------------
30664|  72.5k|                                             && valueless_type
  ------------------
  |  Branch (30664:49): [True: 3.07k, False: 69.5k]
  ------------------
30665|  3.07k|                                             && size > detail::max_valueless_container_size;
  ------------------
  |  Branch (30665:49): [True: 0, False: 3.07k]
  ------------------
30666|       |
30667|  72.5k|            if (same_prefix && !excessive_valueless
  ------------------
  |  Branch (30667:17): [True: 64.2k, False: 8.31k]
  |  Branch (30667:32): [True: 64.2k, False: 0]
  ------------------
30668|  64.2k|                    && !(use_bjdata && is_bjdata_excluded_type_marker(first_prefix)))
  ------------------
  |  Branch (30668:26): [True: 64.2k, False: 0]
  |  Branch (30668:40): [True: 53.9k, False: 10.2k]
  ------------------
30669|  10.2k|            {
30670|  10.2k|                prefix_required = false;
30671|  10.2k|                oa.write_character(to_char_type('$'));
30672|  10.2k|                oa.write_character(first_prefix);
30673|  10.2k|            }
30674|  72.5k|        }
30675|       |
30676|   241k|        if (use_count)
  ------------------
  |  Branch (30676:13): [True: 152k, False: 89.6k]
  ------------------
30677|   152k|        {
30678|   152k|            write_ubjson_count(size, use_bjdata);
30679|   152k|        }
30680|       |
30681|   241k|        return !use_count;
30682|   241k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE13ubjson_prefixERKSG_b:
33468|   196k|    {
33469|   196k|        switch (j.type())
33470|   196k|        {
33471|  10.5k|            case value_t::null:
  ------------------
  |  Branch (33471:13): [True: 10.5k, False: 186k]
  ------------------
33472|  10.5k|                return 'Z';
33473|       |
33474|  12.2k|            case value_t::boolean:
  ------------------
  |  Branch (33474:13): [True: 12.2k, False: 184k]
  ------------------
33475|  12.2k|                return j.m_data.m_value.boolean ? 'T' : 'F';
  ------------------
  |  Branch (33475:24): [True: 8.98k, False: 3.22k]
  ------------------
33476|       |
33477|  15.5k|            case value_t::number_integer:
  ------------------
  |  Branch (33477:13): [True: 15.5k, False: 181k]
  ------------------
33478|  15.5k|                return ubjson_integer_prefix(j.m_data.m_value.number_integer, use_bjdata);
33479|       |
33480|  25.1k|            case value_t::number_unsigned:
  ------------------
  |  Branch (33480:13): [True: 25.1k, False: 171k]
  ------------------
33481|  25.1k|                return ubjson_integer_prefix(j.m_data.m_value.number_unsigned, use_bjdata);
33482|       |
33483|  36.4k|            case value_t::number_float:
  ------------------
  |  Branch (33483:13): [True: 36.4k, False: 160k]
  ------------------
33484|  36.4k|                return get_ubjson_float_prefix<number_float_t>();
33485|       |
33486|  13.8k|            case value_t::string:
  ------------------
  |  Branch (33486:13): [True: 13.8k, False: 182k]
  ------------------
33487|  13.8k|                return 'S';
33488|       |
33489|  66.4k|            case value_t::array: // fallthrough
  ------------------
  |  Branch (33489:13): [True: 66.4k, False: 130k]
  ------------------
33490|  67.8k|            case value_t::binary:
  ------------------
  |  Branch (33490:13): [True: 1.42k, False: 195k]
  ------------------
33491|  67.8k|                return '[';
33492|       |
33493|  15.1k|            case value_t::object:
  ------------------
  |  Branch (33493:13): [True: 15.1k, False: 181k]
  ------------------
33494|  15.1k|                return '{';
33495|       |
33496|      0|            case value_t::discarded:
  ------------------
  |  Branch (33496:13): [True: 0, False: 196k]
  ------------------
33497|      0|            default:  // discarded values
  ------------------
  |  Branch (33497:13): [True: 0, False: 196k]
  ------------------
33498|      0|                return 'N';
33499|   196k|        }
33500|   196k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE5frontEv:
43416|  84.1k|    {
43417|  84.1k|        return *cbegin();
43418|  84.1k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6cbeginEv:
43791|   219k|    {
43792|   219k|        const_iterator result(this);
43793|   219k|        result.set_begin();
43794|   219k|        return result;
43795|   219k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEC2EPSH_:
25545|   354k|    explicit iter_impl(pointer object) noexcept : m_object(object)
25546|   354k|    {
25547|   354k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2643|   354k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25547:9): [True: 354k, False: 0]
  ------------------
25548|       |
25549|       |        // m_it is already value-initialized, so this is not needed for
25550|       |        // correctness; it is kept because GCC generates faster loops with it
25551|       |        // (iterating a parsed document is 0.5-2.7 % slower without it, #6005)
25552|   354k|        if (m_object->is_object())
  ------------------
  |  Branch (25552:13): [True: 34.8k, False: 319k]
  ------------------
25553|  34.8k|        {
25554|  34.8k|            m_it.object_iterator = typename object_t::iterator();
25555|  34.8k|        }
25556|   319k|        else if (m_object->is_array())
  ------------------
  |  Branch (25556:18): [True: 319k, False: 0]
  ------------------
25557|   319k|        {
25558|   319k|            m_it.array_iterator = typename array_t::iterator();
25559|   319k|        }
25560|      0|        else
25561|      0|        {
25562|       |            // primitive (is_primitive(), including discarded)
25563|      0|            m_it.primitive_iterator = primitive_iterator_t();
25564|      0|        }
25565|   354k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9set_beginEv:
25631|   219k|    {
25632|   219k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2643|   219k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25632:9): [True: 219k, False: 0]
  ------------------
25633|       |
25634|   219k|        switch (m_object->m_data.m_type)
25635|   219k|        {
25636|  23.2k|            case value_t::object:
  ------------------
  |  Branch (25636:13): [True: 23.2k, False: 195k]
  ------------------
25637|  23.2k|            {
25638|  23.2k|                m_it.object_iterator = m_object->m_data.m_value.object->begin();
25639|  23.2k|                break;
25640|      0|            }
25641|       |
25642|   195k|            case value_t::array:
  ------------------
  |  Branch (25642:13): [True: 195k, False: 23.2k]
  ------------------
25643|   195k|            {
25644|   195k|                m_it.array_iterator = m_object->m_data.m_value.array->begin();
25645|   195k|                break;
25646|      0|            }
25647|       |
25648|      0|            case value_t::null:
  ------------------
  |  Branch (25648:13): [True: 0, False: 219k]
  ------------------
25649|      0|            {
25650|       |                // set to end so begin()==end() is true: null is empty
25651|      0|                m_it.primitive_iterator.set_end();
25652|      0|                break;
25653|      0|            }
25654|       |
25655|      0|            case value_t::string:
  ------------------
  |  Branch (25655:13): [True: 0, False: 219k]
  ------------------
25656|      0|            case value_t::boolean:
  ------------------
  |  Branch (25656:13): [True: 0, False: 219k]
  ------------------
25657|      0|            case value_t::number_integer:
  ------------------
  |  Branch (25657:13): [True: 0, False: 219k]
  ------------------
25658|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (25658:13): [True: 0, False: 219k]
  ------------------
25659|      0|            case value_t::number_float:
  ------------------
  |  Branch (25659:13): [True: 0, False: 219k]
  ------------------
25660|      0|            case value_t::binary:
  ------------------
  |  Branch (25660:13): [True: 0, False: 219k]
  ------------------
25661|      0|            case value_t::discarded:
  ------------------
  |  Branch (25661:13): [True: 0, False: 219k]
  ------------------
25662|      0|            default:
  ------------------
  |  Branch (25662:13): [True: 0, False: 219k]
  ------------------
25663|      0|            {
25664|      0|                m_it.primitive_iterator.set_begin();
25665|      0|                break;
25666|      0|            }
25667|   219k|        }
25668|   219k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEdeEv:
25715|   350k|    {
25716|   350k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2643|   350k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25716:9): [True: 350k, False: 0]
  ------------------
25717|       |
25718|       |        // objects are tested before arrays here and in the other operators:
25719|       |        // with arrays first, walking a document of objects such as
25720|       |        // twitter.json took 14% more cycles than with 3.12.0's switch; with
25721|       |        // objects first, no document walks slower than with 3.12.0
25722|   350k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::object))
  ------------------
  |  | 1696|   350k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 34.3k, False: 316k]
  |  |  ------------------
  ------------------
25723|  34.3k|        {
25724|  34.3k|            JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
  ------------------
  |  | 2643|  34.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25724:13): [True: 34.3k, False: 0]
  ------------------
25725|  34.3k|            return m_it.object_iterator->second;
25726|  34.3k|        }
25727|       |
25728|   316k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::array))
  ------------------
  |  | 1696|   316k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 316k, False: 0]
  |  |  ------------------
  ------------------
25729|   316k|        {
25730|   316k|            JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
  ------------------
  |  | 2643|   316k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25730:13): [True: 316k, False: 0]
  ------------------
25731|   316k|            return *m_it.array_iterator;
25732|   316k|        }
25733|       |
25734|       |        // neither array nor object: a primitive value (null has no value to point to)
25735|      0|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type != value_t::null && m_it.primitive_iterator.is_begin()))
  ------------------
  |  | 1696|      0|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 0, False: 0]
  |  |  |  Branch (1696:94): [True: 0, False: 0]
  |  |  |  Branch (1696:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
25736|      0|        {
25737|      0|            return *m_object;
25738|      0|        }
25739|       |
25740|      0|        throw_cannot_get_value();
25741|      0|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEneISI_TnNS4_9enable_ifIXoosr3std7is_sameIT_SI_EE5valuesr3std7is_sameISL_NS2_ISG_EEEE5valueEDnE4typeELDn0EEEbRKSL_:
25880|   383k|    {
25881|   383k|        return !operator==(other);
25882|   383k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEeqISI_TnNS4_9enable_ifIXoosr3std7is_sameIT_SI_EE5valuesr3std7is_sameISL_NS2_ISG_EEEE5valueEDnE4typeELDn0EEEbRKSL_:
25850|   383k|    {
25851|       |        // if objects are not the same, the comparison is undefined
25852|   383k|        check_same_container(other);
25853|       |
25854|       |        // value-initialized forward iterators can be compared, and must compare equal to other value-initialized iterators of the same type #4493
25855|   383k|        if (m_object == nullptr)
  ------------------
  |  Branch (25855:13): [True: 0, False: 383k]
  ------------------
25856|      0|        {
25857|      0|            return true;
25858|      0|        }
25859|       |
25860|   383k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::object))
  ------------------
  |  | 1696|   383k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 30.6k, False: 352k]
  |  |  ------------------
  ------------------
25861|  30.6k|        {
25862|  30.6k|            return (m_it.object_iterator == other.m_it.object_iterator);
25863|  30.6k|        }
25864|       |
25865|   352k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::array))
  ------------------
  |  | 1696|   352k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 352k, False: 0]
  |  |  ------------------
  ------------------
25866|   352k|        {
25867|   352k|            return (m_it.array_iterator == other.m_it.array_iterator);
25868|   352k|        }
25869|       |
25870|       |        // neither array nor object: a primitive value
25871|      0|        return (m_it.primitive_iterator == other.m_it.primitive_iterator);
25872|   352k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE20check_same_containerISI_EEvRKT_:
25696|   383k|    {
25697|   383k|        if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))
  ------------------
  |  | 1697|   383k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 383k]
  |  |  ------------------
  ------------------
25698|      0|        {
25699|      0|            throw_literal<invalid_iterator>(exception_id::iterators_compare_different_values, "cannot compare iterators of different containers", m_object);
25700|      0|        }
25701|   383k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_start_containerILb1EEEbRKSG_bbbbRbENKUlSM_E_clESM_:
30653|  89.7k|            {
30654|  89.7k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
30655|  89.7k|            });
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEppEv:
25788|   248k|    {
25789|   248k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2643|   248k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25789:9): [True: 248k, False: 0]
  ------------------
25790|       |
25791|   248k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::object))
  ------------------
  |  | 1696|   248k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 19.0k, False: 229k]
  |  |  ------------------
  ------------------
25792|  19.0k|        {
25793|  19.0k|            std::advance(m_it.object_iterator, 1);
25794|  19.0k|            return *this;
25795|  19.0k|        }
25796|       |
25797|   229k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::array))
  ------------------
  |  | 1696|   229k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 229k, False: 0]
  |  |  ------------------
  ------------------
25798|   229k|        {
25799|   229k|            ++m_it.array_iterator;
25800|   229k|            return *this;
25801|   229k|        }
25802|       |
25803|       |        // neither array nor object: a primitive value
25804|      0|        ++m_it.primitive_iterator;
25805|      0|        return *this;
25806|   229k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEC2ERKSI_:
25584|   240k|        : m_object(other.m_object), m_it(other.m_it)
25585|   240k|    {}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE5beginEv:
43784|   135k|    {
43785|   135k|        return cbegin();
43786|   135k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEplEl:
25981|  72.5k|    {
25982|  72.5k|        auto result = *this;
25983|  72.5k|        result += i;
25984|  72.5k|        return result;
25985|  72.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEpLEl:
25946|  72.5k|    {
25947|  72.5k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2643|  72.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25947:9): [True: 72.5k, False: 0]
  ------------------
25948|       |
25949|  72.5k|        if (m_object->is_object())
  ------------------
  |  Branch (25949:13): [True: 0, False: 72.5k]
  ------------------
25950|      0|        {
25951|      0|            throw_literal<invalid_iterator>(exception_id::iterator_arithmetic_on_object, "cannot use offsets with object iterators", m_object);
25952|      0|        }
25953|       |
25954|  72.5k|        if (m_object->is_array())
  ------------------
  |  Branch (25954:13): [True: 72.5k, False: 0]
  ------------------
25955|  72.5k|        {
25956|  72.5k|            std::advance(m_it.array_iterator, i);
25957|  72.5k|        }
25958|      0|        else
25959|      0|        {
25960|       |            // primitive (is_primitive(), including discarded)
25961|      0|            m_it.primitive_iterator += i;
25962|      0|        }
25963|       |
25964|  72.5k|        return *this;
25965|  72.5k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3endEv:
43809|   135k|    {
43810|   135k|        return cend();
43811|   135k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4cendEv:
43816|   135k|    {
43817|   135k|        const_iterator result(this);
43818|   135k|        result.set_end();
43819|   135k|        return result;
43820|   135k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE7set_endEv:
25675|   135k|    {
25676|   135k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2643|   135k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25676:9): [True: 135k, False: 0]
  ------------------
25677|       |
25678|   135k|        if (m_object->is_object())
  ------------------
  |  Branch (25678:13): [True: 11.6k, False: 123k]
  ------------------
25679|  11.6k|        {
25680|  11.6k|            m_it.object_iterator = m_object->m_data.m_value.object->end();
25681|  11.6k|        }
25682|   123k|        else if (m_object->is_array())
  ------------------
  |  Branch (25682:18): [True: 123k, False: 0]
  ------------------
25683|   123k|        {
25684|   123k|            m_it.array_iterator = m_object->m_data.m_value.array->end();
25685|   123k|        }
25686|      0|        else
25687|      0|        {
25688|       |            // primitive (is_primitive(), including discarded)
25689|      0|            m_it.primitive_iterator.set_end();
25690|      0|        }
25691|   135k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE30is_bjdata_excluded_type_markerEh:
33512|  72.1k|    {
33513|  72.1k|        return marker == '[' || marker == '{' || marker == 'S' || marker == 'H'
  ------------------
  |  Branch (33513:16): [True: 49.1k, False: 22.9k]
  |  Branch (33513:33): [True: 4.15k, False: 18.8k]
  |  Branch (33513:50): [True: 1.58k, False: 17.2k]
  |  Branch (33513:67): [True: 0, False: 17.2k]
  ------------------
33514|  17.2k|               || marker == 'T' || marker == 'F' || marker == 'N' || marker == 'Z';
  ------------------
  |  Branch (33514:19): [True: 2.22k, False: 15.0k]
  |  Branch (33514:36): [True: 562, False: 14.4k]
  |  Branch (33514:53): [True: 0, False: 14.4k]
  |  Branch (33514:70): [True: 886, False: 13.5k]
  ------------------
33515|  72.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE18write_ubjson_countEmb:
33143|   184k|    {
33144|   184k|        if (JSON_HEDLEY_LIKELY(count <= 127))
  ------------------
  |  | 1696|   184k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 184k, False: 186]
  |  |  ------------------
  ------------------
33145|   184k|        {
33146|   184k|            CharType* const out = oa.reserve(3);
33147|   184k|            out[0] = to_char_type('#');
33148|   184k|            out[1] = to_char_type('i');
33149|   184k|            out[2] = to_char_type(static_cast<std::uint8_t>(count));
33150|   184k|            oa.commit(3);
33151|   184k|            return;
33152|   184k|        }
33153|    186|        oa.write_character(to_char_type('#'));
33154|    186|        write_number_with_ubjson_prefix(count, true, use_bjdata);
33155|    186|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE25starts_with_ubjson_numberINS6_ISG_NSA_ISG_EEEEEEbRKT_bNS4_17integral_constantIbLb1EEE:
33224|   237k|    {
33225|   237k|        if (array.empty() || !array.front().is_number())
  ------------------
  |  Branch (33225:13): [True: 10.2k, False: 226k]
  |  Branch (33225:30): [True: 185k, False: 41.1k]
  ------------------
33226|   195k|        {
33227|   195k|            return false;
33228|   195k|        }
33229|  41.1k|        const BasicJsonType& first = array.front();
33230|  41.1k|        return use_bjdata || first.m_data.m_type != value_t::number_unsigned
  ------------------
  |  Branch (33230:16): [True: 41.1k, False: 0]
  |  Branch (33230:30): [True: 0, False: 0]
  ------------------
33231|      0|               || (static_cast<std::uint64_t>(first.m_data.m_value.number_unsigned) >> 63u) == 0;
  ------------------
  |  Branch (33231:19): [True: 0, False: 0]
  ------------------
33232|   237k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9is_numberEv:
42091|   521k|    {
42092|   521k|        return is_number_integer() || is_number_float();
  ------------------
  |  Branch (42092:16): [True: 196k, False: 325k]
  |  Branch (42092:39): [True: 128k, False: 196k]
  ------------------
42093|   521k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE17is_number_integerEv:
42099|   626k|    {
42100|   626k|        return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned;
  ------------------
  |  Branch (42100:16): [True: 104k, False: 521k]
  |  Branch (42100:60): [True: 196k, False: 325k]
  ------------------
42101|   626k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE15is_number_floatEv:
42115|   569k|    {
42116|   569k|        return m_data.m_type == value_t::number_float;
42117|   569k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE27write_ubjson_array_elementsINS6_ISG_NSA_ISG_EEEEEEvRKT_bbbbNS1_16bjdata_version_tEm:
33256|  41.1k|    {
33257|  41.1k|        constexpr std::size_t max_run = max_reserve_size / ubjson_integer_encoding_space;
33258|  41.1k|        const char* const table = ubjson_integer_table(use_bjdata);
33259|  41.1k|        auto it = array.begin();
33260|  41.1k|        const auto end = array.end();
33261|  95.5k|        while (it != end)
  ------------------
  |  Branch (33261:16): [True: 54.3k, False: 41.1k]
  ------------------
33262|  54.3k|        {
33263|  54.3k|            if (!it->is_number())
  ------------------
  |  Branch (33263:17): [True: 8.48k, False: 45.9k]
  ------------------
33264|  8.48k|            {
33265|  8.48k|                write_ubjson(*it, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth + 1);
33266|  8.48k|                ++it;
33267|  8.48k|                continue;
33268|  8.48k|            }
33269|       |
33270|  45.9k|            CharType* const start = oa.reserve(max_run * ubjson_integer_encoding_space);
33271|  45.9k|            CharType* out = start;
33272|  45.9k|            bool unencodable = false;
33273|   283k|            for (std::size_t n = 0; n < max_run && it != end && it->is_number(); ++n)
  ------------------
  |  Branch (33273:37): [True: 279k, False: 3.85k]
  |  Branch (33273:52): [True: 240k, False: 39.3k]
  |  Branch (33273:65): [True: 237k, False: 2.66k]
  ------------------
33274|   237k|            {
33275|   237k|                CharType* next = nullptr;
33276|   237k|                if (it->is_number_float())
  ------------------
  |  Branch (33276:21): [True: 117k, False: 120k]
  ------------------
33277|   117k|                {
33278|   117k|                    next = encode_ubjson_float(out, it->m_data.m_value.number_float, prefix_required, use_bjdata);
33279|   117k|                }
33280|   120k|                else
33281|   120k|                {
33282|   120k|                    std::uint64_t sign_mask = 0;
33283|   120k|                    const std::uint64_t raw = integer_bits(*it, sign_mask);
33284|   120k|                    next = encode_ubjson_integer(out, raw, sign_mask, prefix_required, use_bjdata, table);
33285|   120k|                }
33286|   237k|                if (JSON_HEDLEY_UNLIKELY(next == nullptr))
  ------------------
  |  | 1697|   237k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 237k]
  |  |  ------------------
  ------------------
33287|      0|                {
33288|      0|                    unencodable = true;
33289|      0|                    break;
33290|      0|                }
33291|   237k|                out = next;
33292|   237k|                ++it;
33293|   237k|            }
33294|  45.9k|            oa.commit(static_cast<std::size_t>(out - start));
33295|       |
33296|  45.9k|            if (unencodable)
  ------------------
  |  Branch (33296:17): [True: 0, False: 45.9k]
  ------------------
33297|      0|            {
33298|      0|                write_ubjson(*it, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth + 1);
33299|      0|                ++it;
33300|      0|            }
33301|  45.9k|        }
33302|  41.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE20ubjson_integer_tableEb:
32972|  41.1k|    {
32973|       |        // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays): initialized from string literals
32974|  41.1k|        static constexpr char ubjson_table[] =
32975|       |            // the markers for n >= 0, then n < 0
32976|  41.1k|            "i" "iiiiiii" "U" "IIIIIII" "llllllllllllllll" "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" "H"
32977|  41.1k|            "i" "iiiiiii" "IIIIIIII" "llllllllllllllll" "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" "L"
32978|       |            // the size classes
32979|  41.1k|            "000000000" "1111111" "2222222222222222" "333333333333333333333333333333333"
32980|  41.1k|            "00000000" "11111111" "2222222222222222" "333333333333333333333333333333333";
32981|       |        // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays): initialized from string literals
32982|  41.1k|        static constexpr char bjdata_table[] =
32983|  41.1k|            "i" "iiiiiii" "U" "IIIIIII" "u" "lllllllllllllll" "m" "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" "M"
32984|  41.1k|            "i" "iiiiiii" "IIIIIIII" "llllllllllllllll" "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" "L"
32985|  41.1k|            "000000000" "11111111" "2222222222222222" "33333333333333333333333333333333"
32986|  41.1k|            "00000000" "11111111" "2222222222222222" "333333333333333333333333333333333";
32987|  41.1k|        static_assert(sizeof(ubjson_table) == 261 && sizeof(bjdata_table) == 261, "two tables of 130 markers and 130 size classes");
32988|  41.1k|        return use_bjdata ? bjdata_table : ubjson_table;
  ------------------
  |  Branch (32988:16): [True: 41.1k, False: 0]
  ------------------
32989|  41.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE19encode_ubjson_floatEPhdbb:
33211|   117k|    {
33212|   117k|        if (add_prefix)
  ------------------
  |  Branch (33212:13): [True: 83.0k, False: 34.3k]
  ------------------
33213|  83.0k|        {
33214|  83.0k|            *out++ = get_ubjson_float_prefix<number_float_t>();
33215|  83.0k|        }
33216|   117k|        return store_number(out, n, use_bjdata);
33217|   117k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIdEEPhSL_T_b:
33311|   119k|    {
33312|   119k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|   119k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|   119k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 119k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|   119k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|   119k|        return out + sizeof(NumberType);
33320|   119k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12integer_bitsERKSG_Rm:
32239|   120k|    {
32240|   120k|        const bool is_signed = j.m_data.m_type == value_t::number_integer;
32241|   120k|        const std::uint64_t raw = is_signed
  ------------------
  |  Branch (32241:35): [True: 39.6k, False: 80.5k]
  ------------------
32242|   120k|                                  ? static_cast<std::uint64_t>(j.m_data.m_value.number_integer)
32243|   120k|                                  : static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned);
32244|   120k|        sign_mask = (std::uint64_t{0} - static_cast<std::uint64_t>(is_signed)) & (std::uint64_t{0} - (raw >> 63u));
32245|   120k|        return raw;
32246|   120k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE21encode_ubjson_integerEPhmmbbPKc:
33011|   120k|    {
33012|   120k|        const std::size_t index = ubjson_integer_index(raw, sign_mask);
33013|   120k|        const char marker = table[index];
33014|   120k|        if (JSON_HEDLEY_UNLIKELY(marker == 'H'))
  ------------------
  |  | 1697|   120k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 120k]
  |  |  ------------------
  ------------------
33015|      0|        {
33016|      0|            return nullptr;
33017|      0|        }
33018|   120k|        const unsigned size_class = static_cast<unsigned>(table[index + 130]) & 3u;
33019|       |
33020|       |        // the marker (or its place, if not written) and one 8-byte word, whose
33021|       |        // bytes after the integer are scratch that the caller drops
33022|   120k|        out[0] = to_char_type(static_cast<std::uint8_t>(marker));
33023|   120k|        out += add_prefix ? 1 : 0;
  ------------------
  |  Branch (33023:16): [True: 94.8k, False: 25.3k]
  ------------------
33024|   120k|        const unsigned unused_bits = 64u - (8u << size_class);
33025|       |        // UBJSON in network order, BJData in little-endian
33026|   120k|        std::uint64_t tail = 0;
33027|   120k|        if (use_bjdata)
  ------------------
  |  Branch (33027:13): [True: 120k, False: 0]
  ------------------
33028|   120k|        {
33029|   120k|            tail = is_little_endian ? raw : byteswap(raw);
  ------------------
  |  Branch (33029:20): [True: 120k, False: 0]
  ------------------
33030|   120k|        }
33031|      0|        else
33032|      0|        {
33033|      0|            tail = is_little_endian ? byteswap(raw) >> unused_bits : raw << unused_bits;
  ------------------
  |  Branch (33033:20): [True: 0, False: 0]
  ------------------
33034|      0|        }
33035|   120k|        std::memcpy(out, &tail, sizeof(tail));
33036|   120k|        return out + (std::size_t{1} << size_class);
33037|   120k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE20ubjson_integer_indexEmm:
32994|   120k|    {
32995|   120k|        const std::size_t sign_offset = sign_mask != 0 ? std::size_t{65} :
  ------------------
  |  Branch (32995:41): [True: 7.61k, False: 112k]
  ------------------
32996|   120k|                                        std::size_t{0};
32997|   120k|        return static_cast<std::size_t>(64 - count_leading_zeros((raw ^ sign_mask) | 1u)) + sign_offset;
32998|   120k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE11write_bytesEPKvm:
30381|  2.31k|    {
30382|  2.31k|        oa.write_characters(static_cast<const CharType*>(data), size);
30383|  2.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE25write_ubjson_binary_bytesERKNS0_27byte_container_with_subtypeISF_EEb:
33058|  3.98k|    {
33059|  3.98k|        const CharType marker = to_char_type(bjdata_draft3 ? 'B' : 'U');
  ------------------
  |  Branch (33059:46): [True: 0, False: 3.98k]
  ------------------
33060|  3.98k|        const auto* const data = binary.data();
33061|  3.98k|        const std::size_t size = binary.size();
33062|  6.72k|        for (std::size_t i = 0; i < size;)
  ------------------
  |  Branch (33062:33): [True: 2.74k, False: 3.98k]
  ------------------
33063|  2.74k|        {
33064|  2.74k|            const std::size_t block = (std::min)(size - i, max_reserve_size / 2);
33065|  2.74k|            CharType* const out = oa.reserve(2 * block);
33066|  22.7k|            for (std::size_t k = 0; k < block; ++k)
  ------------------
  |  Branch (33066:37): [True: 19.9k, False: 2.74k]
  ------------------
33067|  19.9k|            {
33068|  19.9k|                out[2 * k] = marker;
33069|       |                // the cast is needed for binary types whose value type
33070|       |                // is not an integer (e.g., std::byte)
33071|  19.9k|                out[(2 * k) + 1] = to_char_type(static_cast<std::uint8_t>(data[i + k]));
33072|  19.9k|            }
33073|  2.74k|            i += block;
33074|  2.74k|            oa.commit(2 * block);
33075|  2.74k|        }
33076|  3.98k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE17is_bjdata_ndarrayERKSG_:
30696|  63.0k|    {
30697|  63.0k|        const auto& object = *j.m_data.m_value.object;
30698|  63.0k|        return object.size() == 3
  ------------------
  |  Branch (30698:16): [True: 23.2k, False: 39.8k]
  ------------------
30699|  23.2k|               && object.find("_ArrayType_") != object.end()
  ------------------
  |  Branch (30699:19): [True: 21.5k, False: 1.66k]
  ------------------
30700|  21.5k|               && object.find("_ArraySize_") != object.end()
  ------------------
  |  Branch (30700:19): [True: 21.4k, False: 112]
  ------------------
30701|  21.4k|               && object.find("_ArrayData_") != object.end();
  ------------------
  |  Branch (30701:19): [True: 21.3k, False: 60]
  ------------------
30702|  63.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE20write_bjdata_ndarrayERKNS5_ISC_SG_NS4_4lessISC_EENSA_INS4_4pairIKSC_SG_EEEEEEbbNS1_16bjdata_version_tE:
33778|  21.3k|    {
33779|  21.3k|        const auto& array_type = value.at("_ArrayType_");
33780|       |        // the type name is looked up as a string below; a non-string
33781|       |        // annotation (e.g. a number, null, or an array) cannot name a known
33782|       |        // dtype, so it is treated the same as an unrecognized type name and
33783|       |        // falls back to a plain object encoding instead of throwing
33784|       |        // type_error.302 out of get<string_t>()
33785|  21.3k|        if (!array_type.is_string())
  ------------------
  |  Branch (33785:13): [True: 72, False: 21.3k]
  ------------------
33786|     72|        {
33787|     72|            return true;
33788|     72|        }
33789|       |
33790|       |        // use get<string_t>() instead of static_cast<string_t> to avoid an
33791|       |        // ambiguous conversion under explicit instantiation on C++17 (see #4825)
33792|  21.3k|        const CharType dtype = bjdata_ndarray_type_marker(array_type.template get<string_t>());
33793|  21.3k|        if (dtype == '\0')
  ------------------
  |  Branch (33793:13): [True: 860, False: 20.4k]
  ------------------
33794|    860|        {
33795|    860|            return true;
33796|    860|        }
33797|       |
33798|       |        // the 'B' (byte) marker is only defined from BJData Draft 3 onward;
33799|       |        // emitting it under an earlier draft would produce a stream that an
33800|       |        // earlier-draft reader rejects, so such an object falls back to a
33801|       |        // plain object encoding instead (see the "Binary values" section of
33802|       |        // the BJData documentation)
33803|  20.4k|        if (dtype == 'B' && bjdata_version < bjdata_version_t::draft3)
  ------------------
  |  Branch (33803:13): [True: 2.01k, False: 18.4k]
  |  Branch (33803:29): [True: 2.01k, False: 0]
  ------------------
33804|  2.01k|        {
33805|  2.01k|            return true;
33806|  2.01k|        }
33807|       |
33808|  18.4k|        const auto& array_size = value.at("_ArraySize_");
33809|       |        // the dimensions are written verbatim as the header length below, so a
33810|       |        // value that is not an array cannot produce a valid one: null emits 'Z'
33811|       |        // and an object emits '{', neither of which a reader accepts after '#'.
33812|       |        // Such an object is not a valid ndarray and falls back to a plain object.
33813|  18.4k|        if (!array_size.is_array())
  ------------------
  |  Branch (33813:13): [True: 201, False: 18.2k]
  ------------------
33814|    201|        {
33815|    201|            return true;
33816|    201|        }
33817|       |
33818|       |        // the reader only restores an annotated object from an ND-array header
33819|       |        // with at least two dimensions: an empty dimension vector, a single
33820|       |        // dimension, or a 1xN row vector is read back as a plain array, which
33821|       |        // would silently drop the annotation, so such an object falls back to
33822|       |        // a plain object encoding instead
33823|  18.2k|        const auto& dims = array_size;
33824|  18.2k|        if (dims.size() < 2 || (dims.size() == 2 && dims.at(0).is_number_integer() && dims.at(0).template get<std::int64_t>() == 1))
  ------------------
  |  Branch (33824:13): [True: 87, False: 18.1k]
  |  Branch (33824:33): [True: 11.6k, False: 6.45k]
  |  Branch (33824:53): [True: 11.6k, False: 78]
  |  Branch (33824:87): [True: 78, False: 11.5k]
  ------------------
33825|    165|        {
33826|    165|            return true;
33827|    165|        }
33828|       |
33829|  18.0k|        std::size_t len = 1;
33830|  18.0k|        for (const auto& el : dims)
  ------------------
  |  Branch (33830:29): [True: 45.7k, False: 17.2k]
  ------------------
33831|  45.7k|        {
33832|       |            // a dimension is read as an unsigned value below, so anything that
33833|       |            // is not a non-negative integer in the range of std::uint64_t is
33834|       |            // rejected: a non-integer entry would pun unrelated bytes as the
33835|       |            // dimension, and a negative or wider one would wrap into a
33836|       |            // nonsensical length
33837|  45.7k|            if (!el.is_number_integer() || !bjdata_ndarray_value_in_range<std::uint64_t>(el))
  ------------------
  |  Branch (33837:17): [True: 184, False: 45.6k]
  |  Branch (33837:44): [True: 444, False: 45.1k]
  ------------------
33838|    628|            {
33839|    628|                return true;
33840|    628|            }
33841|       |
33842|       |            // a dimension that does not fit into std::size_t, or a product that
33843|       |            // overflows it, would wrap around and could match the size of
33844|       |            // _ArrayData_ by accident; the resulting header announces an
33845|       |            // element count that no reader can honor (the binary reader rejects
33846|       |            // it with out_of_range.408), so encode as a plain object instead
33847|  45.1k|            const auto dim = el.template get<std::uint64_t>();
33848|  45.1k|            if (!value_in_range_of<std::size_t>(dim))
  ------------------
  |  Branch (33848:17): [True: 0, False: 45.1k]
  ------------------
33849|      0|            {
33850|      0|                return true; // LCOV_EXCL_LINE (size_t is narrower than 64 bits)
33851|      0|            }
33852|  45.1k|            const auto dim_size = static_cast<std::size_t>(dim);
33853|       |
33854|       |            // the reader turns an ND-array with any zero dimension into an
33855|       |            // empty plain array, dropping the annotation, so keep the object
33856|  45.1k|            if (dim_size == 0)
  ------------------
  |  Branch (33856:17): [True: 114, False: 45.0k]
  ------------------
33857|    114|            {
33858|    114|                return true;
33859|    114|            }
33860|  45.0k|            if (len > (std::numeric_limits<std::size_t>::max)() / dim_size)
  ------------------
  |  Branch (33860:17): [True: 120, False: 44.9k]
  ------------------
33861|    120|            {
33862|    120|                return true;
33863|    120|            }
33864|  44.9k|            len *= dim_size;
33865|  44.9k|        }
33866|       |
33867|       |        // the elements are written from _ArrayData_ as a flat list, so it has
33868|       |        // to be an array: size() is 0 for null and 1 for any other scalar, and
33869|       |        // iterating an object visits its values, so any of these could match
33870|       |        // the dimensions by accident and be encoded as an unrelated ND-array
33871|  17.2k|        const auto& array_data = value.at("_ArrayData_");
33872|  17.2k|        if (!array_data.is_array() || array_data.size() != len)
  ------------------
  |  Branch (33872:13): [True: 143, False: 17.0k]
  |  Branch (33872:39): [True: 653, False: 16.4k]
  ------------------
33873|    796|        {
33874|    796|            return true;
33875|    796|        }
33876|       |
33877|       |        // every element is written below as the number kind dtype names, so it
33878|       |        // has to actually be a number of that category: an element of any other
33879|       |        // type would reinterpret unrelated bytes, e.g. a string's heap pointer,
33880|       |        // as that number. Such an object falls back to a plain object encoding.
33881|       |        // dtype names the wire type, not the storage type: whether an integer
33882|       |        // is held as number_integer or number_unsigned depends on how the value
33883|       |        // was built (parsing stores non-negative integers as unsigned, the C++
33884|       |        // API stores int literals as signed), so both are accepted here and the
33885|       |        // writes below go through get<>, which reads the member that is active.
33886|  16.4k|        const bool ndarray_is_float = (dtype == 'd' || dtype == 'D');
  ------------------
  |  Branch (33886:40): [True: 976, False: 15.4k]
  |  Branch (33886:56): [True: 960, False: 14.4k]
  ------------------
33887|  16.4k|        for (const auto& el : array_data)
  ------------------
  |  Branch (33887:29): [True: 54.5k, False: 16.3k]
  ------------------
33888|  54.5k|        {
33889|  54.5k|            if (ndarray_is_float ? !el.is_number_float() : !el.is_number_integer())
  ------------------
  |  Branch (33889:17): [True: 6.94k, False: 47.5k]
  |  Branch (33889:17): [True: 78, False: 54.4k]
  ------------------
33890|     78|            {
33891|     78|                return true;
33892|     78|            }
33893|  54.5k|        }
33894|       |
33895|       |        // every element is cast to the (possibly narrower) C++ type matching
33896|       |        // dtype below; a value that does not fit that type would silently
33897|       |        // wrap (integers) or overflow to infinity (the "single" precision
33898|       |        // float) instead of being reported, so such an object falls back to
33899|       |        // a plain object encoding as well
33900|  16.3k|        if (!bjdata_ndarray_elements_in_range(array_data, dtype))
  ------------------
  |  Branch (33900:13): [True: 5.03k, False: 11.2k]
  ------------------
33901|  5.03k|        {
33902|  5.03k|            return true;
33903|  5.03k|        }
33904|       |
33905|  11.2k|        oa.write_character(to_char_type('['));
33906|  11.2k|        oa.write_character(to_char_type('$'));
33907|  11.2k|        oa.write_character(dtype);
33908|  11.2k|        oa.write_character(to_char_type('#'));
33909|       |
33910|  11.2k|        write_ubjson(array_size, use_count, use_type, true,  true, bjdata_version);
33911|       |
33912|  11.2k|        write_bjdata_ndarray_values(array_data, dtype);
33913|  11.2k|        return false;
33914|  16.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9is_stringEv:
42139|  64.0k|    {
42140|  64.0k|        return m_data.m_type == value_t::string;
42141|  64.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26bjdata_ndarray_type_markerERKSC_:
33555|  21.3k|    {
33556|  21.3k|        if (name == "uint8")
  ------------------
  |  Branch (33556:13): [True: 2.23k, False: 19.0k]
  ------------------
33557|  2.23k|        {
33558|  2.23k|            return 'U';
33559|  2.23k|        }
33560|  19.0k|        if (name == "int8")
  ------------------
  |  Branch (33560:13): [True: 2.61k, False: 16.4k]
  ------------------
33561|  2.61k|        {
33562|  2.61k|            return 'i';
33563|  2.61k|        }
33564|  16.4k|        if (name == "uint16")
  ------------------
  |  Branch (33564:13): [True: 1.86k, False: 14.6k]
  ------------------
33565|  1.86k|        {
33566|  1.86k|            return 'u';
33567|  1.86k|        }
33568|  14.6k|        if (name == "int16")
  ------------------
  |  Branch (33568:13): [True: 2.29k, False: 12.3k]
  ------------------
33569|  2.29k|        {
33570|  2.29k|            return 'I';
33571|  2.29k|        }
33572|  12.3k|        if (name == "uint32")
  ------------------
  |  Branch (33572:13): [True: 1.80k, False: 10.5k]
  ------------------
33573|  1.80k|        {
33574|  1.80k|            return 'm';
33575|  1.80k|        }
33576|  10.5k|        if (name == "int32")
  ------------------
  |  Branch (33576:13): [True: 2.17k, False: 8.32k]
  ------------------
33577|  2.17k|        {
33578|  2.17k|            return 'l';
33579|  2.17k|        }
33580|  8.32k|        if (name == "uint64")
  ------------------
  |  Branch (33580:13): [True: 712, False: 7.61k]
  ------------------
33581|    712|        {
33582|    712|            return 'M';
33583|    712|        }
33584|  7.61k|        if (name == "int64")
  ------------------
  |  Branch (33584:13): [True: 1.23k, False: 6.38k]
  ------------------
33585|  1.23k|        {
33586|  1.23k|            return 'L';
33587|  1.23k|        }
33588|  6.38k|        if (name == "single")
  ------------------
  |  Branch (33588:13): [True: 982, False: 5.40k]
  ------------------
33589|    982|        {
33590|    982|            return 'd';
33591|    982|        }
33592|  5.40k|        if (name == "double")
  ------------------
  |  Branch (33592:13): [True: 960, False: 4.44k]
  ------------------
33593|    960|        {
33594|    960|            return 'D';
33595|    960|        }
33596|  4.44k|        if (name == "char")
  ------------------
  |  Branch (33596:13): [True: 1.56k, False: 2.87k]
  ------------------
33597|  1.56k|        {
33598|  1.56k|            return 'C';
33599|  1.56k|        }
33600|  2.87k|        if (name == "byte")
  ------------------
  |  Branch (33600:13): [True: 2.01k, False: 860]
  ------------------
33601|  2.01k|        {
33602|  2.01k|            return 'B';
33603|  2.01k|        }
33604|    860|        return '\0';
33605|  2.87k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getISA_SA_EEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
42723|  21.3k|    {
42724|       |        // we cannot static_assert on ValueTypeCV being non-const, because
42725|       |        // there is support for get<const basic_json_t>(), which is why we
42726|       |        // still need the uncvref
42727|  21.3k|        static_assert(!std::is_reference<ValueTypeCV>::value,
42728|  21.3k|                      "get() cannot be used with reference types, you might want to use get_ref()");
42729|  21.3k|        return get_impl<ValueType>(detail::priority_tag<4> {});
42730|  21.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implISA_TnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
42582|  21.3k|    {
42583|  21.3k|        auto ret = ValueType();
42584|  21.3k|        JSONSerializer<ValueType>::from_json(*this, ret);
42585|       |        // false positive: ret is returned by value, not its address
42586|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
42587|  21.3k|        return ret;
42588|  21.3k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvE9from_jsonIRKNS0_10basic_jsonINS2_3mapENS2_6vectorES8_blmdS6_S1_NSD_IhNS6_IhEEEEvEES8_EEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 8402|  21.3k|    {
 8403|  21.3k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 8404|  21.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERSD_TnNS5_9enable_ifIXsr8negationINS1_28is_adl_only_from_json_sourceIT_EEEE5valueEiE4typeELi0EEEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKSL_OSP_:
 7000|  21.3k|    {
 7001|  21.3k|        return from_json(j, std::forward<T>(val));
 7002|  21.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNS1_12json_type_ofISH_vE4type8string_tE:
 6363|  21.3k|{
 6364|  21.3k|    if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
  ------------------
  |  | 1697|  21.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 21.3k]
  |  |  ------------------
  ------------------
 6365|      0|    {
 6366|      0|        throw_type_must_be("string", j);
 6367|      0|    }
 6368|  21.3k|    s = string_value(j);
 6369|  21.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail12string_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEETnNS4_9enable_ifIXsr8negationINS1_12is_json_viewIT_vEEEE5valueEiE4typeELi0EEERKNSJ_8string_tERKSJ_:
 6223|  21.3k|{
 6224|  21.3k|    return *j.template get_ptr<const typename BasicJsonType::string_t*>();
 6225|  21.3k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKSA_TnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
42531|  21.3k|    {
42532|       |        // delegate the call to get_impl_ptr<>() const
42533|  21.3k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
42534|  21.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKSA_:
42221|  21.3k|    {
42222|  21.3k|        return is_string() ? m_data.m_value.string : nullptr;
  ------------------
  |  Branch (42222:16): [True: 21.3k, False: 0]
  ------------------
42223|  21.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE2atEm:
43053|  23.3k|    {
43054|  23.3k|        return array_at(*this, idx);
43055|  23.3k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8array_atIKSE_EEDTixdedtdtdtfp_6m_data7m_value5arrayfp0_ERT_m:
42983|  23.3k|    {
42984|       |        // at only works for arrays
42985|  23.3k|        if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
  ------------------
  |  | 1697|  23.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 23.3k]
  |  |  ------------------
  ------------------
42986|      0|        {
42987|      0|            detail::throw_cannot_use_with(detail::exception_id::at_wrong_type, "at()", j);
42988|      0|        }
42989|       |
42990|  23.3k|        if (JSON_HEDLEY_UNLIKELY(idx >= j.m_data.m_value.array->size()))
  ------------------
  |  | 1697|  23.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 23.3k]
  |  |  ------------------
  ------------------
42991|      0|        {
42992|      0|            throw_array_index_out_of_range(idx, j);
42993|      0|        }
42994|       |
42995|  23.3k|        return (*j.m_data.m_value.array)[idx];
42996|  23.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getIllEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
42723|  11.6k|    {
42724|       |        // we cannot static_assert on ValueTypeCV being non-const, because
42725|       |        // there is support for get<const basic_json_t>(), which is why we
42726|       |        // still need the uncvref
42727|  11.6k|        static_assert(!std::is_reference<ValueTypeCV>::value,
42728|  11.6k|                      "get() cannot be used with reference types, you might want to use get_ref()");
42729|  11.6k|        return get_impl<ValueType>(detail::priority_tag<4> {});
42730|  11.6k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implIlTnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
42582|  11.6k|    {
42583|  11.6k|        auto ret = ValueType();
42584|  11.6k|        JSONSerializer<ValueType>::from_json(*this, ret);
42585|       |        // false positive: ret is returned by value, not its address
42586|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
42587|  11.6k|        return ret;
42588|  11.6k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIlvE9from_jsonIRKNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEElEEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 8402|  11.6k|    {
 8403|  11.6k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 8404|  11.6k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERlTnNS5_9enable_ifIXsr8negationINS1_28is_adl_only_from_json_sourceIT_EEEE5valueEiE4typeELi0EEEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKSL_OSP_:
 7000|  11.6k|    {
 7001|  11.6k|        return from_json(j, std::forward<T>(val));
 7002|  11.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNS1_12json_type_ofISH_vE4type16number_integer_tE:
 6402|  11.6k|{
 6403|  11.6k|    get_arithmetic_value(j, val);
 6404|  11.6k|}
_ZN8nlohmann16json_abi_v3_12_06detail20get_arithmetic_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEElTnNS4_9enable_ifIXaasr3std13is_arithmeticIT0_EE5valuentsr3std7is_sameISI_NS1_12json_type_ofIT_vE4type9boolean_tEEE5valueEiE4typeELi0EEEvRKSK_RSI_:
 6344|  11.6k|{
 6345|  11.6k|    if (JSON_HEDLEY_UNLIKELY(!get_number_value(j, val)))
  ------------------
  |  | 1697|  11.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 11.6k]
  |  |  ------------------
  ------------------
 6346|      0|    {
 6347|      0|        throw_type_must_be("number", j);
 6348|      0|    }
 6349|  11.6k|}
_ZN8nlohmann16json_abi_v3_12_06detail16get_number_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEElTnNS4_9enable_ifIXsr8negationINS1_12is_json_viewIT_vEEEE5valueEiE4typeELi0EEEbRKSJ_RT0_:
 6291|  11.6k|{
 6292|  11.6k|    switch (static_cast<value_t>(j))
 6293|  11.6k|    {
 6294|  8.14k|        case value_t::number_unsigned:
  ------------------
  |  Branch (6294:9): [True: 8.14k, False: 3.46k]
  ------------------
 6295|  8.14k|        {
 6296|       |            // never null: a basic_json whose number_unsigned_t is number_integer_t
 6297|       |            // stores no number_unsigned values (#2573)
 6298|  8.14k|            const auto* ptr = j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>();
 6299|  8.14k|            JSON_ASSERT(ptr != nullptr);
  ------------------
  |  | 2643|  8.14k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (6299:13): [True: 8.14k, False: 0]
  ------------------
 6300|  8.14k|            val = static_cast<ArithmeticType>(*ptr);
 6301|  8.14k|            return true;
 6302|  8.14k|        }
 6303|  3.46k|        case value_t::number_integer:
  ------------------
  |  Branch (6303:9): [True: 3.46k, False: 8.14k]
  ------------------
 6304|  3.46k|        {
 6305|  3.46k|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
 6306|  3.46k|            return true;
 6307|  8.14k|        }
 6308|      0|        case value_t::number_float:
  ------------------
  |  Branch (6308:9): [True: 0, False: 11.6k]
  ------------------
 6309|      0|        {
 6310|      0|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
 6311|      0|            return true;
 6312|  8.14k|        }
 6313|       |
 6314|      0|        case value_t::null:
  ------------------
  |  Branch (6314:9): [True: 0, False: 11.6k]
  ------------------
 6315|      0|        case value_t::object:
  ------------------
  |  Branch (6315:9): [True: 0, False: 11.6k]
  ------------------
 6316|      0|        case value_t::array:
  ------------------
  |  Branch (6316:9): [True: 0, False: 11.6k]
  ------------------
 6317|      0|        case value_t::string:
  ------------------
  |  Branch (6317:9): [True: 0, False: 11.6k]
  ------------------
 6318|      0|        case value_t::boolean:
  ------------------
  |  Branch (6318:9): [True: 0, False: 11.6k]
  ------------------
 6319|      0|        case value_t::binary:
  ------------------
  |  Branch (6319:9): [True: 0, False: 11.6k]
  ------------------
 6320|      0|        case value_t::discarded:
  ------------------
  |  Branch (6320:9): [True: 0, False: 11.6k]
  ------------------
 6321|      0|        default:
  ------------------
  |  Branch (6321:9): [True: 0, False: 11.6k]
  ------------------
 6322|      0|            return false;
 6323|  11.6k|    }
 6324|  11.6k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEcvNS0_6detail7value_tEEv:
42162|  56.7k|    {
42163|  56.7k|        return m_data.m_type;
42164|  56.7k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKmTnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
42531|  43.6k|    {
42532|       |        // delegate the call to get_impl_ptr<>() const
42533|  43.6k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
42534|  43.6k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKm:
42259|  43.6k|    {
42260|  43.6k|        return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
  ------------------
  |  Branch (42260:16): [True: 43.6k, False: 0]
  ------------------
42261|  43.6k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE18is_number_unsignedEv:
42107|   175k|    {
42108|   175k|        return m_data.m_type == value_t::number_unsigned;
42109|   175k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKlTnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
42531|  13.1k|    {
42532|       |        // delegate the call to get_impl_ptr<>() const
42533|  13.1k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
42534|  13.1k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKl:
42245|  13.1k|    {
42246|  13.1k|        return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr;
  ------------------
  |  Branch (42246:16): [True: 13.1k, False: 0]
  ------------------
42247|  13.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeImEEbRKSG_:
33539|  47.6k|    {
33540|  47.6k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 37.2k, False: 10.4k]
  ------------------
33541|  47.6k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 37.2k, False: 0]
  |  Branch (33541:88): [True: 37.2k, False: 0]
  ------------------
33542|  47.6k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 10.4k, False: 0]
  |  Branch (33542:82): [True: 9.82k, False: 614]
  ------------------
33543|  47.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12integer_fitsIllEEbT0_:
30269|  35.7k|    {
30270|  35.7k|        return integer_fits_min<TargetType>(n) && integer_fits_max<TargetType>(n);
  ------------------
  |  Branch (30270:16): [True: 35.7k, False: 0]
  |  Branch (30270:51): [True: 35.7k, False: 0]
  ------------------
30271|  35.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE16integer_fits_minIllEEbT0_:
30246|  35.7k|    {
30247|  35.7k|        return integer_fits_min<TargetType>(n, std::integral_constant<bool, integer_range<TargetType, NumberType>::may_fall_below_min>());
30248|  35.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE16integer_fits_minIllEEbT0_NS4_17integral_constantIbLb0EEE:
30252|  35.7k|    {
30253|  35.7k|        return true;
30254|  35.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE16integer_fits_maxIllEEbT0_:
30223|  35.7k|    {
30224|  35.7k|        return integer_fits_max<TargetType>(n, std::integral_constant<bool, integer_range<TargetType, NumberType>::may_exceed_max>());
30225|  35.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE16integer_fits_maxIllEEbT0_NS4_17integral_constantIbLb0EEE:
30229|  35.7k|    {
30230|  35.7k|        return true;
30231|  35.7k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getImmEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
42723|  45.1k|    {
42724|       |        // we cannot static_assert on ValueTypeCV being non-const, because
42725|       |        // there is support for get<const basic_json_t>(), which is why we
42726|       |        // still need the uncvref
42727|  45.1k|        static_assert(!std::is_reference<ValueTypeCV>::value,
42728|  45.1k|                      "get() cannot be used with reference types, you might want to use get_ref()");
42729|  45.1k|        return get_impl<ValueType>(detail::priority_tag<4> {});
42730|  45.1k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implImTnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
42582|  45.1k|    {
42583|  45.1k|        auto ret = ValueType();
42584|  45.1k|        JSONSerializer<ValueType>::from_json(*this, ret);
42585|       |        // false positive: ret is returned by value, not its address
42586|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
42587|  45.1k|        return ret;
42588|  45.1k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerImvE9from_jsonIRKNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEEmEEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 8402|  45.1k|    {
 8403|  45.1k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 8404|  45.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERmTnNS5_9enable_ifIXsr8negationINS1_28is_adl_only_from_json_sourceIT_EEEE5valueEiE4typeELi0EEEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKSL_OSP_:
 7000|  45.1k|    {
 7001|  45.1k|        return from_json(j, std::forward<T>(val));
 7002|  45.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNS4_11conditionalIXsr3std7is_sameINS1_12json_type_ofISH_vE4type16number_integer_tENSN_17number_unsigned_tEEE5valueENS1_27same_as_number_integer_typeESP_E4typeE:
 6396|  45.1k|{
 6397|  45.1k|    get_arithmetic_value(j, val);
 6398|  45.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail20get_arithmetic_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEmTnNS4_9enable_ifIXaasr3std13is_arithmeticIT0_EE5valuentsr3std7is_sameISI_NS1_12json_type_ofIT_vE4type9boolean_tEEE5valueEiE4typeELi0EEEvRKSK_RSI_:
 6344|  45.1k|{
 6345|  45.1k|    if (JSON_HEDLEY_UNLIKELY(!get_number_value(j, val)))
  ------------------
  |  | 1697|  45.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 45.1k]
  |  |  ------------------
  ------------------
 6346|      0|    {
 6347|      0|        throw_type_must_be("number", j);
 6348|      0|    }
 6349|  45.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail16get_number_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEmTnNS4_9enable_ifIXsr8negationINS1_12is_json_viewIT_vEEEE5valueEiE4typeELi0EEEbRKSJ_RT0_:
 6291|  45.1k|{
 6292|  45.1k|    switch (static_cast<value_t>(j))
 6293|  45.1k|    {
 6294|  35.5k|        case value_t::number_unsigned:
  ------------------
  |  Branch (6294:9): [True: 35.5k, False: 9.64k]
  ------------------
 6295|  35.5k|        {
 6296|       |            // never null: a basic_json whose number_unsigned_t is number_integer_t
 6297|       |            // stores no number_unsigned values (#2573)
 6298|  35.5k|            const auto* ptr = j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>();
 6299|  35.5k|            JSON_ASSERT(ptr != nullptr);
  ------------------
  |  | 2643|  35.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (6299:13): [True: 35.5k, False: 0]
  ------------------
 6300|  35.5k|            val = static_cast<ArithmeticType>(*ptr);
 6301|  35.5k|            return true;
 6302|  35.5k|        }
 6303|  9.64k|        case value_t::number_integer:
  ------------------
  |  Branch (6303:9): [True: 9.64k, False: 35.5k]
  ------------------
 6304|  9.64k|        {
 6305|  9.64k|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
 6306|  9.64k|            return true;
 6307|  35.5k|        }
 6308|      0|        case value_t::number_float:
  ------------------
  |  Branch (6308:9): [True: 0, False: 45.1k]
  ------------------
 6309|      0|        {
 6310|      0|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
 6311|      0|            return true;
 6312|  35.5k|        }
 6313|       |
 6314|      0|        case value_t::null:
  ------------------
  |  Branch (6314:9): [True: 0, False: 45.1k]
  ------------------
 6315|      0|        case value_t::object:
  ------------------
  |  Branch (6315:9): [True: 0, False: 45.1k]
  ------------------
 6316|      0|        case value_t::array:
  ------------------
  |  Branch (6316:9): [True: 0, False: 45.1k]
  ------------------
 6317|      0|        case value_t::string:
  ------------------
  |  Branch (6317:9): [True: 0, False: 45.1k]
  ------------------
 6318|      0|        case value_t::boolean:
  ------------------
  |  Branch (6318:9): [True: 0, False: 45.1k]
  ------------------
 6319|      0|        case value_t::binary:
  ------------------
  |  Branch (6319:9): [True: 0, False: 45.1k]
  ------------------
 6320|      0|        case value_t::discarded:
  ------------------
  |  Branch (6320:9): [True: 0, False: 45.1k]
  ------------------
 6321|      0|        default:
  ------------------
  |  Branch (6321:9): [True: 0, False: 45.1k]
  ------------------
 6322|      0|            return false;
 6323|  45.1k|    }
 6324|  45.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE32bjdata_ndarray_elements_in_rangeERKSG_h:
33723|  16.3k|    {
33724|  16.3k|        for (const auto& el : array_data)
  ------------------
  |  Branch (33724:29): [True: 53.5k, False: 11.2k]
  ------------------
33725|  53.5k|        {
33726|  53.5k|            bool ok = true;
33727|  53.5k|            switch (dtype)
33728|  53.5k|            {
33729|  7.03k|                case 'U':
  ------------------
  |  Branch (33729:17): [True: 7.03k, False: 46.4k]
  ------------------
33730|  7.03k|                case 'B':
  ------------------
  |  Branch (33730:17): [True: 0, False: 53.5k]
  ------------------
33731|  7.03k|                    ok = bjdata_ndarray_value_in_range<std::uint8_t>(el);
33732|  7.03k|                    break;
33733|  3.33k|                case 'C':
  ------------------
  |  Branch (33733:17): [True: 3.33k, False: 50.1k]
  ------------------
33734|       |                    // BJData limits a char to 0..127 (the intersection of the int8 and uint8 ranges)
33735|  3.33k|                    ok = bjdata_ndarray_value_in_range<std::int8_t>(el) && bjdata_ndarray_value_in_range<std::uint8_t>(el);
  ------------------
  |  Branch (33735:26): [True: 2.66k, False: 672]
  |  Branch (33735:76): [True: 2.60k, False: 60]
  ------------------
33736|  3.33k|                    break;
33737|  8.94k|                case 'i':
  ------------------
  |  Branch (33737:17): [True: 8.94k, False: 44.5k]
  ------------------
33738|  8.94k|                    ok = bjdata_ndarray_value_in_range<std::int8_t>(el);
33739|  8.94k|                    break;
33740|  6.78k|                case 'u':
  ------------------
  |  Branch (33740:17): [True: 6.78k, False: 46.7k]
  ------------------
33741|  6.78k|                    ok = bjdata_ndarray_value_in_range<std::uint16_t>(el);
33742|  6.78k|                    break;
33743|  6.66k|                case 'I':
  ------------------
  |  Branch (33743:17): [True: 6.66k, False: 46.8k]
  ------------------
33744|  6.66k|                    ok = bjdata_ndarray_value_in_range<std::int16_t>(el);
33745|  6.66k|                    break;
33746|  4.59k|                case 'm':
  ------------------
  |  Branch (33746:17): [True: 4.59k, False: 48.9k]
  ------------------
33747|  4.59k|                    ok = bjdata_ndarray_value_in_range<std::uint32_t>(el);
33748|  4.59k|                    break;
33749|  4.54k|                case 'l':
  ------------------
  |  Branch (33749:17): [True: 4.54k, False: 48.9k]
  ------------------
33750|  4.54k|                    ok = bjdata_ndarray_value_in_range<std::int32_t>(el);
33751|  4.54k|                    break;
33752|  2.06k|                case 'M':
  ------------------
  |  Branch (33752:17): [True: 2.06k, False: 51.4k]
  ------------------
33753|  2.06k|                    ok = bjdata_ndarray_value_in_range<std::uint64_t>(el);
33754|  2.06k|                    break;
33755|  2.62k|                case 'L':
  ------------------
  |  Branch (33755:17): [True: 2.62k, False: 50.8k]
  ------------------
33756|  2.62k|                    ok = bjdata_ndarray_value_in_range<std::int64_t>(el);
33757|  2.62k|                    break;
33758|  4.95k|                case 'd':
  ------------------
  |  Branch (33758:17): [True: 4.95k, False: 48.5k]
  ------------------
33759|  4.95k|                    ok = bjdata_ndarray_float_in_range(el);
33760|  4.95k|                    break;
33761|  1.95k|                case 'D':
  ------------------
  |  Branch (33761:17): [True: 1.95k, False: 51.5k]
  ------------------
33762|  1.95k|                default:
  ------------------
  |  Branch (33762:17): [True: 0, False: 53.5k]
  ------------------
33763|       |                    // 'D' (double) already spans the full range of number_float_t
33764|  1.95k|                    break;
33765|  53.5k|            }
33766|  53.5k|            if (!ok)
  ------------------
  |  Branch (33766:17): [True: 5.03k, False: 48.4k]
  ------------------
33767|  5.03k|            {
33768|  5.03k|                return false;
33769|  5.03k|            }
33770|  53.5k|        }
33771|  11.2k|        return true;
33772|  16.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIhEEbRKSG_:
33539|  9.69k|    {
33540|  9.69k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 8.11k, False: 1.57k]
  ------------------
33541|  9.69k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 8.11k, False: 0]
  |  Branch (33541:88): [True: 7.97k, False: 148]
  ------------------
33542|  9.69k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 1.57k, False: 0]
  |  Branch (33542:82): [True: 960, False: 618]
  ------------------
33543|  9.69k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIaEEbRKSG_:
33539|  12.2k|    {
33540|  12.2k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 3.01k, False: 9.26k]
  ------------------
33541|  12.2k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 3.01k, False: 0]
  |  Branch (33541:88): [True: 2.42k, False: 597]
  ------------------
33542|  12.2k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 9.26k, False: 0]
  |  Branch (33542:82): [True: 8.51k, False: 745]
  ------------------
33543|  12.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeItEEbRKSG_:
33539|  6.78k|    {
33540|  6.78k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 5.57k, False: 1.21k]
  ------------------
33541|  6.78k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 5.57k, False: 0]
  |  Branch (33541:88): [True: 5.47k, False: 105]
  ------------------
33542|  6.78k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 1.21k, False: 0]
  |  Branch (33542:82): [True: 594, False: 619]
  ------------------
33543|  6.78k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIsEEbRKSG_:
33539|  6.66k|    {
33540|  6.66k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 534, False: 6.13k]
  ------------------
33541|  6.66k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 534, False: 0]
  |  Branch (33541:88): [True: 150, False: 384]
  ------------------
33542|  6.66k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 6.13k, False: 0]
  |  Branch (33542:82): [True: 5.97k, False: 154]
  ------------------
33543|  6.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIjEEbRKSG_:
33539|  4.59k|    {
33540|  4.59k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 3.66k, False: 932]
  ------------------
33541|  4.59k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 3.66k, False: 0]
  |  Branch (33541:88): [True: 3.37k, False: 283]
  ------------------
33542|  4.59k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 932, False: 0]
  |  Branch (33542:82): [True: 563, False: 369]
  ------------------
33543|  4.59k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIiEEbRKSG_:
33539|  4.54k|    {
33540|  4.54k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 494, False: 4.05k]
  ------------------
33541|  4.54k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 494, False: 0]
  |  Branch (33541:88): [True: 192, False: 302]
  ------------------
33542|  4.54k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 4.05k, False: 0]
  |  Branch (33542:82): [True: 3.79k, False: 264]
  ------------------
33543|  4.54k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIlEEbRKSG_:
33539|  2.62k|    {
33540|  2.62k|        return el.is_number_unsigned()
  ------------------
  |  Branch (33540:16): [True: 467, False: 2.16k]
  ------------------
33541|  2.62k|               ? integer_fits_max<std::uint64_t>(el.m_data.m_value.number_unsigned) && value_in_range_of<TargetType>(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned))
  ------------------
  |  Branch (33541:18): [True: 467, False: 0]
  |  Branch (33541:88): [True: 189, False: 278]
  ------------------
33542|  2.62k|               : integer_fits<std::int64_t>(el.m_data.m_value.number_integer) && value_in_range_of<TargetType>(static_cast<std::int64_t>(el.m_data.m_value.number_integer));
  ------------------
  |  Branch (33542:18): [True: 2.16k, False: 0]
  |  Branch (33542:82): [True: 2.16k, False: 0]
  ------------------
33543|  2.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_float_in_rangeERKSG_:
33613|  4.95k|    {
33614|  4.95k|        const auto dval = static_cast<double>(el.m_data.m_value.number_float);
33615|  4.95k|#ifdef __GNUC__
33616|  4.95k|        JSON_HEDLEY_DIAGNOSTIC_PUSH
33617|  4.95k|        JSON_HEDLEY_PRAGMA(GCC diagnostic ignored "-Wfloat-equal")
33618|  4.95k|#endif
33619|       |        // a value that would be rounded (rather than exactly represented) by the
33620|       |        // narrowing to float is treated like an out-of-range integer element; this
33621|       |        // is the same criterion write_compact_float() uses for CBOR/MessagePack
33622|  4.95k|        return std::isnan(dval) ||
  ------------------
  |  Branch (33622:16): [True: 540, False: 4.41k]
  ------------------
33623|  4.41k|               (dval >= static_cast<double>(std::numeric_limits<float>::lowest()) &&
  ------------------
  |  Branch (33623:17): [True: 4.34k, False: 72]
  ------------------
33624|  4.34k|                dval <= static_cast<double>((std::numeric_limits<float>::max)()) &&
  ------------------
  |  Branch (33624:17): [True: 4.26k, False: 78]
  ------------------
33625|  4.26k|                static_cast<double>(static_cast<float>(dval)) == dval) ||
  ------------------
  |  Branch (33625:17): [True: 4.26k, False: 0]
  ------------------
33626|    150|               std::isinf(dval);
  ------------------
  |  Branch (33626:16): [True: 150, False: 0]
  ------------------
33627|  4.95k|#ifdef __GNUC__
33628|  4.95k|        JSON_HEDLEY_DIAGNOSTIC_POP
33629|  4.95k|#endif
33630|  4.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE27write_bjdata_ndarray_valuesERKSG_h:
33640|  11.2k|    {
33641|  11.2k|        switch (dtype)
33642|  11.2k|        {
33643|  1.35k|            case 'U':
  ------------------
  |  Branch (33643:13): [True: 1.35k, False: 9.94k]
  ------------------
33644|  2.05k|            case 'C':
  ------------------
  |  Branch (33644:13): [True: 698, False: 10.6k]
  ------------------
33645|  2.05k|            case 'B':
  ------------------
  |  Branch (33645:13): [True: 0, False: 11.2k]
  ------------------
33646|  2.05k|                write_bjdata_ndarray_block<std::uint8_t>(array_data);
33647|  2.05k|                break;
33648|  1.85k|            case 'i':
  ------------------
  |  Branch (33648:13): [True: 1.85k, False: 9.44k]
  ------------------
33649|  1.85k|                write_bjdata_ndarray_block<std::int8_t>(array_data);
33650|  1.85k|                break;
33651|  1.12k|            case 'u':
  ------------------
  |  Branch (33651:13): [True: 1.12k, False: 10.1k]
  ------------------
33652|  1.12k|                write_bjdata_ndarray_block<std::uint16_t>(array_data);
33653|  1.12k|                break;
33654|    782|            case 'I':
  ------------------
  |  Branch (33654:13): [True: 782, False: 10.5k]
  ------------------
33655|    782|                write_bjdata_ndarray_block<std::int16_t>(array_data);
33656|    782|                break;
33657|  1.14k|            case 'm':
  ------------------
  |  Branch (33657:13): [True: 1.14k, False: 10.1k]
  ------------------
33658|  1.14k|                write_bjdata_ndarray_block<std::uint32_t>(array_data);
33659|  1.14k|                break;
33660|  1.16k|            case 'l':
  ------------------
  |  Branch (33660:13): [True: 1.16k, False: 10.1k]
  ------------------
33661|  1.16k|                write_bjdata_ndarray_block<std::int32_t>(array_data);
33662|  1.16k|                break;
33663|    542|            case 'M':
  ------------------
  |  Branch (33663:13): [True: 542, False: 10.7k]
  ------------------
33664|    542|                write_bjdata_ndarray_block<std::uint64_t>(array_data);
33665|    542|                break;
33666|    736|            case 'L':
  ------------------
  |  Branch (33666:13): [True: 736, False: 10.5k]
  ------------------
33667|    736|                write_bjdata_ndarray_block<std::int64_t>(array_data);
33668|    736|                break;
33669|    946|            case 'd':
  ------------------
  |  Branch (33669:13): [True: 946, False: 10.3k]
  ------------------
33670|    946|                write_bjdata_ndarray_block<float>(array_data);
33671|    946|                break;
33672|    954|            case 'D':
  ------------------
  |  Branch (33672:13): [True: 954, False: 10.3k]
  ------------------
33673|    954|            default:
  ------------------
  |  Branch (33673:13): [True: 0, False: 11.2k]
  ------------------
33674|       |                // 'D' (double) already spans the full range of number_float_t
33675|    954|                write_bjdata_ndarray_block<double>(array_data);
33676|    954|                break;
33677|  11.2k|        }
33678|  11.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIhEEvRKSG_:
33700|  2.05k|    {
33701|  2.05k|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|  2.05k|        auto it = array_data.m_data.m_value.array->begin();
33703|  2.05k|        const auto end = array_data.m_data.m_value.array->end();
33704|  4.10k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 2.05k, False: 2.05k]
  ------------------
33705|  2.05k|        {
33706|  2.05k|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|  2.05k|            CharType* out = start;
33708|  9.72k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 9.71k, False: 6]
  |  Branch (33708:54): [True: 7.66k, False: 2.05k]
  ------------------
33709|  7.66k|            {
33710|  7.66k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  7.66k|            }
33712|  2.05k|            oa.commit(static_cast<std::size_t>(out - start));
33713|  2.05k|        }
33714|  2.05k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIhEEPhSL_T_b:
33311|  7.66k|    {
33312|  7.66k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  7.66k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  7.66k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 7.66k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  7.66k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  7.66k|        return out + sizeof(NumberType);
33320|  7.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIhEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  7.66k|    {
33684|  7.66k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  7.66k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 7.65k, False: 9]
  ------------------
33686|  7.66k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  7.66k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  7.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIaEEvRKSG_:
33700|  1.85k|    {
33701|  1.85k|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|  1.85k|        auto it = array_data.m_data.m_value.array->begin();
33703|  1.85k|        const auto end = array_data.m_data.m_value.array->end();
33704|  3.71k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 1.86k, False: 1.85k]
  ------------------
33705|  1.86k|        {
33706|  1.86k|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|  1.86k|            CharType* out = start;
33708|  9.46k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 9.46k, False: 6]
  |  Branch (33708:54): [True: 7.60k, False: 1.85k]
  ------------------
33709|  7.60k|            {
33710|  7.60k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  7.60k|            }
33712|  1.86k|            oa.commit(static_cast<std::size_t>(out - start));
33713|  1.86k|        }
33714|  1.85k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIaEEPhSL_T_b:
33311|  7.60k|    {
33312|  7.60k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  7.60k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  7.60k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 7.60k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  7.60k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  7.60k|        return out + sizeof(NumberType);
33320|  7.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIaEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  7.60k|    {
33684|  7.60k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  7.60k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 0, False: 7.60k]
  ------------------
33686|  7.60k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  7.60k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  7.60k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockItEEvRKSG_:
33700|  1.12k|    {
33701|  1.12k|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|  1.12k|        auto it = array_data.m_data.m_value.array->begin();
33703|  1.12k|        const auto end = array_data.m_data.m_value.array->end();
33704|  2.27k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 1.14k, False: 1.12k]
  ------------------
33705|  1.14k|        {
33706|  1.14k|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|  1.14k|            CharType* out = start;
33708|  6.61k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 6.58k, False: 24]
  |  Branch (33708:54): [True: 5.46k, False: 1.12k]
  ------------------
33709|  5.46k|            {
33710|  5.46k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  5.46k|            }
33712|  1.14k|            oa.commit(static_cast<std::size_t>(out - start));
33713|  1.14k|        }
33714|  1.12k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberItEEPhSL_T_b:
33311|  5.46k|    {
33312|  5.46k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  5.46k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  5.46k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 5.46k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  5.46k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  5.46k|        return out + sizeof(NumberType);
33320|  5.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerItEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  5.46k|    {
33684|  5.46k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  5.46k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 5.46k, False: 6]
  ------------------
33686|  5.46k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  5.46k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  5.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIsEEvRKSG_:
33700|    782|    {
33701|    782|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|    782|        auto it = array_data.m_data.m_value.array->begin();
33703|    782|        const auto end = array_data.m_data.m_value.array->end();
33704|  1.58k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 800, False: 782]
  ------------------
33705|    800|        {
33706|    800|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|    800|            CharType* out = start;
33708|  6.49k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 6.46k, False: 24]
  |  Branch (33708:54): [True: 5.69k, False: 776]
  ------------------
33709|  5.69k|            {
33710|  5.69k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  5.69k|            }
33712|    800|            oa.commit(static_cast<std::size_t>(out - start));
33713|    800|        }
33714|    782|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIsEEPhSL_T_b:
33311|  5.69k|    {
33312|  5.69k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  5.69k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  5.69k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 5.69k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  5.69k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  5.69k|        return out + sizeof(NumberType);
33320|  5.69k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIsEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  5.69k|    {
33684|  5.69k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  5.69k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 105, False: 5.58k]
  ------------------
33686|  5.69k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  5.69k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  5.69k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIjEEvRKSG_:
33700|  1.14k|    {
33701|  1.14k|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|  1.14k|        auto it = array_data.m_data.m_value.array->begin();
33703|  1.14k|        const auto end = array_data.m_data.m_value.array->end();
33704|  2.30k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 1.15k, False: 1.14k]
  ------------------
33705|  1.15k|        {
33706|  1.15k|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|  1.15k|            CharType* out = start;
33708|  4.68k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 4.67k, False: 12]
  |  Branch (33708:54): [True: 3.52k, False: 1.14k]
  ------------------
33709|  3.52k|            {
33710|  3.52k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  3.52k|            }
33712|  1.15k|            oa.commit(static_cast<std::size_t>(out - start));
33713|  1.15k|        }
33714|  1.14k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIjEEPhSL_T_b:
33311|  3.52k|    {
33312|  3.52k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  3.52k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  3.52k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 3.52k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  3.52k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  3.52k|        return out + sizeof(NumberType);
33320|  3.52k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIjEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  3.52k|    {
33684|  3.52k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  3.52k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 3.36k, False: 168]
  ------------------
33686|  3.52k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  3.52k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  3.52k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIiEEvRKSG_:
33700|  1.16k|    {
33701|  1.16k|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|  1.16k|        auto it = array_data.m_data.m_value.array->begin();
33703|  1.16k|        const auto end = array_data.m_data.m_value.array->end();
33704|  2.33k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 1.16k, False: 1.16k]
  ------------------
33705|  1.16k|        {
33706|  1.16k|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|  1.16k|            CharType* out = start;
33708|  4.70k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 4.69k, False: 12]
  |  Branch (33708:54): [True: 3.53k, False: 1.15k]
  ------------------
33709|  3.53k|            {
33710|  3.53k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  3.53k|            }
33712|  1.16k|            oa.commit(static_cast<std::size_t>(out - start));
33713|  1.16k|        }
33714|  1.16k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIiEEPhSL_T_b:
33311|  3.53k|    {
33312|  3.53k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  3.53k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  3.53k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 3.53k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  3.53k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  3.53k|        return out + sizeof(NumberType);
33320|  3.53k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIiEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  3.53k|    {
33684|  3.53k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  3.53k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 150, False: 3.38k]
  ------------------
33686|  3.53k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  3.53k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  3.53k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockImEEvRKSG_:
33700|    542|    {
33701|    542|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|    542|        auto it = array_data.m_data.m_value.array->begin();
33703|    542|        const auto end = array_data.m_data.m_value.array->end();
33704|  1.10k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 560, False: 542]
  ------------------
33705|    560|        {
33706|    560|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|    560|            CharType* out = start;
33708|  2.30k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 2.28k, False: 18]
  |  Branch (33708:54): [True: 1.74k, False: 542]
  ------------------
33709|  1.74k|            {
33710|  1.74k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  1.74k|            }
33712|    560|            oa.commit(static_cast<std::size_t>(out - start));
33713|    560|        }
33714|    542|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberImEEPhSL_T_b:
33311|  1.74k|    {
33312|  1.74k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  1.74k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  1.74k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 1.74k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  1.74k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  1.74k|        return out + sizeof(NumberType);
33320|  1.74k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerImEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  1.74k|    {
33684|  1.74k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  1.74k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 1.70k, False: 33]
  ------------------
33686|  1.74k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  1.74k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  1.74k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIlEEvRKSG_:
33700|    736|    {
33701|    736|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|    736|        auto it = array_data.m_data.m_value.array->begin();
33703|    736|        const auto end = array_data.m_data.m_value.array->end();
33704|  1.49k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 754, False: 736]
  ------------------
33705|    754|        {
33706|    754|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|    754|            CharType* out = start;
33708|  2.86k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 2.84k, False: 18]
  |  Branch (33708:54): [True: 2.11k, False: 736]
  ------------------
33709|  2.11k|            {
33710|  2.11k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  2.11k|            }
33712|    754|            oa.commit(static_cast<std::size_t>(out - start));
33713|    754|        }
33714|    736|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIlEEPhSL_T_b:
33311|  2.11k|    {
33312|  2.11k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  2.11k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  2.11k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 2.11k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  2.11k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  2.11k|        return out + sizeof(NumberType);
33320|  2.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIlEET_RKSG_NS4_17integral_constantIbLb1EEE:
33683|  2.11k|    {
33684|  2.11k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
33685|  2.11k|        return static_cast<T>(el.is_number_unsigned()
  ------------------
  |  Branch (33685:31): [True: 162, False: 1.95k]
  ------------------
33686|  2.11k|                              ? static_cast<storage_type>(el.m_data.m_value.number_unsigned)
33687|  2.11k|                              : static_cast<storage_type>(el.m_data.m_value.number_integer));
33688|  2.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIfEEvRKSG_:
33700|    946|    {
33701|    946|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|    946|        auto it = array_data.m_data.m_value.array->begin();
33703|    946|        const auto end = array_data.m_data.m_value.array->end();
33704|  1.89k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 952, False: 946]
  ------------------
33705|    952|        {
33706|    952|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|    952|            CharType* out = start;
33708|  5.90k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 5.89k, False: 12]
  |  Branch (33708:54): [True: 4.95k, False: 940]
  ------------------
33709|  4.95k|            {
33710|  4.95k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  4.95k|            }
33712|    952|            oa.commit(static_cast<std::size_t>(out - start));
33713|    952|        }
33714|    946|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12store_numberIfEEPhSL_T_b:
33311|  4.95k|    {
33312|  4.95k|        std::array<CharType, sizeof(NumberType)> vec{};
33313|  4.95k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
33314|  4.95k|        if (is_little_endian != output_little_endian)
  ------------------
  |  Branch (33314:13): [True: 0, False: 4.95k]
  ------------------
33315|      0|        {
33316|      0|            reverse_bytes(vec);
33317|      0|        }
33318|  4.95k|        std::memcpy(out, vec.data(), sizeof(NumberType));
33319|  4.95k|        return out + sizeof(NumberType);
33320|  4.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIfEET_RKSG_NS4_17integral_constantIbLb0EEE:
33693|  4.95k|    {
33694|  4.95k|        return static_cast<T>(static_cast<double>(el.m_data.m_value.number_float));
33695|  4.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_bjdata_ndarray_blockIdEEvRKSG_:
33700|    954|    {
33701|    954|        constexpr std::size_t per_block = max_reserve_size / sizeof(T);
33702|    954|        auto it = array_data.m_data.m_value.array->begin();
33703|    954|        const auto end = array_data.m_data.m_value.array->end();
33704|  1.92k|        while (it != end)
  ------------------
  |  Branch (33704:16): [True: 972, False: 954]
  ------------------
33705|    972|        {
33706|    972|            CharType* const start = oa.reserve(per_block * sizeof(T));
33707|    972|            CharType* out = start;
33708|  2.93k|            for (std::size_t n = 0; n < per_block && it != end; ++n, ++it)
  ------------------
  |  Branch (33708:37): [True: 2.91k, False: 18]
  |  Branch (33708:54): [True: 1.95k, False: 954]
  ------------------
33709|  1.95k|            {
33710|  1.95k|                out = store_number(out, bjdata_ndarray_integer<T>(*it, std::is_integral<T>()), true);
33711|  1.95k|            }
33712|    972|            oa.commit(static_cast<std::size_t>(out - start));
33713|    972|        }
33714|    954|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22bjdata_ndarray_integerIdEET_RKSG_NS4_17integral_constantIbLb0EEE:
33693|  1.95k|    {
33694|  1.95k|        return static_cast<T>(static_cast<double>(el.m_data.m_value.number_float));
33695|  1.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_start_containerILb0EEEbRKSG_bbbbRb:
30634|  51.7k|    {
30635|  51.7k|        prefix_required = true;
30636|  51.7k|        if (add_prefix)
  ------------------
  |  Branch (30636:13): [True: 51.7k, False: 0]
  ------------------
30637|  51.7k|        {
30638|  51.7k|            oa.write_character(to_char_type(IsArray ? '[' : '{'));
  ------------------
  |  Branch (30638:45): [Folded, False: 51.7k]
  ------------------
30639|  51.7k|        }
30640|       |
30641|  51.7k|        const std::size_t size = IsArray ? j.m_data.m_value.array->size() : j.m_data.m_value.object->size();
  ------------------
  |  Branch (30641:34): [Folded, False: 51.7k]
  ------------------
30642|       |
30643|  51.7k|        if (use_type && size != 0)
  ------------------
  |  Branch (30643:13): [True: 16.2k, False: 35.5k]
  |  Branch (30643:25): [True: 11.6k, False: 4.63k]
  ------------------
30644|  11.6k|        {
30645|  11.6k|            if (!use_count)
  ------------------
  |  Branch (30645:17): [True: 0, False: 11.6k]
  ------------------
30646|      0|            {
30647|      0|                throw_size_marker_required(j);
30648|      0|            }
30649|  11.6k|            const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
30650|       |            // the first element of an array has been compared with itself
30651|  11.6k|            const bool same_prefix = std::all_of(IsArray ? j.begin() + 1 : j.begin(), j.end(),
  ------------------
  |  Branch (30651:50): [Folded, False: 11.6k]
  ------------------
30652|  11.6k|                                                 [this, first_prefix, use_bjdata](const BasicJsonType & v)
30653|  11.6k|            {
30654|  11.6k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
30655|  11.6k|            });
30656|       |
30657|       |            // an optimized array of a valueless type carries no payload, so a
30658|       |            // reader has nothing but the declared count to bound the allocation
30659|       |            // by and refuses an excessive one. Write the unoptimized form for
30660|       |            // those, at one byte per element, so the result can be read back.
30661|       |            // Objects are not affected: every element is preceded by its key.
30662|  11.6k|            const bool valueless_type = (first_prefix == 'Z' || first_prefix == 'T' || first_prefix == 'F');
  ------------------
  |  Branch (30662:42): [True: 1.09k, False: 10.5k]
  |  Branch (30662:65): [True: 2.07k, False: 8.43k]
  |  Branch (30662:88): [True: 214, False: 8.22k]
  ------------------
30663|  11.6k|            const bool excessive_valueless = IsArray
  ------------------
  |  Branch (30663:46): [Folded, False: 11.6k]
  ------------------
30664|      0|                                             && valueless_type
  ------------------
  |  Branch (30664:49): [True: 0, False: 0]
  ------------------
30665|      0|                                             && size > detail::max_valueless_container_size;
  ------------------
  |  Branch (30665:49): [True: 0, False: 0]
  ------------------
30666|       |
30667|  11.6k|            if (same_prefix && !excessive_valueless
  ------------------
  |  Branch (30667:17): [True: 7.88k, False: 3.71k]
  |  Branch (30667:32): [True: 0, Folded]
  ------------------
30668|  7.88k|                    && !(use_bjdata && is_bjdata_excluded_type_marker(first_prefix)))
  ------------------
  |  Branch (30668:26): [True: 7.88k, False: 0]
  |  Branch (30668:40): [True: 4.60k, False: 3.28k]
  ------------------
30669|  3.28k|            {
30670|  3.28k|                prefix_required = false;
30671|  3.28k|                oa.write_character(to_char_type('$'));
30672|  3.28k|                oa.write_character(first_prefix);
30673|  3.28k|            }
30674|  11.6k|        }
30675|       |
30676|  51.7k|        if (use_count)
  ------------------
  |  Branch (30676:13): [True: 32.4k, False: 19.2k]
  ------------------
30677|  32.4k|        {
30678|  32.4k|            write_ubjson_count(size, use_bjdata);
30679|  32.4k|        }
30680|       |
30681|  51.7k|        return !use_count;
30682|  51.7k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_start_containerILb0EEEbRKSG_bbbbRbENKUlSM_E_clESM_:
30653|  22.7k|            {
30654|  22.7k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
30655|  22.7k|            });
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE20write_ubjson_membersERKSG_bbbbNS1_16bjdata_version_tEm:
33089|  48.3k|    {
33090|  48.3k|        for (const auto& el : *j.m_data.m_value.object)
  ------------------
  |  Branch (33090:29): [True: 72.2k, False: 48.3k]
  ------------------
33091|  72.2k|        {
33092|       |            // a converted key must outlive the reference returned by sanitize_utf8_for_write
33093|  72.2k|            const object_key_string_t key_string = el.first;
33094|  72.2k|            write_ubjson_text(key_string, j, false, use_bjdata);
33095|       |
33096|  72.2k|            const BasicJsonType& value = el.second;
33097|  72.2k|            switch (value.type())
33098|  72.2k|            {
33099|  14.1k|                case value_t::null:
  ------------------
  |  Branch (33099:17): [True: 14.1k, False: 58.1k]
  ------------------
33100|  14.1k|                    if (prefix_required)
  ------------------
  |  Branch (33100:25): [True: 14.1k, False: 0]
  ------------------
33101|  14.1k|                    {
33102|  14.1k|                        oa.write_character(to_char_type('Z'));
33103|  14.1k|                    }
33104|  14.1k|                    break;
33105|       |
33106|  11.4k|                case value_t::boolean:
  ------------------
  |  Branch (33106:17): [True: 11.4k, False: 60.8k]
  ------------------
33107|  11.4k|                    if (prefix_required)
  ------------------
  |  Branch (33107:25): [True: 11.4k, False: 0]
  ------------------
33108|  11.4k|                    {
33109|  11.4k|                        oa.write_character(value.m_data.m_value.boolean ? to_char_type('T') : to_char_type('F'));
  ------------------
  |  Branch (33109:44): [True: 10.7k, False: 682]
  ------------------
33110|  11.4k|                    }
33111|  11.4k|                    break;
33112|       |
33113|  4.74k|                case value_t::number_integer:
  ------------------
  |  Branch (33113:17): [True: 4.74k, False: 67.5k]
  ------------------
33114|  4.74k|                    write_number_with_ubjson_prefix(value.m_data.m_value.number_integer, prefix_required, use_bjdata);
33115|  4.74k|                    break;
33116|       |
33117|  5.64k|                case value_t::number_unsigned:
  ------------------
  |  Branch (33117:17): [True: 5.64k, False: 66.6k]
  ------------------
33118|  5.64k|                    write_number_with_ubjson_prefix(value.m_data.m_value.number_unsigned, prefix_required, use_bjdata);
33119|  5.64k|                    break;
33120|       |
33121|  2.08k|                case value_t::number_float:
  ------------------
  |  Branch (33121:17): [True: 2.08k, False: 70.1k]
  ------------------
33122|  2.08k|                    write_number_with_ubjson_prefix(value.m_data.m_value.number_float, prefix_required, use_bjdata);
33123|  2.08k|                    break;
33124|       |
33125|  11.8k|                case value_t::string:
  ------------------
  |  Branch (33125:17): [True: 11.8k, False: 60.3k]
  ------------------
33126|  11.8k|                    write_ubjson_text(*value.m_data.m_value.string, value, prefix_required, use_bjdata);
33127|  11.8k|                    break;
33128|       |
33129|  1.30k|                case value_t::object:
  ------------------
  |  Branch (33129:17): [True: 1.30k, False: 70.9k]
  ------------------
33130|  22.0k|                case value_t::array:
  ------------------
  |  Branch (33130:17): [True: 20.6k, False: 51.5k]
  ------------------
33131|  22.3k|                case value_t::binary:
  ------------------
  |  Branch (33131:17): [True: 360, False: 71.8k]
  ------------------
33132|  22.3k|                case value_t::discarded:
  ------------------
  |  Branch (33132:17): [True: 0, False: 72.2k]
  ------------------
33133|  22.3k|                default:
  ------------------
  |  Branch (33133:17): [True: 0, False: 72.2k]
  ------------------
33134|  22.3k|                    write_ubjson(value, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth + 1);
33135|  22.3k|                    break;
33136|  72.2k|            }
33137|  72.2k|        }
33138|  48.3k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataISD_EESE_OT_bbNS0_6detail15error_handler_tE:
46010|  19.8k|    {
46011|  19.8k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
46012|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIPKhSH_TnNS2_9enable_ifIXsr6detail14can_compare_neIT_T0_EE5valueEiE4typeELi0EEESE_SJ_SK_bbNS0_6detail15error_handler_tE:
46023|  14.9k|    {
46024|  14.9k|        return from_binary_impl(detail::input_adapter(std::move(first), std::move(last)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
46025|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIRNS2_19basic_istringstreamIcS7_S9_EEEESE_OT_bbNS0_6detail15error_handler_tE:
46010|  14.9k|    {
46011|  14.9k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
46012|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail20input_stream_adapterEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
45629|  14.9k|    {
45630|  14.9k|        basic_json result;
45631|  14.9k|        detail::json_sax_dom_binary_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
45632|  14.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
45633|  14.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (45633:13): [True: 0, False: 14.9k]
  ------------------
45634|      0|        {
45635|      0|            result = value_t::discarded;
45636|      0|        }
45637|  14.9k|        return result;
45638|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEEC2ERSG_bPNS1_5lexerISG_SH_Lb0EEE:
17426|  14.9k|        : json_sax_dom_error_state(allow_exceptions_), root(r), m_lexer_ref(lexer_)
17427|  14.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEEC2EOSH_NS1_14input_format_tENS1_15error_handler_tE:
18477|  14.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
18478|  14.9k|    {
18479|  14.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
18480|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapterC2EOS2_:
 9663|  14.9k|        : is(rhs.is), sb(rhs.sb)
 9664|       |#if JSON_PRECISE_STREAM_POSITION
 9665|       |        , lookahead(rhs.lookahead)
 9666|       |#endif
 9667|       |#if !JSON_DISABLE_STREAM_BULK_SCAN
 9668|  14.9k|        , token_carry(std::move(rhs.token_carry))
 9669|  14.9k|        , token_segment(rhs.token_segment)
 9670|  14.9k|        , current_in_get_area(rhs.current_in_get_area)
 9671|  14.9k|        , tracking_token(rhs.tracking_token)
 9672|  14.9k|        , no_get_area(rhs.no_get_area)
 9673|       |#endif
 9674|  14.9k|    {
 9675|  14.9k|        rhs.is = nullptr;
 9676|  14.9k|        rhs.sb = nullptr;
 9677|       |#if JSON_PRECISE_STREAM_POSITION
 9678|       |        rhs.lookahead = false;
 9679|       |#endif
 9680|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18token_carry_bufferC2EOS2_:
 9309|  29.8k|        : m_data(std::move(rhs.m_data)), m_end(rhs.m_end), m_capacity_end(rhs.m_capacity_end)
 9310|  29.8k|    {
 9311|  29.8k|        rhs.m_end = rhs.m_capacity_end = nullptr;
 9312|  29.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9sax_parseEPSJ_bNS1_18cbor_tag_handler_tE:
18502|  14.9k|    {
18503|  14.9k|        sax = sax_;
18504|  14.9k|        container_stack.clear();
18505|  14.9k|        bon8_pushback_size = 0;
18506|  14.9k|        bool result = false;
18507|       |
18508|  14.9k|        switch (input_format)
18509|  14.9k|        {
18510|      0|            case input_format_t::bson:
  ------------------
  |  Branch (18510:13): [True: 0, False: 14.9k]
  ------------------
18511|      0|                result = parse_bson_internal();
18512|      0|                break;
18513|       |
18514|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (18514:13): [True: 0, False: 14.9k]
  ------------------
18515|      0|                result = parse_cbor_internal(tag_handler);
18516|      0|                break;
18517|       |
18518|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (18518:13): [True: 0, False: 14.9k]
  ------------------
18519|      0|                result = parse_msgpack_internal();
18520|      0|                break;
18521|       |
18522|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (18522:13): [True: 0, False: 14.9k]
  ------------------
18523|  14.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (18523:13): [True: 14.9k, False: 0]
  ------------------
18524|  14.9k|                result = parse_ubjson_internal();
18525|  14.9k|                break;
18526|       |
18527|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (18527:13): [True: 0, False: 14.9k]
  ------------------
18528|      0|                result = parse_bon8_internal();
18529|      0|                break;
18530|       |
18531|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (18531:13): [True: 0, False: 14.9k]
  ------------------
18532|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (18532:13): [True: 0, False: 14.9k]
  ------------------
18533|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18533:17): [Folded, False: 0]
  ------------------
18534|  14.9k|        }
18535|       |
18536|       |        // strict mode: next byte must be EOF
18537|  7.57k|        if (result && strict)
  ------------------
  |  Branch (18537:13): [True: 7.57k, False: 0]
  |  Branch (18537:23): [True: 7.57k, False: 0]
  ------------------
18538|  7.57k|        {
18539|  7.57k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (18539:17): [True: 0, False: 7.57k]
  |  Branch (18539:59): [True: 7.57k, False: 0]
  ------------------
18540|  7.57k|            {
18541|  7.57k|                get_ignore_noop();
18542|  7.57k|            }
18543|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (18543:22): [True: 0, False: 0]
  ------------------
18544|      0|            {
18545|       |                // a string that ends a container hands back the byte after it
18546|      0|                get_bon8();
18547|      0|            }
18548|      0|            else
18549|      0|            {
18550|      0|                get();
18551|      0|            }
18552|       |
18553|  7.57k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1697|  7.57k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 111, False: 7.45k]
  |  |  ------------------
  ------------------
18554|    111|            {
18555|    111|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
18556|    111|            }
18557|  7.57k|        }
18558|       |
18559|  7.45k|        return result;
18560|  7.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIiEEbRT_PKc:
22855|  2.26k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.26k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.26k|        chars_read += new_chars_read;
22860|  2.26k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 133, False: 2.13k]
  |  |  ------------------
  ------------------
22861|    133|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    133|            ++chars_read;
22864|    133|            static_cast<void>(report_eof(context));
22865|    133|            return false;
22866|    133|        }
22867|  2.13k|        return true;
22868|  2.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIiEEmPT_m:
 9778|  2.26k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  2.26k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  2.26k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  2.26k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  2.26k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  4.40k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.13k, False: 133]
  |  |  |  Branch (1696:94): [True: 2.13k, False: 133]
  |  |  |  Branch (1696:94): [True: 2.13k, False: 0]
  |  |  ------------------
  ------------------
 9788|  2.13k|        {
 9789|  2.13k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  2.13k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  2.13k|            return count * sizeof(T);
 9792|  2.13k|        }
 9793|    133|#endif
 9794|    133|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    133|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    133|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 133, False: 0]
  |  |  ------------------
  ------------------
 9796|    133|        {
 9797|    133|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    133|        }
 9799|    133|        return res;
 9800|  2.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter16streambuf_access7get_ptrEPNSt3__115basic_streambufIcNS4_11char_traitsIcEEEE:
 9935|   637k|        {
 9936|   637k|            return (s->*(&streambuf_access::gptr))();
 9937|   637k|        }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter16streambuf_access7get_endEPNSt3__115basic_streambufIcNS4_11char_traitsIcEEEE:
 9939|   616k|        {
 9940|   616k|            return (s->*(&streambuf_access::egptr))();
 9941|   616k|        }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter16streambuf_access4bumpEPNSt3__115basic_streambufIcNS4_11char_traitsIcEEEEi:
 9947|   581k|        {
 9948|   581k|            (s->*(&streambuf_access::gbump))(n);
 9949|   581k|        }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10report_eofEPKc:
23343|  4.08k|    {
23344|  4.08k|        return sax->parse_error(chars_read, "<end of file>",
23345|  4.08k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
23346|  4.08k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17exception_messageERKSC_SM_:
23454|  7.06k|    {
23455|  7.06k|        std::string error_msg = "syntax error while parsing ";
23456|  7.06k|        error_msg += input_format_name(input_format);
23457|       |
23458|  7.06k|        return concat(error_msg, ' ', context, ": ", detail);
23459|  7.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15enter_containerEbmi:
18618|  87.5k|    {
18619|  87.5k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1697|   175k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 87.5k]
  |  |  |  Branch (1697:94): [True: 14.1k, False: 73.4k]
  |  |  ------------------
  ------------------
18620|      0|        {
18621|      0|            return false;
18622|      0|        }
18623|       |
18624|  87.5k|        container_stack.emplace_back(len, is_object, type_marker);
18625|  87.5k|        return true;
18626|  87.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12start_objectEm:
17483|  17.3k|    {
17484|  17.3k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
17485|       |
17486|       |#if JSON_DIAGNOSTIC_POSITIONS
17487|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17488|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17489|       |#endif
17490|       |
17491|  17.3k|        return check_container_size(*this, len, "object", ref_stack.back());
17492|  17.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueINS1_7value_tEEEPSG_OT_:
17566|  96.8k|    {
17567|  96.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 9.35k, False: 87.5k]
  ------------------
17568|  9.35k|        {
17569|  9.35k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  9.35k|            return &root;
17576|  9.35k|        }
17577|       |
17578|  87.5k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  87.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 75.1k, False: 12.3k]
  |  Branch (17578:9): [True: 12.3k, False: 0]
  |  Branch (17578:9): [True: 87.5k, False: 0]
  ------------------
17579|       |
17580|  87.5k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 75.1k, False: 12.3k]
  ------------------
17581|  75.1k|        {
17582|  75.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  75.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  75.1k|        }
17590|       |
17591|  12.3k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  12.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 12.3k, False: 0]
  ------------------
17592|  12.3k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  12.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 12.3k, False: 0]
  ------------------
17593|  12.3k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  12.3k|        return object_element;
17600|  12.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_20input_stream_adapterEEESH_EEbRT_mPKcPT0_:
16179|  96.8k|{
16180|  96.8k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1697|   112k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 268, False: 96.6k]
  |  |  |  Branch (1697:94): [True: 15.1k, False: 81.6k]
  |  |  |  Branch (1697:94): [True: 268, False: 14.9k]
  |  |  ------------------
  ------------------
16181|    268|    {
16182|    268|        return container_too_large_error(sax, len, kind, ref);
16183|    268|    }
16184|  96.6k|    return true;
16185|  96.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_20input_stream_adapterEEESH_EEbRT_mPKcPT0_:
16173|    268|{
16174|    268|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
16175|    268|}
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE11start_arrayEm:
17520|  79.5k|    {
17521|  79.5k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
17522|       |
17523|       |#if JSON_DIAGNOSTIC_POSITIONS
17524|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17525|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17526|       |#endif
17527|       |
17528|  79.5k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1697|  79.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 79.5k]
  |  |  ------------------
  ------------------
17529|      0|        {
17530|      0|            return false;
17531|      0|        }
17532|       |
17533|  79.5k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (17533:13): [True: 11.5k, False: 68.0k]
  ------------------
17534|  11.5k|        {
17535|  11.5k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
17536|  11.5k|        }
17537|       |
17538|  79.5k|        return true;
17539|  79.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15container_frameC2Embi:
18584|  87.3k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15leave_containerEv:
18650|  56.4k|    {
18651|  56.4k|        const bool is_object = container_stack.back().is_object;
18652|  56.4k|        container_stack.pop_back();
18653|  56.4k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (18653:16): [True: 10.8k, False: 45.6k]
  ------------------
18654|  56.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE10end_objectEv:
17506|  13.6k|    {
17507|  13.6k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  13.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17507:9): [True: 13.6k, False: 0]
  ------------------
17508|  13.6k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  13.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17508:9): [True: 13.6k, False: 0]
  ------------------
17509|       |
17510|       |#if JSON_DIAGNOSTIC_POSITIONS
17511|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17512|       |#endif
17513|       |
17514|  13.6k|        ref_stack.back()->set_parents();
17515|  13.6k|        ref_stack.pop_back();
17516|  13.6k|        return true;
17517|  13.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE9end_arrayEv:
17542|  51.5k|    {
17543|  51.5k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  51.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17543:9): [True: 51.5k, False: 0]
  ------------------
17544|  51.5k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2643|  51.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17544:9): [True: 51.5k, False: 0]
  ------------------
17545|       |
17546|       |#if JSON_DIAGNOSTIC_POSITIONS
17547|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17548|       |#endif
17549|       |
17550|  51.5k|        ref_stack.back()->set_parents();
17551|  51.5k|        ref_stack.pop_back();
17552|  51.5k|        return true;
17553|  51.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE12unexpect_eofEPKc:
23326|   205k|    {
23327|   205k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1697|   205k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2.79k, False: 202k]
  |  |  ------------------
  ------------------
23328|  2.79k|        {
23329|  2.79k|            return report_eof(context);
23330|  2.79k|        }
23331|   202k|        return true;
23332|   205k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail20input_stream_adapter14bulk_remainingEv:
 9822|  44.1k|    {
 9823|  44.1k|        if (!current_in_get_area)
  ------------------
  |  Branch (9823:13): [True: 0, False: 44.1k]
  ------------------
 9824|      0|        {
 9825|      0|            return 0;
 9826|      0|        }
 9827|  44.1k|        return static_cast<std::size_t>(streambuf_access::get_end(sb) - current_end());
 9828|  44.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail20input_stream_adapter11current_endEv:
 9960|  64.8k|    {
 9961|       |#if JSON_PRECISE_STREAM_POSITION
 9962|       |        // the character is peeked at gptr() and not stepped over yet, unless
 9963|       |        // it was given back with release_lookahead()
 9964|       |        return streambuf_access::get_ptr(sb) + (lookahead ? 1 : 0);
 9965|       |#else
 9966|  64.8k|        return streambuf_access::get_ptr(sb);
 9967|  64.8k|#endif
 9968|  64.8k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail20input_stream_adapter9bulk_dataEv:
 9816|  20.6k|    {
 9817|  20.6k|        return current_end();
 9818|  20.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter9bulk_skipEm:
 9833|  20.6k|    {
 9834|  20.6k|        JSON_ASSERT(n <= bulk_remaining());
  ------------------
  |  | 2643|  20.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (9834:9): [True: 20.6k, False: 0]
  ------------------
 9835|       |        // gbump() takes an int, but a get area (e.g., of a std::stringbuf) can
 9836|       |        // be larger
 9837|  20.6k|        constexpr auto max_bump = static_cast<std::size_t>((std::numeric_limits<int>::max)());
 9838|  20.6k|        for (; n > max_bump; n -= max_bump)
  ------------------
  |  Branch (9838:16): [True: 0, False: 20.6k]
  ------------------
 9839|      0|        {
 9840|      0|            streambuf_access::bump(sb, static_cast<int>(max_bump));
 9841|      0|        }
 9842|  20.6k|        streambuf_access::bump(sb, static_cast<int>(n));
 9843|  20.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17check_string_utf8ERSC_PKc:
23163|  28.4k|    {
23164|  28.4k|        return error_handler == error_handler_t::keep || check_string_utf8_handler(result, context);
  ------------------
  |  Branch (23164:16): [True: 28.4k, False: 0]
  |  Branch (23164:58): [True: 0, False: 0]
  ------------------
23165|  28.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE3keyERSC_:
17495|  31.6k|    {
17496|  31.6k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  31.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17496:9): [True: 31.6k, False: 0]
  ------------------
17497|  31.6k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  31.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17497:9): [True: 31.6k, False: 0]
  ------------------
17498|       |
17499|       |        // add null at the given key and store the reference for later; the
17500|       |        // key is moved, as the lexer starts the next token with reset()
17501|  31.6k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](std::move(val)));
17502|  31.6k|        return true;
17503|  31.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIdEEbRT_PKc:
22855|    534|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|    534|        auto new_chars_read = ia.get_elements(&dest);
22859|    534|        chars_read += new_chars_read;
22860|    534|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|    534|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 442]
  |  |  ------------------
  ------------------
22861|     92|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|     92|            ++chars_read;
22864|     92|            static_cast<void>(report_eof(context));
22865|     92|            return false;
22866|     92|        }
22867|    442|        return true;
22868|    534|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIdEEmPT_m:
 9778|    534|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|    534|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|    534|        const char* const first = streambuf_access::get_ptr(sb);
 9786|    534|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|    534|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|    976|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 442, False: 92]
  |  |  |  Branch (1696:94): [True: 442, False: 92]
  |  |  |  Branch (1696:94): [True: 442, False: 0]
  |  |  ------------------
  ------------------
 9788|    442|        {
 9789|    442|            std::memcpy(dest, first, count * sizeof(T));
 9790|    442|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|    442|            return count * sizeof(T);
 9792|    442|        }
 9793|     92|#endif
 9794|     92|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|     92|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|     92|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 0]
  |  |  ------------------
  ------------------
 9796|     92|        {
 9797|     92|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|     92|        }
 9799|     92|        return res;
 9800|    534|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10emit_floatIdEEbT_:
23034|  1.12k|    {
23035|  1.12k|        const auto result = static_cast<number_float_t>(number);
23036|  1.12k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  2.22k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.12k]
  |  |  |  Branch (1697:94): [True: 1.09k, False: 30]
  |  |  |  Branch (1697:94): [True: 0, False: 1.09k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  1.12k|        return sax->number_float(result, no_source);
23041|  1.12k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18out_of_range_errorENS1_12exception_idEPKcSN_:
23353|     52|    {
23354|     52|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
23355|     52|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE16get_token_stringEv:
23443|  1.66k|    {
23444|  1.66k|        return hex_byte(static_cast<std::uint8_t>(current));
23445|  1.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12number_floatEdRKSC_:
17461|  35.9k|    {
17462|  35.9k|        handle_value(val);
17463|  35.9k|        return true;
17464|  35.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRdEEPSG_OT_:
17566|  35.9k|    {
17567|  35.9k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 1.33k, False: 34.6k]
  ------------------
17568|  1.33k|        {
17569|  1.33k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  1.33k|            return &root;
17576|  1.33k|        }
17577|       |
17578|  34.6k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  34.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 34.0k, False: 626]
  |  Branch (17578:9): [True: 626, False: 0]
  |  Branch (17578:9): [True: 34.6k, False: 0]
  ------------------
17579|       |
17580|  34.6k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 34.0k, False: 626]
  ------------------
17581|  34.0k|        {
17582|  34.0k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  34.0k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  34.0k|        }
17590|       |
17591|    626|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|    626|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 626, False: 0]
  ------------------
17592|    626|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|    626|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 626, False: 0]
  ------------------
17593|    626|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|    626|        return object_element;
17600|    626|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIiEEbT_RSC_:
23119|    468|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    468|        return get_bytes(len, "string", result);
23130|    468|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIiSC_EEbT_PKcRT0_:
23245|    468|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    468|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    468|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 211, False: 257]
  ------------------
23250|    211|        {
23251|    211|            return true;
23252|    211|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    257|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    257|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 74, False: 183]
  ------------------
23258|     74|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     74|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 35, False: 39]
  ------------------
23262|     74|                                       ? static_cast<std::size_t>(len)
23263|     74|                                       : chunk_size;
23264|     74|            const std::size_t old_size = result.size();
23265|     74|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     74|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     74|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 74, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     74|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     74|            chars_read += bytes_read;
23273|     74|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     74|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 74, False: 0]
  |  |  ------------------
  ------------------
23274|     74|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     74|                result.resize(old_size + bytes_read);
23279|     74|                ++chars_read;
23280|     74|                current = char_traits<char_type>::eof();
23281|     74|                return unexpect_eof(context);
23282|     74|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    183|        return true;
23288|    257|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIiEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    468|    {
23295|    468|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 183, False: 285]
  ------------------
23296|    183|        {
23297|    183|            return false;
23298|    183|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    285|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    285|        const std::size_t remaining = ia.bulk_remaining();
23303|    285|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 74, False: 211]
  ------------------
23304|     74|        {
23305|     74|            return false; // (the loop reports the premature end)
23306|     74|        }
23307|    211|        const auto n = static_cast<std::size_t>(ulen);
23308|    211|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    211|        ia.bulk_skip(n);
23310|    211|        chars_read += n;
23311|    211|        return true;
23312|    285|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIcEEmPT_m:
 9778|    688|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|    688|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|    688|        const char* const first = streambuf_access::get_ptr(sb);
 9786|    688|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|    688|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|    688|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 0, False: 688]
  |  |  |  Branch (1696:94): [True: 0, False: 688]
  |  |  |  Branch (1696:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 9788|      0|        {
 9789|      0|            std::memcpy(dest, first, count * sizeof(T));
 9790|      0|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|      0|            return count * sizeof(T);
 9792|      0|        }
 9793|    688|#endif
 9794|    688|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    688|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    688|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 688, False: 0]
  |  |  ------------------
  ------------------
 9796|    688|        {
 9797|    688|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    688|        }
 9799|    688|        return res;
 9800|    688|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE6stringERSC_:
17467|  17.3k|    {
17468|       |        // json_sax documents that the passed value may be moved from,
17469|       |        // so hand the buffer over instead of copying it
17470|  17.3k|        handle_value(std::move(val));
17471|  17.3k|        return true;
17472|  17.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueISC_EEPSG_OT_:
17566|  17.3k|    {
17567|  17.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 390, False: 17.0k]
  ------------------
17568|    390|        {
17569|    390|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    390|            return &root;
17576|    390|        }
17577|       |
17578|  17.0k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  17.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 10.6k, False: 6.38k]
  |  Branch (17578:9): [True: 6.38k, False: 0]
  |  Branch (17578:9): [True: 17.0k, False: 0]
  ------------------
17579|       |
17580|  17.0k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 10.6k, False: 6.38k]
  ------------------
17581|  10.6k|        {
17582|  10.6k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  10.6k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  10.6k|        }
17590|       |
17591|  6.38k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  6.38k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 6.38k, False: 0]
  ------------------
17592|  6.38k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  6.38k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 6.38k, False: 0]
  ------------------
17593|  6.38k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  6.38k|        return object_element;
17600|  6.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIhEEmPT_m:
 9778|  38.6k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  38.6k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  38.6k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  38.6k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  38.6k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  76.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 38.3k, False: 300]
  |  |  |  Branch (1696:94): [True: 38.3k, False: 300]
  |  |  |  Branch (1696:94): [True: 38.3k, False: 0]
  |  |  ------------------
  ------------------
 9788|  38.3k|        {
 9789|  38.3k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  38.3k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  38.3k|            return count * sizeof(T);
 9792|  38.3k|        }
 9793|    300|#endif
 9794|    300|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    300|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    300|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 300, False: 0]
  |  |  ------------------
  ------------------
 9796|    300|        {
 9797|    300|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    300|        }
 9799|    300|        return res;
 9800|  38.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
17475|  2.91k|    {
17476|       |        // json_sax documents that the passed value may be moved from,
17477|       |        // so hand the buffer over instead of copying it
17478|  2.91k|        handle_value(std::move(val));
17479|  2.91k|        return true;
17480|  2.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
17566|  2.91k|    {
17567|  2.91k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 51, False: 2.86k]
  ------------------
17568|     51|        {
17569|     51|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     51|            return &root;
17576|     51|        }
17577|       |
17578|  2.86k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  2.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 2.42k, False: 433]
  |  Branch (17578:9): [True: 433, False: 0]
  |  Branch (17578:9): [True: 2.86k, False: 0]
  ------------------
17579|       |
17580|  2.86k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 2.42k, False: 433]
  ------------------
17581|  2.42k|        {
17582|  2.42k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  2.42k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  2.42k|        }
17590|       |
17591|    433|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|    433|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 433, False: 0]
  ------------------
17592|    433|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|    433|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 433, False: 0]
  ------------------
17593|    433|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|    433|        return object_element;
17600|    433|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIhLb0EEEbRT_:
22948|  37.0k|    {
22949|       |        // read in the original format
22950|       |
22951|  37.0k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  37.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 37.0k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  37.0k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 37.0k]
  |  Branch (22955:34): [Folded, False: 36.8k]
  |  Branch (22955:57): [True: 36.8k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  37.0k|        return true;
22960|  37.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIhEEbRT_PKc:
22855|  37.0k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  37.0k|        auto new_chars_read = ia.get_elements(&dest);
22859|  37.0k|        chars_read += new_chars_read;
22860|  37.0k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  37.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 171, False: 36.8k]
  |  |  ------------------
  ------------------
22861|    171|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    171|            ++chars_read;
22864|    171|            static_cast<void>(report_eof(context));
22865|    171|            return false;
22866|    171|        }
22867|  36.8k|        return true;
22868|  37.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE7booleanEb:
17443|  16.0k|    {
17444|  16.0k|        handle_value(val);
17445|  16.0k|        return true;
17446|  16.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRbEEPSG_OT_:
17566|  16.0k|    {
17567|  16.0k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 14, False: 15.9k]
  ------------------
17568|     14|        {
17569|     14|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     14|            return &root;
17576|     14|        }
17577|       |
17578|  15.9k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  15.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 11.2k, False: 4.74k]
  |  Branch (17578:9): [True: 4.74k, False: 0]
  |  Branch (17578:9): [True: 15.9k, False: 0]
  ------------------
17579|       |
17580|  15.9k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 11.2k, False: 4.74k]
  ------------------
17581|  11.2k|        {
17582|  11.2k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  11.2k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  11.2k|        }
17590|       |
17591|  4.74k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.74k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.74k, False: 0]
  ------------------
17592|  4.74k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.74k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.74k, False: 0]
  ------------------
17593|  4.74k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.74k|        return object_element;
17600|  4.74k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE4nullEv:
17437|  11.1k|    {
17438|  11.1k|        handle_value(nullptr);
17439|  11.1k|        return true;
17440|  11.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIDnEEPSG_OT_:
17566|  11.1k|    {
17567|  11.1k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 14, False: 11.1k]
  ------------------
17568|     14|        {
17569|     14|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     14|            return &root;
17576|     14|        }
17577|       |
17578|  11.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  11.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 7.05k, False: 4.06k]
  |  Branch (17578:9): [True: 4.06k, False: 0]
  |  Branch (17578:9): [True: 11.1k, False: 0]
  ------------------
17579|       |
17580|  11.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 7.05k, False: 4.06k]
  ------------------
17581|  7.05k|        {
17582|  7.05k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  7.05k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  7.05k|        }
17590|       |
17591|  4.06k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.06k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.06k, False: 0]
  ------------------
17592|  4.06k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.06k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.06k, False: 0]
  ------------------
17593|  4.06k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.06k|        return object_element;
17600|  4.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIiEEbT_:
22980|  1.93k|    {
22981|  1.93k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  1.93k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.93k, False: 0]
  |  |  ------------------
  ------------------
22982|  1.93k|        {
22983|  1.93k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  1.93k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE14number_integerEl:
17449|  14.3k|    {
17450|  14.3k|        handle_value(val);
17451|  14.3k|        return true;
17452|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRlEEPSG_OT_:
17566|  14.3k|    {
17567|  14.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 209, False: 14.1k]
  ------------------
17568|    209|        {
17569|    209|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    209|            return &root;
17576|    209|        }
17577|       |
17578|  14.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  14.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 13.1k, False: 1.02k]
  |  Branch (17578:9): [True: 1.02k, False: 0]
  |  Branch (17578:9): [True: 14.1k, False: 0]
  ------------------
17579|       |
17580|  14.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 13.1k, False: 1.02k]
  ------------------
17581|  13.1k|        {
17582|  13.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  13.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  13.1k|        }
17590|       |
17591|  1.02k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.02k, False: 0]
  ------------------
17592|  1.02k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.02k, False: 0]
  ------------------
17593|  1.02k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.02k|        return object_element;
17600|  1.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE15number_unsignedEm:
17455|  27.2k|    {
17456|  27.2k|        handle_value(val);
17457|  27.2k|        return true;
17458|  27.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRmEEPSG_OT_:
17566|  27.2k|    {
17567|  27.2k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 473, False: 26.8k]
  ------------------
17568|    473|        {
17569|    473|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    473|            return &root;
17576|    473|        }
17577|       |
17578|  26.8k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  26.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 25.1k, False: 1.65k]
  |  Branch (17578:9): [True: 1.65k, False: 0]
  |  Branch (17578:9): [True: 26.8k, False: 0]
  ------------------
17579|       |
17580|  26.8k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 25.1k, False: 1.65k]
  ------------------
17581|  25.1k|        {
17582|  25.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  25.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  25.1k|        }
17590|       |
17591|  1.65k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.65k, False: 0]
  ------------------
17592|  1.65k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.65k, False: 0]
  ------------------
17593|  1.65k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.65k|        return object_element;
17600|  1.65k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIlEEbRT_PKc:
22855|  2.72k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.72k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.72k|        chars_read += new_chars_read;
22860|  2.72k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.72k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 153, False: 2.57k]
  |  |  ------------------
  ------------------
22861|    153|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    153|            ++chars_read;
22864|    153|            static_cast<void>(report_eof(context));
22865|    153|            return false;
22866|    153|        }
22867|  2.57k|        return true;
22868|  2.72k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIlEEmPT_m:
 9778|  2.72k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  2.72k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  2.72k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  2.72k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  2.72k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  5.29k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.57k, False: 153]
  |  |  |  Branch (1696:94): [True: 2.57k, False: 153]
  |  |  |  Branch (1696:94): [True: 2.57k, False: 0]
  |  |  ------------------
  ------------------
 9788|  2.57k|        {
 9789|  2.57k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  2.57k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  2.57k|            return count * sizeof(T);
 9792|  2.57k|        }
 9793|    153|#endif
 9794|    153|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    153|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    153|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 153, False: 0]
  |  |  ------------------
  ------------------
 9796|    153|        {
 9797|    153|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    153|        }
 9799|    153|        return res;
 9800|  2.72k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIlEEbT_:
22980|  1.90k|    {
22981|  1.90k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  1.90k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.90k, False: 0]
  |  |  ------------------
  ------------------
22982|  1.90k|        {
22983|  1.90k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  1.90k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toImEEbRT_PKc:
22855|  4.44k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  4.44k|        auto new_chars_read = ia.get_elements(&dest);
22859|  4.44k|        chars_read += new_chars_read;
22860|  4.44k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  4.44k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 144, False: 4.30k]
  |  |  ------------------
  ------------------
22861|    144|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    144|            ++chars_read;
22864|    144|            static_cast<void>(report_eof(context));
22865|    144|            return false;
22866|    144|        }
22867|  4.30k|        return true;
22868|  4.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsImEEmPT_m:
 9778|  4.44k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  4.44k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  4.44k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  4.44k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  4.44k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  8.74k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 4.30k, False: 144]
  |  |  |  Branch (1696:94): [True: 4.30k, False: 144]
  |  |  |  Branch (1696:94): [True: 4.30k, False: 0]
  |  |  ------------------
  ------------------
 9788|  4.30k|        {
 9789|  4.30k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  4.30k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  4.30k|            return count * sizeof(T);
 9792|  4.30k|        }
 9793|    144|#endif
 9794|    144|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    144|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    144|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 144, False: 0]
  |  |  ------------------
  ------------------
 9796|    144|        {
 9797|    144|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    144|        }
 9799|    144|        return res;
 9800|  4.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedImEEbT_:
23008|  11.7k|    {
23009|  11.7k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  11.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 11.7k, False: 0]
  |  |  ------------------
  ------------------
23010|  11.7k|        {
23011|  11.7k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  11.7k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  11.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberItLb0EEEbRT_:
22948|  3.23k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.23k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.23k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.23k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.23k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.23k]
  |  Branch (22955:34): [Folded, False: 3.09k]
  |  Branch (22955:57): [True: 3.09k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.23k|        return true;
22960|  3.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toItEEbRT_PKc:
22855|  3.23k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.23k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.23k|        chars_read += new_chars_read;
22860|  3.23k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.23k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 148, False: 3.09k]
  |  |  ------------------
  ------------------
22861|    148|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    148|            ++chars_read;
22864|    148|            static_cast<void>(report_eof(context));
22865|    148|            return false;
22866|    148|        }
22867|  3.09k|        return true;
22868|  3.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsItEEmPT_m:
 9778|  3.23k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  3.23k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  3.23k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  3.23k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  3.23k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  6.32k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 3.09k, False: 148]
  |  |  |  Branch (1696:94): [True: 3.09k, False: 148]
  |  |  |  Branch (1696:94): [True: 3.09k, False: 0]
  |  |  ------------------
  ------------------
 9788|  3.09k|        {
 9789|  3.09k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  3.09k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  3.09k|            return count * sizeof(T);
 9792|  3.09k|        }
 9793|    148|#endif
 9794|    148|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    148|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    148|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 148, False: 0]
  |  |  ------------------
  ------------------
 9796|    148|        {
 9797|    148|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    148|        }
 9799|    148|        return res;
 9800|  3.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIjLb0EEEbRT_:
22948|  2.12k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.12k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.12k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.12k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.12k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.12k]
  |  Branch (22955:34): [Folded, False: 2.02k]
  |  Branch (22955:57): [True: 2.02k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.12k|        return true;
22960|  2.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIjEEbRT_PKc:
22855|  2.12k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.12k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.12k|        chars_read += new_chars_read;
22860|  2.12k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.12k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 2.02k]
  |  |  ------------------
  ------------------
22861|    103|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    103|            ++chars_read;
22864|    103|            static_cast<void>(report_eof(context));
22865|    103|            return false;
22866|    103|        }
22867|  2.02k|        return true;
22868|  2.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIjEEmPT_m:
 9778|  2.12k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  2.12k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  2.12k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  2.12k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  2.12k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  4.14k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.02k, False: 103]
  |  |  |  Branch (1696:94): [True: 2.02k, False: 103]
  |  |  |  Branch (1696:94): [True: 2.02k, False: 0]
  |  |  ------------------
  ------------------
 9788|  2.02k|        {
 9789|  2.02k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  2.02k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  2.02k|            return count * sizeof(T);
 9792|  2.02k|        }
 9793|    103|#endif
 9794|    103|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    103|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    103|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 0]
  |  |  ------------------
  ------------------
 9796|    103|        {
 9797|    103|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    103|        }
 9799|    103|        return res;
 9800|  2.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberImLb0EEEbRT_:
22948|  4.44k|    {
22949|       |        // read in the original format
22950|       |
22951|  4.44k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  4.44k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 4.44k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  4.44k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 4.44k]
  |  Branch (22955:34): [Folded, False: 4.30k]
  |  Branch (22955:57): [True: 4.30k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  4.44k|        return true;
22960|  4.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIjEEbT_RSC_:
23119|    415|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    415|        return get_bytes(len, "string", result);
23130|    415|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIjSC_EEbT_PKcRT0_:
23245|    415|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    415|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    415|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 186, False: 229]
  ------------------
23250|    186|        {
23251|    186|            return true;
23252|    186|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    229|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    229|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 92, False: 137]
  ------------------
23258|     92|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     92|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 37, False: 55]
  ------------------
23262|     92|                                       ? static_cast<std::size_t>(len)
23263|     92|                                       : chunk_size;
23264|     92|            const std::size_t old_size = result.size();
23265|     92|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     92|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     92|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 92, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     92|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     92|            chars_read += bytes_read;
23273|     92|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     92|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 0]
  |  |  ------------------
  ------------------
23274|     92|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     92|                result.resize(old_size + bytes_read);
23279|     92|                ++chars_read;
23280|     92|                current = char_traits<char_type>::eof();
23281|     92|                return unexpect_eof(context);
23282|     92|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    137|        return true;
23288|    229|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIjEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    415|    {
23295|    415|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 137, False: 278]
  ------------------
23296|    137|        {
23297|    137|            return false;
23298|    137|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    278|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    278|        const std::size_t remaining = ia.bulk_remaining();
23303|    278|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 92, False: 186]
  ------------------
23304|     92|        {
23305|     92|            return false; // (the loop reports the premature end)
23306|     92|        }
23307|    186|        const auto n = static_cast<std::size_t>(ulen);
23308|    186|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    186|        ia.bulk_skip(n);
23310|    186|        chars_read += n;
23311|    186|        return true;
23312|    278|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIhSC_EEbT_PKcRT0_:
23245|  20.7k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  20.7k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  20.7k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 11.6k, False: 9.07k]
  ------------------
23250|  11.6k|        {
23251|  11.6k|            return true;
23252|  11.6k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  9.07k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  9.07k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 34, False: 9.03k]
  ------------------
23258|     34|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     34|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 34, False: 0]
  ------------------
23262|     34|                                       ? static_cast<std::size_t>(len)
23263|     34|                                       : chunk_size;
23264|     34|            const std::size_t old_size = result.size();
23265|     34|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     34|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     34|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 34, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     34|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     34|            chars_read += bytes_read;
23273|     34|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     34|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 0]
  |  |  ------------------
  ------------------
23274|     34|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     34|                result.resize(old_size + bytes_read);
23279|     34|                ++chars_read;
23280|     34|                current = char_traits<char_type>::eof();
23281|     34|                return unexpect_eof(context);
23282|     34|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|  9.03k|        return true;
23288|  9.07k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIhEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  20.7k|    {
23295|  20.7k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 9.03k, False: 11.6k]
  ------------------
23296|  9.03k|        {
23297|  9.03k|            return false;
23298|  9.03k|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  11.6k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  11.6k|        const std::size_t remaining = ia.bulk_remaining();
23303|  11.6k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 34, False: 11.6k]
  ------------------
23304|     34|        {
23305|     34|            return false; // (the loop reports the premature end)
23306|     34|        }
23307|  11.6k|        const auto n = static_cast<std::size_t>(ulen);
23308|  11.6k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  11.6k|        ia.bulk_skip(n);
23310|  11.6k|        chars_read += n;
23311|  11.6k|        return true;
23312|  11.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesItSC_EEbT_PKcRT0_:
23245|    916|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    916|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    916|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 500, False: 416]
  ------------------
23250|    500|        {
23251|    500|            return true;
23252|    500|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    416|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    416|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 67, False: 349]
  ------------------
23258|     67|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     67|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 46, False: 21]
  ------------------
23262|     67|                                       ? static_cast<std::size_t>(len)
23263|     67|                                       : chunk_size;
23264|     67|            const std::size_t old_size = result.size();
23265|     67|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     67|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     67|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 67, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     67|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     67|            chars_read += bytes_read;
23273|     67|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     67|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 67, False: 0]
  |  |  ------------------
  ------------------
23274|     67|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     67|                result.resize(old_size + bytes_read);
23279|     67|                ++chars_read;
23280|     67|                current = char_traits<char_type>::eof();
23281|     67|                return unexpect_eof(context);
23282|     67|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    349|        return true;
23288|    416|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockItEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    916|    {
23295|    916|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 349, False: 567]
  ------------------
23296|    349|        {
23297|    349|            return false;
23298|    349|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    567|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    567|        const std::size_t remaining = ia.bulk_remaining();
23303|    567|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 67, False: 500]
  ------------------
23304|     67|        {
23305|     67|            return false; // (the loop reports the premature end)
23306|     67|        }
23307|    500|        const auto n = static_cast<std::size_t>(ulen);
23308|    500|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    500|        ia.bulk_skip(n);
23310|    500|        chars_read += n;
23311|    500|        return true;
23312|    567|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesImSC_EEbT_PKcRT0_:
23245|    533|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    533|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    533|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 189, False: 344]
  ------------------
23250|    189|        {
23251|    189|            return true;
23252|    189|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    344|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    344|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 185, False: 159]
  ------------------
23258|    185|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    185|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 33, False: 152]
  ------------------
23262|    185|                                       ? static_cast<std::size_t>(len)
23263|    185|                                       : chunk_size;
23264|    185|            const std::size_t old_size = result.size();
23265|    185|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    185|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    185|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 185, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    185|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    185|            chars_read += bytes_read;
23273|    185|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    185|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 185, False: 0]
  |  |  ------------------
  ------------------
23274|    185|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    185|                result.resize(old_size + bytes_read);
23279|    185|                ++chars_read;
23280|    185|                current = char_traits<char_type>::eof();
23281|    185|                return unexpect_eof(context);
23282|    185|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    159|        return true;
23288|    344|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockImEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    533|    {
23295|    533|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 159, False: 374]
  ------------------
23296|    159|        {
23297|    159|            return false;
23298|    159|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    374|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    374|        const std::size_t remaining = ia.bulk_remaining();
23303|    374|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 185, False: 189]
  ------------------
23304|    185|        {
23305|    185|            return false; // (the loop reports the premature end)
23306|    185|        }
23307|    189|        const auto n = static_cast<std::size_t>(ulen);
23308|    189|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    189|        ia.bulk_skip(n);
23310|    189|        chars_read += n;
23311|    189|        return true;
23312|    374|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedIhEEbT_:
23008|  7.94k|    {
23009|  7.94k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  7.94k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 7.94k, False: 0]
  |  |  ------------------
  ------------------
23010|  7.94k|        {
23011|  7.94k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  7.94k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  7.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedItEEbT_:
23008|  2.99k|    {
23009|  2.99k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  2.99k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.99k, False: 0]
  |  |  ------------------
  ------------------
23010|  2.99k|        {
23011|  2.99k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  2.99k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  2.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedIjEEbT_:
23008|  1.87k|    {
23009|  1.87k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  1.87k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.87k, False: 0]
  |  |  ------------------
  ------------------
23010|  1.87k|        {
23011|  1.87k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  1.87k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
23245|  3.04k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  3.04k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [Folded, False: 0]
  ------------------
23249|  3.04k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 3.04k]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  3.04k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  4.53k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 1.62k, False: 2.91k]
  ------------------
23258|  1.62k|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|  1.62k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 1.53k, False: 91]
  ------------------
23262|  1.62k|                                       ? static_cast<std::size_t>(len)
23263|  1.62k|                                       : chunk_size;
23264|  1.62k|            const std::size_t old_size = result.size();
23265|  1.62k|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|  1.62k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|  1.62k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 1.62k, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|  1.62k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|  1.62k|            chars_read += bytes_read;
23273|  1.62k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|  1.62k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 129, False: 1.49k]
  |  |  ------------------
  ------------------
23274|    129|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    129|                result.resize(old_size + bytes_read);
23279|    129|                ++chars_read;
23280|    129|                current = char_traits<char_type>::eof();
23281|    129|                return unexpect_eof(context);
23282|    129|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|  1.49k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|  1.49k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 1.49k, False: 0]
  ------------------
23285|  1.49k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|  1.49k|        }
23287|  2.91k|        return true;
23288|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockImNS0_27byte_container_with_subtypeISF_EEEEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|  3.04k|    {
23317|  3.04k|        return false;
23318|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10emit_floatIfEEbT_:
23034|  2.21k|    {
23035|  2.21k|        const auto result = static_cast<number_float_t>(number);
23036|  2.21k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  4.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.21k]
  |  |  |  Branch (1697:94): [True: 1.93k, False: 282]
  |  |  |  Branch (1697:94): [True: 0, False: 1.93k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  2.21k|        return sax->number_float(result, no_source);
23041|  2.21k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11enter_arrayEmi:
18630|  73.4k|    {
18631|  73.4k|        return enter_container(/*is_object*/false, len, type_marker);
18632|  73.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE12enter_objectEmi:
18636|  14.1k|    {
18637|  14.1k|        return enter_container(/*is_object*/true, len, type_marker);
18638|  14.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15unexpected_byteEPKcSM_:
23421|    150|    {
23422|    150|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
23423|    150|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE14get_half_floatEb:
23054|  29.6k|    {
23055|  29.6k|        const auto byte1_raw = get();
23056|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
23057|      0|        {
23058|      0|            return false;
23059|      0|        }
23060|  29.6k|        const auto byte2_raw = get();
23061|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
23062|      0|        {
23063|      0|            return false;
23064|      0|        }
23065|       |
23066|  29.6k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
23067|  29.6k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
23068|       |
23069|       |        // Code from RFC 8949, Appendix D, Figure 3:
23070|       |        // As half-precision floating-point numbers were only added
23071|       |        // to IEEE 754 in 2008, today's programming platforms often
23072|       |        // still only have limited support for them. It is very
23073|       |        // easy to include at least decoding support for them even
23074|       |        // without such support. An example of a small decoder for
23075|       |        // half-precision floating-point numbers in the C language
23076|       |        // is shown in Fig. 3.
23077|  29.6k|        const auto half = little_endian
  ------------------
  |  Branch (23077:27): [True: 29.5k, False: 96]
  ------------------
23078|  29.6k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
23079|  29.6k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
23080|  29.6k|        const double val = [&half]
23081|  29.6k|        {
23082|  29.6k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  29.6k|            const unsigned int mant = half & 0x3FFu;
23084|  29.6k|            JSON_ASSERT(exp <= 31);
23085|  29.6k|            JSON_ASSERT(mant <= 1023);
23086|  29.6k|            switch (exp)
23087|  29.6k|            {
23088|  29.6k|                case 0:
23089|  29.6k|                    return std::ldexp(mant, -24);
23090|  29.6k|                case 31:
23091|  29.6k|                    return (mant == 0)
23092|  29.6k|                    ? std::numeric_limits<double>::infinity()
23093|  29.6k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  29.6k|                default:
23095|  29.6k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  29.6k|            }
23097|  29.6k|        }();
23098|  29.6k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (23098:34): [True: 5.86k, False: 23.7k]
  ------------------
23099|  29.6k|                                 ? static_cast<number_float_t>(-val)
23100|  29.6k|                                 : static_cast<number_float_t>(val), no_source);
23101|  29.6k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE14get_half_floatEbENKUlvE_clEv:
23081|  29.5k|        {
23082|  29.5k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  29.5k|            const unsigned int mant = half & 0x3FFu;
23084|  29.5k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2643|  29.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23084:13): [True: 29.5k, False: 0]
  ------------------
23085|  29.5k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2643|  29.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23085:13): [True: 29.5k, False: 0]
  ------------------
23086|  29.5k|            switch (exp)
23087|  29.5k|            {
23088|  6.40k|                case 0:
  ------------------
  |  Branch (23088:17): [True: 6.40k, False: 23.1k]
  ------------------
23089|  6.40k|                    return std::ldexp(mant, -24);
23090|  1.96k|                case 31:
  ------------------
  |  Branch (23090:17): [True: 1.96k, False: 27.5k]
  ------------------
23091|  1.96k|                    return (mant == 0)
  ------------------
  |  Branch (23091:28): [True: 2, False: 1.96k]
  ------------------
23092|  1.96k|                    ? std::numeric_limits<double>::infinity()
23093|  1.96k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  21.1k|                default:
  ------------------
  |  Branch (23094:17): [True: 21.1k, False: 8.37k]
  ------------------
23095|  21.1k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  29.5k|            }
23097|  29.5k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIfLb0EEEbRT_:
22948|    812|    {
22949|       |        // read in the original format
22950|       |
22951|    812|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|    812|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 812]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|    812|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 812]
  |  Branch (22955:34): [Folded, False: 713]
  |  Branch (22955:57): [True: 713, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|    812|        return true;
22960|    812|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIfEEbRT_PKc:
22855|    812|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|    812|        auto new_chars_read = ia.get_elements(&dest);
22859|    812|        chars_read += new_chars_read;
22860|    812|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|    812|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 99, False: 713]
  |  |  ------------------
  ------------------
22861|     99|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|     99|            ++chars_read;
22864|     99|            static_cast<void>(report_eof(context));
22865|     99|            return false;
22866|     99|        }
22867|    713|        return true;
22868|    812|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIfEEmPT_m:
 9778|    812|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|    812|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|    812|        const char* const first = streambuf_access::get_ptr(sb);
 9786|    812|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|    812|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  1.52k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 713, False: 99]
  |  |  |  Branch (1696:94): [True: 713, False: 99]
  |  |  |  Branch (1696:94): [True: 713, False: 0]
  |  |  ------------------
  ------------------
 9788|    713|        {
 9789|    713|            std::memcpy(dest, first, count * sizeof(T));
 9790|    713|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|    713|            return count * sizeof(T);
 9792|    713|        }
 9793|     99|#endif
 9794|     99|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|     99|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|     99|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 99, False: 0]
  |  |  ------------------
  ------------------
 9796|     99|        {
 9797|     99|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|     99|        }
 9799|     99|        return res;
 9800|    812|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIdLb0EEEbRT_:
22948|    534|    {
22949|       |        // read in the original format
22950|       |
22951|    534|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|    534|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 534]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|    534|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 534]
  |  Branch (22955:34): [Folded, False: 442]
  |  Branch (22955:57): [True: 442, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|    534|        return true;
22960|    534|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthIhEEbRSC_PKc:
23198|  20.7k|    {
23199|  20.7k|        NumberType len{};
23200|  20.7k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 20.7k, False: 18]
  |  Branch (23200:35): [True: 20.6k, False: 34]
  |  Branch (23200:62): [True: 20.6k, False: 0]
  ------------------
23201|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIhEEbT_RSC_:
23119|  20.7k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  20.7k|        return get_bytes(len, "string", result);
23130|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthItEEbRSC_PKc:
23198|    924|    {
23199|    924|        NumberType len{};
23200|    924|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 916, False: 8]
  |  Branch (23200:35): [True: 849, False: 67]
  |  Branch (23200:62): [True: 849, False: 0]
  ------------------
23201|    924|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringItEEbT_RSC_:
23119|    916|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    916|        return get_bytes(len, "string", result);
23130|    916|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthIjEEbRSC_PKc:
23198|    426|    {
23199|    426|        NumberType len{};
23200|    426|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 415, False: 11]
  |  Branch (23200:35): [True: 323, False: 92]
  |  Branch (23200:62): [True: 323, False: 0]
  ------------------
23201|    426|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIaLb0EEEbRT_:
22948|  22.2k|    {
22949|       |        // read in the original format
22950|       |
22951|  22.2k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  22.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 22.2k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  22.2k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 22.2k]
  |  Branch (22955:34): [Folded, False: 22.1k]
  |  Branch (22955:57): [True: 22.1k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  22.2k|        return true;
22960|  22.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIaEEbRT_PKc:
22855|  22.2k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  22.2k|        auto new_chars_read = ia.get_elements(&dest);
22859|  22.2k|        chars_read += new_chars_read;
22860|  22.2k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  22.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 22.1k]
  |  |  ------------------
  ------------------
22861|    114|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    114|            ++chars_read;
22864|    114|            static_cast<void>(report_eof(context));
22865|    114|            return false;
22866|    114|        }
22867|  22.1k|        return true;
22868|  22.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIaEEmPT_m:
 9778|  22.2k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  22.2k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  22.2k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  22.2k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  22.2k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  44.3k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 22.1k, False: 114]
  |  |  |  Branch (1696:94): [True: 22.1k, False: 114]
  |  |  |  Branch (1696:94): [True: 22.1k, False: 0]
  |  |  ------------------
  ------------------
 9788|  22.1k|        {
 9789|  22.1k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  22.1k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  22.1k|            return count * sizeof(T);
 9792|  22.1k|        }
 9793|    114|#endif
 9794|    114|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    114|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    114|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 0]
  |  |  ------------------
  ------------------
 9796|    114|        {
 9797|    114|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    114|        }
 9799|    114|        return res;
 9800|  22.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIaEEbT_:
22980|  7.00k|    {
22981|  7.00k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  7.00k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 7.00k, False: 0]
  |  |  ------------------
  ------------------
22982|  7.00k|        {
22983|  7.00k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  7.00k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIsLb0EEEbRT_:
22948|  3.61k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.61k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.61k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.61k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.61k]
  |  Branch (22955:34): [Folded, False: 3.48k]
  |  Branch (22955:57): [True: 3.48k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.61k|        return true;
22960|  3.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIsEEbRT_PKc:
22855|  3.61k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.61k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.61k|        chars_read += new_chars_read;
22860|  3.61k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 135, False: 3.48k]
  |  |  ------------------
  ------------------
22861|    135|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    135|            ++chars_read;
22864|    135|            static_cast<void>(report_eof(context));
22865|    135|            return false;
22866|    135|        }
22867|  3.48k|        return true;
22868|  3.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIsEEmPT_m:
 9778|  3.61k|    {
 9779|       |#if JSON_PRECISE_STREAM_POSITION
 9780|       |        commit_lookahead();
 9781|       |#endif
 9782|  3.61k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9783|       |        // the elements are in the get area: copy them, as sgetn() does, but
 9784|       |        // without the virtual call
 9785|  3.61k|        const char* const first = streambuf_access::get_ptr(sb);
 9786|  3.61k|        const auto available = static_cast<std::size_t>(streambuf_access::get_end(sb) - first);
 9787|  3.61k|        if (JSON_HEDLEY_LIKELY(count * sizeof(T) <= available && count * sizeof(T) <= static_cast<std::size_t>((std::numeric_limits<int>::max)())))
  ------------------
  |  | 1696|  7.10k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 3.48k, False: 135]
  |  |  |  Branch (1696:94): [True: 3.48k, False: 135]
  |  |  |  Branch (1696:94): [True: 3.48k, False: 0]
  |  |  ------------------
  ------------------
 9788|  3.48k|        {
 9789|  3.48k|            std::memcpy(dest, first, count * sizeof(T));
 9790|  3.48k|            streambuf_access::bump(sb, static_cast<int>(count * sizeof(T)));
 9791|  3.48k|            return count * sizeof(T);
 9792|  3.48k|        }
 9793|    135|#endif
 9794|    135|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 9795|    135|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1697|    135|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 135, False: 0]
  |  |  ------------------
  ------------------
 9796|    135|        {
 9797|    135|            is->clear(is->rdstate() | std::ios::eofbit);
 9798|    135|        }
 9799|    135|        return res;
 9800|  3.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIsEEbT_:
22980|  3.23k|    {
22981|  3.23k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  3.23k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 3.23k, False: 0]
  |  |  ------------------
  ------------------
22982|  3.23k|        {
22983|  3.23k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  3.23k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIiLb0EEEbRT_:
22948|  2.26k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.26k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.26k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.26k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.26k]
  |  Branch (22955:34): [Folded, False: 2.13k]
  |  Branch (22955:57): [True: 2.13k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.26k|        return true;
22960|  2.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIlLb0EEEbRT_:
22948|  2.72k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.72k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.72k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.72k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.72k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.72k]
  |  Branch (22955:34): [Folded, False: 2.57k]
  |  Branch (22955:57): [True: 2.57k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.72k|        return true;
22960|  2.72k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE21parse_ubjson_internalEv:
21219|  14.9k|    {
21220|       |        // the key currently being read; hoisted out of the loop so that its
21221|       |        // capacity is reused across elements and across nesting levels
21222|  14.9k|        string_t key;
21223|       |
21224|       |        // the type marker of the value to read next
21225|  14.9k|        char_int_type prefix = get_ignore_noop();
21226|       |
21227|   198k|        while (true)
  ------------------
  |  Branch (21227:16): [True: 190k, Folded]
  ------------------
21228|   190k|        {
21229|   190k|            const std::size_t depth = container_stack.size();
21230|       |
21231|   190k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1697|   190k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 190k]
  |  |  ------------------
  ------------------
21232|      0|            {
21233|      0|                return false;
21234|      0|            }
21235|       |
21236|       |            // the value begun here is complete once it is not inside anything
21237|   190k|            if (container_stack.empty())
  ------------------
  |  Branch (21237:17): [True: 2.70k, False: 188k]
  ------------------
21238|  2.70k|            {
21239|  2.70k|                return true;
21240|  2.70k|            }
21241|       |
21242|       |            // a value was completed rather than a container opened; a
21243|       |            // container that ends at a marker needs the next byte to test
21244|   188k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (21244:17): [True: 94.4k, False: 93.6k]
  |  Branch (21244:52): [True: 62.8k, False: 31.6k]
  ------------------
21245|  62.8k|            {
21246|  62.8k|                get_ignore_noop();
21247|  62.8k|            }
21248|       |
21249|       |            // advance to the next element, closing the containers that ended.
21250|       |            // top is a copy, not a reference: it must stay valid across the
21251|       |            // pop_back() below, which destroys the container_stack element it
21252|       |            // would otherwise alias.
21253|   188k|            for (;;)
21254|   233k|            {
21255|   233k|                const container_frame top = container_stack.back();
21256|       |
21257|   233k|                if (top.remaining != npos)
  ------------------
  |  Branch (21257:21): [True: 37.5k, False: 195k]
  ------------------
21258|  37.5k|                {
21259|  37.5k|                    if (top.remaining != 0)
  ------------------
  |  Branch (21259:25): [True: 33.6k, False: 3.84k]
  ------------------
21260|  33.6k|                    {
21261|  33.6k|                        --container_stack.back().remaining;
21262|  33.6k|                        if (top.is_object)
  ------------------
  |  Branch (21262:29): [True: 789, False: 32.9k]
  ------------------
21263|    789|                        {
21264|    789|                            key.clear();
21265|    789|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1697|  1.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 789]
  |  |  |  Branch (1697:94): [True: 68, False: 721]
  |  |  |  Branch (1697:94): [True: 0, False: 721]
  |  |  ------------------
  ------------------
21266|      0|                            {
21267|      0|                                return false;
21268|      0|                            }
21269|    789|                        }
21270|       |                        // an optimized container gives its elements no marker
21271|  33.6k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (21271:34): [True: 31.5k, False: 2.10k]
  ------------------
21272|  33.6k|                        break;
21273|  33.6k|                    }
21274|  37.5k|                }
21275|       |                // the end marker is compared against a literal rather than
21276|       |                // against a conditional expression, because char_int_type is
21277|       |                // unsigned for some input adapters and MSVC then reports the
21278|       |                // comparison as a signed/unsigned mismatch
21279|   195k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (21279:26): [True: 33.4k, False: 162k]
  |  Branch (21279:26): [True: 143k, False: 52.6k]
  ------------------
21280|   143k|                {
21281|       |                    // a container that ends at a marker is never optimized, so
21282|       |                    // every element carries its own marker; for an object the
21283|       |                    // byte tested above is the first byte of the key
21284|   143k|                    if (top.is_object)
  ------------------
  |  Branch (21284:25): [True: 22.7k, False: 120k]
  ------------------
21285|  22.7k|                    {
21286|  22.7k|                        key.clear();
21287|  22.7k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1697|  44.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 22.7k]
  |  |  |  Branch (1697:94): [True: 989, False: 21.7k]
  |  |  |  Branch (1697:94): [True: 0, False: 21.7k]
  |  |  ------------------
  ------------------
21288|      0|                        {
21289|      0|                            return false;
21290|      0|                        }
21291|  22.7k|                        prefix = get_ignore_noop();
21292|  22.7k|                    }
21293|   120k|                    else
21294|   120k|                    {
21295|   120k|                        prefix = current;
21296|   120k|                    }
21297|   143k|                    break;
21298|   143k|                }
21299|       |
21300|  56.4k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1697|  56.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 56.4k]
  |  |  ------------------
  ------------------
21301|      0|                {
21302|      0|                    return false;
21303|      0|                }
21304|  56.4k|                if (container_stack.empty())
  ------------------
  |  Branch (21304:21): [True: 4.86k, False: 51.5k]
  ------------------
21305|  4.86k|                {
21306|  4.86k|                    return true;
21307|  4.86k|                }
21308|       |                // the container that just ended was an element of the one
21309|       |                // below it, which may need the next byte for its own test
21310|  51.5k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (21310:21): [True: 51.2k, False: 305]
  ------------------
21311|  51.2k|                {
21312|  51.2k|                    get_ignore_noop();
21313|  51.2k|                }
21314|  51.5k|            }
21315|   188k|        }
21316|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE16get_ubjson_valueEi:
21816|   192k|    {
21817|   192k|        switch (prefix)
21818|   192k|        {
21819|  1.30k|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (21819:13): [True: 1.30k, False: 190k]
  ------------------
21820|  1.30k|                return unexpect_eof("value");
21821|       |
21822|  10.6k|            case 'T':  // true
  ------------------
  |  Branch (21822:13): [True: 10.6k, False: 181k]
  ------------------
21823|  10.6k|                return sax->boolean(true);
21824|  5.36k|            case 'F':  // false
  ------------------
  |  Branch (21824:13): [True: 5.36k, False: 186k]
  ------------------
21825|  5.36k|                return sax->boolean(false);
21826|       |
21827|  11.1k|            case 'Z':  // null
  ------------------
  |  Branch (21827:13): [True: 11.1k, False: 181k]
  ------------------
21828|  11.1k|                return sax->null();
21829|       |
21830|  1.14k|            case 'B':  // byte
  ------------------
  |  Branch (21830:13): [True: 1.14k, False: 191k]
  ------------------
21831|  1.14k|            {
21832|  1.14k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21832:21): [True: 0, False: 1.14k]
  ------------------
21833|      0|                {
21834|      0|                    break;
21835|      0|                }
21836|  1.14k|                std::uint8_t number{};
21837|  1.14k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21837:24): [True: 1.13k, False: 6]
  |  Branch (21837:46): [True: 1.13k, False: 0]
  ------------------
21838|  1.14k|            }
21839|       |
21840|  2.93k|            case 'U':
  ------------------
  |  Branch (21840:13): [True: 2.93k, False: 189k]
  ------------------
21841|  2.93k|            {
21842|  2.93k|                std::uint8_t number{};
21843|  2.93k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21843:24): [True: 2.81k, False: 116]
  |  Branch (21843:46): [True: 2.81k, False: 0]
  ------------------
21844|  1.14k|            }
21845|       |
21846|  3.54k|            case 'i':
  ------------------
  |  Branch (21846:13): [True: 3.54k, False: 188k]
  ------------------
21847|  3.54k|            {
21848|  3.54k|                std::int8_t number{};
21849|  3.54k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21849:24): [True: 3.45k, False: 87]
  |  Branch (21849:46): [True: 3.45k, False: 0]
  ------------------
21850|  1.14k|            }
21851|       |
21852|  1.31k|            case 'I':
  ------------------
  |  Branch (21852:13): [True: 1.31k, False: 190k]
  ------------------
21853|  1.31k|            {
21854|  1.31k|                std::int16_t number{};
21855|  1.31k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21855:24): [True: 1.22k, False: 88]
  |  Branch (21855:46): [True: 1.22k, False: 0]
  ------------------
21856|  1.14k|            }
21857|       |
21858|    912|            case 'l':
  ------------------
  |  Branch (21858:13): [True: 912, False: 191k]
  ------------------
21859|    912|            {
21860|    912|                std::int32_t number{};
21861|    912|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21861:24): [True: 820, False: 92]
  |  Branch (21861:46): [True: 820, False: 0]
  ------------------
21862|  1.14k|            }
21863|       |
21864|  1.45k|            case 'L':
  ------------------
  |  Branch (21864:13): [True: 1.45k, False: 190k]
  ------------------
21865|  1.45k|            {
21866|  1.45k|                std::int64_t number{};
21867|  1.45k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21867:24): [True: 1.36k, False: 94]
  |  Branch (21867:46): [True: 1.36k, False: 0]
  ------------------
21868|  1.14k|            }
21869|       |
21870|  1.03k|            case 'u':
  ------------------
  |  Branch (21870:13): [True: 1.03k, False: 191k]
  ------------------
21871|  1.03k|            {
21872|  1.03k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21872:21): [True: 0, False: 1.03k]
  ------------------
21873|      0|                {
21874|      0|                    break;
21875|      0|                }
21876|  1.03k|                std::uint16_t number{};
21877|  1.03k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21877:24): [True: 937, False: 93]
  |  Branch (21877:46): [True: 937, False: 0]
  ------------------
21878|  1.03k|            }
21879|       |
21880|    925|            case 'm':
  ------------------
  |  Branch (21880:13): [True: 925, False: 191k]
  ------------------
21881|    925|            {
21882|    925|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21882:21): [True: 0, False: 925]
  ------------------
21883|      0|                {
21884|      0|                    break;
21885|      0|                }
21886|    925|                std::uint32_t number{};
21887|    925|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21887:24): [True: 863, False: 62]
  |  Branch (21887:46): [True: 863, False: 0]
  ------------------
21888|    925|            }
21889|       |
21890|  2.77k|            case 'M':
  ------------------
  |  Branch (21890:13): [True: 2.77k, False: 189k]
  ------------------
21891|  2.77k|            {
21892|  2.77k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21892:21): [True: 0, False: 2.77k]
  ------------------
21893|      0|                {
21894|      0|                    break;
21895|      0|                }
21896|  2.77k|                std::uint64_t number{};
21897|  2.77k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21897:24): [True: 2.68k, False: 88]
  |  Branch (21897:46): [True: 2.68k, False: 0]
  ------------------
21898|  2.77k|            }
21899|       |
21900|  29.6k|            case 'h':
  ------------------
  |  Branch (21900:13): [True: 29.6k, False: 162k]
  ------------------
21901|  29.6k|            {
21902|  29.6k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21902:21): [True: 0, False: 29.6k]
  ------------------
21903|      0|                {
21904|      0|                    break;
21905|      0|                }
21906|  29.6k|                return get_half_float(true);
21907|  29.6k|            }
21908|       |
21909|    812|            case 'd':
  ------------------
  |  Branch (21909:13): [True: 812, False: 191k]
  ------------------
21910|    812|            {
21911|    812|                float number{};
21912|    812|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21912:24): [True: 713, False: 99]
  |  Branch (21912:46): [True: 713, False: 0]
  ------------------
21913|  29.6k|            }
21914|       |
21915|    534|            case 'D':
  ------------------
  |  Branch (21915:13): [True: 534, False: 191k]
  ------------------
21916|    534|            {
21917|    534|                double number{};
21918|    534|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21918:24): [True: 442, False: 92]
  |  Branch (21918:46): [True: 442, False: 0]
  ------------------
21919|  29.6k|            }
21920|       |
21921|  7.55k|            case 'H':
  ------------------
  |  Branch (21921:13): [True: 7.55k, False: 184k]
  ------------------
21922|  7.55k|            {
21923|  7.55k|                return get_ubjson_high_precision_number();
21924|  29.6k|            }
21925|       |
21926|  8.48k|            case 'C':  // char
  ------------------
  |  Branch (21926:13): [True: 8.48k, False: 183k]
  ------------------
21927|  8.48k|            {
21928|  8.48k|                get();
21929|  8.48k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|  8.48k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 8.48k]
  |  |  ------------------
  ------------------
21930|      0|                {
21931|      0|                    return false;
21932|      0|                }
21933|  8.48k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|  8.48k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2, False: 8.48k]
  |  |  ------------------
  ------------------
21934|      2|                {
21935|      2|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
21936|      2|                }
21937|  8.48k|                string_t s(1, static_cast<typename string_t::value_type>(current));
21938|  8.48k|                return sax->string(s);
21939|  8.48k|            }
21940|       |
21941|  6.10k|            case 'S':  // string
  ------------------
  |  Branch (21941:13): [True: 6.10k, False: 186k]
  ------------------
21942|  6.10k|            {
21943|  6.10k|                string_t s;
21944|  6.10k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (21944:24): [True: 5.94k, False: 165]
  |  Branch (21944:48): [True: 5.94k, False: 0]
  ------------------
21945|  8.48k|            }
21946|       |
21947|  80.0k|            case '[':  // array
  ------------------
  |  Branch (21947:13): [True: 80.0k, False: 112k]
  ------------------
21948|  80.0k|                return get_ubjson_array();
21949|       |
21950|  14.3k|            case '{':  // object
  ------------------
  |  Branch (21950:13): [True: 14.3k, False: 177k]
  ------------------
21951|  14.3k|                return get_ubjson_object();
21952|       |
21953|    150|            default: // anything else
  ------------------
  |  Branch (21953:13): [True: 150, False: 192k]
  ------------------
21954|    150|                break;
21955|   192k|        }
21956|    150|        return unexpected_byte("invalid byte", "value");
21957|   192k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE32get_ubjson_high_precision_numberEv:
22198|  7.55k|    {
22199|       |        // get the size of the following number string
22200|  7.55k|        std::size_t size{};
22201|  7.55k|        bool no_ndarray = true;
22202|  7.55k|        auto res = get_ubjson_size_value(size, no_ndarray);
22203|  7.55k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1697|  7.55k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.55k]
  |  |  ------------------
  ------------------
22204|      0|        {
22205|      0|            return res;
22206|      0|        }
22207|       |
22208|       |        // get number string
22209|  7.55k|        std::vector<char> number_vector;
22210|   101k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (22210:33): [True: 94.3k, False: 7.55k]
  ------------------
22211|  94.3k|        {
22212|  94.3k|            get();
22213|  94.3k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  94.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 94.3k]
  |  |  ------------------
  ------------------
22214|      0|            {
22215|      0|                return false;
22216|      0|            }
22217|       |            // the lexer would stop at a NUL and accept the digits before it
22218|  94.3k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1697|  94.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 4, False: 94.3k]
  |  |  ------------------
  ------------------
22219|      4|            {
22220|      4|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22221|      4|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
22222|      4|            }
22223|  94.3k|            number_vector.push_back(static_cast<char>(current));
22224|  94.3k|        }
22225|       |
22226|       |        // parse number string
22227|  7.55k|        using ia_type = decltype(detail::input_adapter(number_vector));
22228|  7.55k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
22229|  7.55k|        const auto result_number = number_lexer.scan();
22230|  7.55k|        const auto number_string = number_lexer.get_token_string();
22231|  7.55k|        const auto result_remainder = number_lexer.scan();
22232|       |
22233|  7.55k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
22234|       |
22235|  7.55k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1697|  7.55k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1.33k, False: 6.21k]
  |  |  ------------------
  ------------------
22236|  1.33k|        {
22237|  1.33k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22238|  1.33k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22239|  1.33k|        }
22240|       |
22241|  6.21k|        switch (result_number)
22242|  6.21k|        {
22243|    310|            case token_type::value_integer:
  ------------------
  |  Branch (22243:13): [True: 310, False: 5.90k]
  ------------------
22244|    310|                return sax->number_integer(number_lexer.get_number_integer());
22245|  1.73k|            case token_type::value_unsigned:
  ------------------
  |  Branch (22245:13): [True: 1.73k, False: 4.48k]
  ------------------
22246|  1.73k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
22247|  3.20k|            case token_type::value_float:
  ------------------
  |  Branch (22247:13): [True: 3.20k, False: 3.01k]
  ------------------
22248|  3.20k|            {
22249|  3.20k|                const auto parsed_float = number_lexer.get_number_float();
22250|  3.20k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1697|  3.20k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 3.09k]
  |  |  ------------------
  ------------------
22251|    114|                {
22252|    114|                    return sax->parse_error(
22253|    114|                               chars_read,
22254|    114|                               number_string,
22255|    114|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
22256|    114|                }
22257|       |                // number_string is a std::string, while the SAX interface takes a
22258|       |                // string_t; convert explicitly, as the two are only implicitly
22259|       |                // convertible for some string types
22260|  3.09k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
22261|  3.20k|            }
22262|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (22262:13): [True: 0, False: 6.21k]
  ------------------
22263|      1|            case token_type::literal_true:
  ------------------
  |  Branch (22263:13): [True: 1, False: 6.21k]
  ------------------
22264|      2|            case token_type::literal_false:
  ------------------
  |  Branch (22264:13): [True: 1, False: 6.21k]
  ------------------
22265|      2|            case token_type::literal_null:
  ------------------
  |  Branch (22265:13): [True: 0, False: 6.21k]
  ------------------
22266|      4|            case token_type::value_string:
  ------------------
  |  Branch (22266:13): [True: 2, False: 6.21k]
  ------------------
22267|      6|            case token_type::begin_array:
  ------------------
  |  Branch (22267:13): [True: 2, False: 6.21k]
  ------------------
22268|      7|            case token_type::begin_object:
  ------------------
  |  Branch (22268:13): [True: 1, False: 6.21k]
  ------------------
22269|      8|            case token_type::end_array:
  ------------------
  |  Branch (22269:13): [True: 1, False: 6.21k]
  ------------------
22270|      9|            case token_type::end_object:
  ------------------
  |  Branch (22270:13): [True: 1, False: 6.21k]
  ------------------
22271|     10|            case token_type::name_separator:
  ------------------
  |  Branch (22271:13): [True: 1, False: 6.21k]
  ------------------
22272|     11|            case token_type::value_separator:
  ------------------
  |  Branch (22272:13): [True: 1, False: 6.21k]
  ------------------
22273|    566|            case token_type::parse_error:
  ------------------
  |  Branch (22273:13): [True: 555, False: 5.65k]
  ------------------
22274|    612|            case token_type::end_of_input:
  ------------------
  |  Branch (22274:13): [True: 46, False: 6.16k]
  ------------------
22275|    612|            case token_type::literal_or_value:
  ------------------
  |  Branch (22275:13): [True: 0, False: 6.21k]
  ------------------
22276|    612|            default:
  ------------------
  |  Branch (22276:13): [True: 0, False: 6.21k]
  ------------------
22277|    612|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22278|    612|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22279|  6.21k|        }
22280|  6.21k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE21get_ubjson_size_valueERmRbii:
21560|  39.7k|    {
21561|  39.7k|        if (prefix == 0)
  ------------------
  |  Branch (21561:13): [True: 22.2k, False: 17.4k]
  ------------------
21562|  22.2k|        {
21563|  22.2k|            prefix = get_ignore_noop();
21564|  22.2k|        }
21565|       |
21566|  39.7k|        switch (prefix)
21567|  39.7k|        {
21568|  12.1k|            case 'U':
  ------------------
  |  Branch (21568:13): [True: 12.1k, False: 27.5k]
  ------------------
21569|  12.1k|            {
21570|  12.1k|                std::uint8_t number{};
21571|  12.1k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  12.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 12.1k]
  |  |  ------------------
  ------------------
21572|      0|                {
21573|      0|                    return false;
21574|      0|                }
21575|  12.1k|                result = static_cast<std::size_t>(number);
21576|  12.1k|                return true;
21577|  12.1k|            }
21578|       |
21579|  13.7k|            case 'i':
  ------------------
  |  Branch (21579:13): [True: 13.7k, False: 25.9k]
  ------------------
21580|  13.7k|                return get_ubjson_signed_count<std::int8_t>(result);
21581|       |
21582|  1.61k|            case 'I':
  ------------------
  |  Branch (21582:13): [True: 1.61k, False: 38.1k]
  ------------------
21583|  1.61k|                return get_ubjson_signed_count<std::int16_t>(result);
21584|       |
21585|    849|            case 'l':
  ------------------
  |  Branch (21585:13): [True: 849, False: 38.8k]
  ------------------
21586|    849|                return get_ubjson_signed_count<std::int32_t>(result);
21587|       |
21588|    744|            case 'L':
  ------------------
  |  Branch (21588:13): [True: 744, False: 38.9k]
  ------------------
21589|    744|                return get_ubjson_signed_count<std::int64_t>(result);
21590|       |
21591|  1.28k|            case 'u':
  ------------------
  |  Branch (21591:13): [True: 1.28k, False: 38.4k]
  ------------------
21592|  1.28k|            {
21593|  1.28k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21593:21): [True: 0, False: 1.28k]
  ------------------
21594|      0|                {
21595|      0|                    break;
21596|      0|                }
21597|  1.28k|                std::uint16_t number{};
21598|  1.28k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.28k]
  |  |  ------------------
  ------------------
21599|      0|                {
21600|      0|                    return false;
21601|      0|                }
21602|  1.28k|                result = static_cast<std::size_t>(number);
21603|  1.28k|                return true;
21604|  1.28k|            }
21605|       |
21606|    772|            case 'm':
  ------------------
  |  Branch (21606:13): [True: 772, False: 38.9k]
  ------------------
21607|    772|            {
21608|    772|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21608:21): [True: 0, False: 772]
  ------------------
21609|      0|                {
21610|      0|                    break;
21611|      0|                }
21612|    772|                std::uint32_t number{};
21613|    772|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    772|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 772]
  |  |  ------------------
  ------------------
21614|      0|                {
21615|      0|                    return false;
21616|      0|                }
21617|    772|                return store_ubjson_count(conditional_static_cast<std::size_t>(number), result);
21618|    772|            }
21619|       |
21620|  1.11k|            case 'M':
  ------------------
  |  Branch (21620:13): [True: 1.11k, False: 38.6k]
  ------------------
21621|  1.11k|            {
21622|  1.11k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21622:21): [True: 0, False: 1.11k]
  ------------------
21623|      0|                {
21624|      0|                    break;
21625|      0|                }
21626|  1.11k|                std::uint64_t number{};
21627|  1.11k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
21628|      0|                {
21629|      0|                    return false;
21630|      0|                }
21631|  1.11k|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (21631:21): [True: 0, False: 1.11k]
  ------------------
21632|      0|                {
21633|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21634|      0|                }
21635|  1.11k|                return store_ubjson_count(detail::conditional_static_cast<std::size_t>(number), result);
21636|  1.11k|            }
21637|       |
21638|  7.13k|            case '[':
  ------------------
  |  Branch (21638:13): [True: 7.13k, False: 32.6k]
  ------------------
21639|  7.13k|            {
21640|  7.13k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21640:21): [True: 0, False: 7.13k]
  ------------------
21641|      0|                {
21642|      0|                    break;
21643|      0|                }
21644|  7.13k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (21644:21): [True: 11, False: 7.11k]
  ------------------
21645|     11|                {
21646|     11|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
21647|     11|                }
21648|  7.11k|                std::vector<size_t> dim;
21649|  7.11k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1697|  7.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.11k]
  |  |  ------------------
  ------------------
21650|      0|                {
21651|      0|                    return false;
21652|      0|                }
21653|  7.11k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (21653:21): [True: 1.12k, False: 5.99k]
  |  Branch (21653:41): [True: 2.11k, False: 3.88k]
  |  Branch (21653:60): [True: 135, False: 1.98k]
  ------------------
21654|    728|                {
21655|    728|                    result = dim.at(dim.size() - 1);
21656|    728|                    return true;
21657|    728|                }
21658|  6.39k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (21658:21): [True: 3.30k, False: 3.08k]
  ------------------
21659|  3.30k|                {
21660|  3.30k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (21660:33): [True: 9.36k, False: 3.14k]
  ------------------
21661|  9.36k|                    {
21662|  9.36k|                        if ( i == 0 )
  ------------------
  |  Branch (21662:30): [True: 156, False: 9.20k]
  ------------------
21663|    156|                        {
21664|    156|                            result = 0;
21665|    156|                            return true;
21666|    156|                        }
21667|  9.36k|                    }
21668|       |
21669|  3.14k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1697|  3.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
21670|      0|                    {
21671|      0|                        return false;
21672|      0|                    }
21673|       |
21674|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
21675|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
21676|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
21677|  3.14k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (21677:25): [True: 2.99k, False: 157]
  ------------------
21678|  2.99k|                    {
21679|       |                        // every optimized type marker is_valid_optimized_type() accepts for BJData has a name
21680|  2.99k|                        const char* type_name = bjd_type_name(ndarray_dtype);
21681|  2.99k|                        JSON_ASSERT(type_name != nullptr);
  ------------------
  |  | 2643|  2.99k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (21681:25): [True: 2.99k, False: 0]
  ------------------
21682|       |
21683|  2.99k|                        string_t type_key = "_ArrayType_";
21684|  2.99k|                        string_t type = type_name; // sax->string() takes a reference
21685|  2.99k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1697|  5.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.99k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.99k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.99k]
  |  |  ------------------
  ------------------
21686|      0|                        {
21687|      0|                            return false;
21688|      0|                        }
21689|  2.99k|                    }
21690|       |
21691|  3.14k|                    string_t key = "_ArraySize_";
21692|  3.14k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1697|  6.29k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.14k]
  |  |  |  Branch (1697:94): [True: 0, False: 3.14k]
  |  |  |  Branch (1697:94): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
21693|      0|                    {
21694|      0|                        return false;
21695|      0|                    }
21696|  3.14k|                    result = 1;
21697|  3.14k|                    for (auto i : dim)
  ------------------
  |  Branch (21697:33): [True: 8.51k, False: 3.09k]
  ------------------
21698|  8.51k|                    {
21699|       |                        // Pre-multiplication overflow check: since the loop above
21700|       |                        // already rejected any zero dimension, i is always > 0
21701|       |                        // here, so result > SIZE_MAX/i means result*i would
21702|       |                        // overflow. This check must happen before multiplication
21703|       |                        // since overflow detection after the fact is unreliable,
21704|       |                        // as modular arithmetic can produce any value, not just 0
21705|       |                        // or SIZE_MAX.
21706|  8.51k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1697|  8.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 51, False: 8.46k]
  |  |  ------------------
  ------------------
21707|     51|                        {
21708|     51|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21709|     51|                        }
21710|  8.46k|                        result *= i;
21711|       |                        // the pre-check above already rules out result becoming 0
21712|       |                        // by overflow; the only value it cannot rule out is an
21713|       |                        // exact match with npos, the sentinel reserved for an
21714|       |                        // unknown-size container (see get_ubjson_size_type())
21715|  8.46k|                        if (result == npos)
  ------------------
  |  Branch (21715:29): [True: 0, False: 8.46k]
  ------------------
21716|      0|                        {
21717|      0|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21718|      0|                        }
21719|  8.46k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1697|  8.46k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 8.46k]
  |  |  ------------------
  ------------------
21720|      0|                        {
21721|      0|                            return false;
21722|      0|                        }
21723|  8.46k|                    }
21724|  3.09k|                    is_ndarray = true;
21725|  3.09k|                    return sax->end_array();
21726|  3.14k|                }
21727|  3.08k|                result = 0;
21728|  3.08k|                return true;
21729|  6.39k|            }
21730|       |
21731|    259|            default:
  ------------------
  |  Branch (21731:13): [True: 259, False: 39.4k]
  ------------------
21732|    259|                break;
21733|  39.7k|        }
21734|    259|        return length_type_error(" after '#'", "size");
21735|  39.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIaEEbRm:
21526|  13.7k|    {
21527|  13.7k|        SignedType number{};
21528|  13.7k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|  13.7k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 6, False: 13.7k]
  |  |  ------------------
  ------------------
21533|      6|        {
21534|      6|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|      6|        }
21536|  13.7k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  13.7k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  13.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIsEEbRm:
21526|  1.61k|    {
21527|  1.61k|        SignedType number{};
21528|  1.61k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|  1.61k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 7, False: 1.61k]
  |  |  ------------------
  ------------------
21533|      7|        {
21534|      7|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|      7|        }
21536|  1.61k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  1.61k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  1.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIiEEbRm:
21526|    849|    {
21527|    849|        SignedType number{};
21528|    849|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    849|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 849]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|    849|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|    849|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 815]
  |  |  ------------------
  ------------------
21533|     34|        {
21534|     34|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     34|        }
21536|    815|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|    815|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 815]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|    815|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|    815|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIlEEbRm:
21526|    744|    {
21527|    744|        SignedType number{};
21528|    744|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    744|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 744]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|    744|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|    744|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 67, False: 677]
  |  |  ------------------
  ------------------
21533|     67|        {
21534|     67|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     67|        }
21536|    677|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|    677|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 677]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|    677|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|    677|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18store_ubjson_countEmRm:
21501|  18.5k|    {
21502|  18.5k|        if (JSON_HEDLEY_UNLIKELY(count == npos))
  ------------------
  |  | 1697|  18.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1, False: 18.5k]
  |  |  ------------------
  ------------------
21503|      1|        {
21504|      1|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21505|      1|        }
21506|  18.5k|        result = count;
21507|  18.5k|        return true;
21508|  18.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
21439|  7.11k|    {
21440|  7.11k|        std::pair<std::size_t, char_int_type> size_and_type;
21441|  7.11k|        size_t dimlen = 0;
21442|  7.11k|        bool no_ndarray = true;
21443|       |
21444|  7.11k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1697|  7.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.11k]
  |  |  ------------------
  ------------------
21445|      0|        {
21446|      0|            return false;
21447|      0|        }
21448|       |
21449|  7.11k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (21449:13): [True: 1.19k, False: 5.92k]
  ------------------
21450|  1.19k|        {
21451|  1.19k|            if (size_and_type.second != 0)
  ------------------
  |  Branch (21451:17): [True: 819, False: 380]
  ------------------
21452|    819|            {
21453|  8.76k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21453:41): [True: 7.94k, False: 819]
  ------------------
21454|  7.94k|                {
21455|  7.94k|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1697|  7.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.94k]
  |  |  ------------------
  ------------------
21456|      0|                    {
21457|      0|                        return false;
21458|      0|                    }
21459|  7.94k|                    dim.push_back(dimlen);
21460|  7.94k|                }
21461|    819|            }
21462|    380|            else
21463|    380|            {
21464|  1.26k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21464:41): [True: 884, False: 380]
  ------------------
21465|    884|                {
21466|    884|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1697|    884|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 884]
  |  |  ------------------
  ------------------
21467|      0|                    {
21468|      0|                        return false;
21469|      0|                    }
21470|    884|                    dim.push_back(dimlen);
21471|    884|                }
21472|    380|            }
21473|  1.19k|        }
21474|  5.92k|        else
21475|  5.92k|        {
21476|  15.4k|            while (current != ']')
  ------------------
  |  Branch (21476:20): [True: 9.50k, False: 5.92k]
  ------------------
21477|  9.50k|            {
21478|  9.50k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1697|  9.50k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 9.50k]
  |  |  ------------------
  ------------------
21479|      0|                {
21480|      0|                    return false;
21481|      0|                }
21482|  9.50k|                dim.push_back(dimlen);
21483|  9.50k|                get_ignore_noop();
21484|  9.50k|            }
21485|  5.92k|        }
21486|  7.11k|        return true;
21487|  7.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE20get_ubjson_size_typeERNS4_4pairImiEEb:
21749|   101k|    {
21750|   101k|        result.first = npos; // size
21751|   101k|        result.second = 0; // type
21752|       |        // seed the flag with the caller's context: inside an ndarray dimension
21753|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
21754|       |        // rejects it up front instead of reading it and reporting afterwards.
21755|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
21756|       |        // another level, which overflowed the stack (see #5104).
21757|   101k|        bool is_ndarray = inside_ndarray;
21758|       |
21759|   101k|        get_ignore_noop();
21760|       |
21761|   101k|        if (current == '$')
  ------------------
  |  Branch (21761:13): [True: 10.8k, False: 90.6k]
  ------------------
21762|  10.8k|        {
21763|  10.8k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
21764|  10.8k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 10.8k]
  |  |  ------------------
  ------------------
21765|      0|            {
21766|      0|                return false;
21767|      0|            }
21768|       |
21769|       |            // validate the type marker up front: otherwise it would only be
21770|       |            // checked when an element is read, and a container with count 0
21771|       |            // would accept any marker
21772|  10.8k|            if (JSON_HEDLEY_UNLIKELY(!is_valid_optimized_type(result.second)))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 16, False: 10.8k]
  |  |  ------------------
  ------------------
21773|     16|            {
21774|     16|                return optimized_type_error();
21775|     16|            }
21776|       |
21777|  10.8k|            get_ignore_noop();
21778|  10.8k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 10.7k]
  |  |  ------------------
  ------------------
21779|    103|            {
21780|    103|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|    103|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 103]
  |  |  ------------------
  ------------------
21781|      0|                {
21782|      0|                    return false;
21783|      0|                }
21784|    103|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
21785|    103|            }
21786|       |
21787|  10.7k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
21788|       |            // an ndarray was read here only if the flag flipped; when it was
21789|       |            // seeded true, get_ubjson_size_value() already rejected the nested
21790|       |            // dimension vector
21791|  10.7k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21791:17): [True: 3.80k, False: 6.90k]
  |  Branch (21791:31): [True: 2.98k, False: 819]
  ------------------
21792|  2.98k|            {
21793|  2.98k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
21794|  2.98k|            }
21795|  10.7k|            return is_error;
21796|  10.8k|        }
21797|       |
21798|  90.6k|        if (current == '#')
  ------------------
  |  Branch (21798:13): [True: 3.13k, False: 87.5k]
  ------------------
21799|  3.13k|        {
21800|  3.13k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
21801|  3.13k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21801:17): [True: 489, False: 2.65k]
  |  Branch (21801:31): [True: 109, False: 380]
  ------------------
21802|    109|            {
21803|    109|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
21804|    109|            }
21805|  3.03k|            return is_error;
21806|  3.13k|        }
21807|       |
21808|  87.5k|        return true;
21809|  90.6k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23is_valid_optimized_typeEi:
23505|  10.8k|    {
23506|  10.8k|        switch (marker)
23507|  10.8k|        {
23508|    825|            case 'i':
  ------------------
  |  Branch (23508:13): [True: 825, False: 9.99k]
  ------------------
23509|  1.57k|            case 'U':
  ------------------
  |  Branch (23509:13): [True: 752, False: 10.0k]
  ------------------
23510|  2.11k|            case 'I':
  ------------------
  |  Branch (23510:13): [True: 536, False: 10.2k]
  ------------------
23511|  2.78k|            case 'l':
  ------------------
  |  Branch (23511:13): [True: 669, False: 10.1k]
  ------------------
23512|  3.27k|            case 'L':
  ------------------
  |  Branch (23512:13): [True: 489, False: 10.3k]
  ------------------
23513|  3.77k|            case 'd':
  ------------------
  |  Branch (23513:13): [True: 504, False: 10.3k]
  ------------------
23514|  4.35k|            case 'D':
  ------------------
  |  Branch (23514:13): [True: 580, False: 10.2k]
  ------------------
23515|  4.78k|            case 'C':
  ------------------
  |  Branch (23515:13): [True: 427, False: 10.3k]
  ------------------
23516|  4.78k|                return true;
23517|      1|            case 'Z':
  ------------------
  |  Branch (23517:13): [True: 1, False: 10.8k]
  ------------------
23518|      2|            case 'N':
  ------------------
  |  Branch (23518:13): [True: 1, False: 10.8k]
  ------------------
23519|      3|            case 'T':
  ------------------
  |  Branch (23519:13): [True: 1, False: 10.8k]
  ------------------
23520|      4|            case 'F':
  ------------------
  |  Branch (23520:13): [True: 1, False: 10.8k]
  ------------------
23521|      5|            case 'H':
  ------------------
  |  Branch (23521:13): [True: 1, False: 10.8k]
  ------------------
23522|      6|            case 'S':
  ------------------
  |  Branch (23522:13): [True: 1, False: 10.8k]
  ------------------
23523|      8|            case '[':
  ------------------
  |  Branch (23523:13): [True: 2, False: 10.8k]
  ------------------
23524|      9|            case '{':
  ------------------
  |  Branch (23524:13): [True: 1, False: 10.8k]
  ------------------
23525|      9|                return input_format != input_format_t::bjdata;
23526|  3.52k|            case 'B':
  ------------------
  |  Branch (23526:13): [True: 3.52k, False: 7.29k]
  ------------------
23527|  4.09k|            case 'u':
  ------------------
  |  Branch (23527:13): [True: 572, False: 10.2k]
  ------------------
23528|  4.56k|            case 'm':
  ------------------
  |  Branch (23528:13): [True: 472, False: 10.3k]
  ------------------
23529|  5.17k|            case 'M':
  ------------------
  |  Branch (23529:13): [True: 610, False: 10.2k]
  ------------------
23530|  6.02k|            case 'h':
  ------------------
  |  Branch (23530:13): [True: 847, False: 9.97k]
  ------------------
23531|  6.02k|                return input_format == input_format_t::bjdata;
23532|      7|            default:
  ------------------
  |  Branch (23532:13): [True: 7, False: 10.8k]
  ------------------
23533|      7|                return false;
23534|  10.8k|        }
23535|  10.8k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE20optimized_type_errorEv:
23366|     16|    {
23367|     16|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
23368|     16|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13bjd_type_nameEi:
23546|  2.99k|    {
23547|  2.99k|        switch (marker)
23548|  2.99k|        {
23549|    401|            case 'B':
  ------------------
  |  Branch (23549:13): [True: 401, False: 2.58k]
  ------------------
23550|    401|                return "byte";
23551|    230|            case 'C':
  ------------------
  |  Branch (23551:13): [True: 230, False: 2.76k]
  ------------------
23552|    230|                return "char";
23553|    180|            case 'D':
  ------------------
  |  Branch (23553:13): [True: 180, False: 2.81k]
  ------------------
23554|    180|                return "double";
23555|    220|            case 'I':
  ------------------
  |  Branch (23555:13): [True: 220, False: 2.77k]
  ------------------
23556|    220|                return "int16";
23557|    143|            case 'L':
  ------------------
  |  Branch (23557:13): [True: 143, False: 2.84k]
  ------------------
23558|    143|                return "int64";
23559|    122|            case 'M':
  ------------------
  |  Branch (23559:13): [True: 122, False: 2.86k]
  ------------------
23560|    122|                return "uint64";
23561|    292|            case 'U':
  ------------------
  |  Branch (23561:13): [True: 292, False: 2.69k]
  ------------------
23562|    292|                return "uint8";
23563|    180|            case 'd':
  ------------------
  |  Branch (23563:13): [True: 180, False: 2.81k]
  ------------------
23564|    180|                return "single";
23565|    205|            case 'h':
  ------------------
  |  Branch (23565:13): [True: 205, False: 2.78k]
  ------------------
23566|    205|                return "half";
23567|    387|            case 'i':
  ------------------
  |  Branch (23567:13): [True: 387, False: 2.60k]
  ------------------
23568|    387|                return "int8";
23569|    222|            case 'l':
  ------------------
  |  Branch (23569:13): [True: 222, False: 2.76k]
  ------------------
23570|    222|                return "int32";
23571|    192|            case 'm':
  ------------------
  |  Branch (23571:13): [True: 192, False: 2.79k]
  ------------------
23572|    192|                return "uint32";
23573|    216|            case 'u':
  ------------------
  |  Branch (23573:13): [True: 216, False: 2.77k]
  ------------------
23574|    216|                return "uint16";
23575|      0|            default:
  ------------------
  |  Branch (23575:13): [True: 0, False: 2.99k]
  ------------------
23576|      0|                return nullptr;
23577|  2.99k|        }
23578|  2.99k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17length_type_errorEPKcSM_:
23433|    329|    {
23434|    329|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (23434:29): [True: 329, False: 0]
  ------------------
23435|    329|        return last_byte_error(exception_id::invalid_string_or_size,
23436|    329|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
23437|    329|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE16get_ubjson_arrayEv:
22063|  80.0k|    {
22064|  80.0k|        std::pair<std::size_t, char_int_type> size_and_type;
22065|  80.0k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  80.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 80.0k]
  |  |  ------------------
  ------------------
22066|      0|        {
22067|      0|            return false;
22068|      0|        }
22069|       |
22070|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
22071|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
22072|       |
22073|  80.0k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22073:13): [True: 2.98k, False: 77.1k]
  ------------------
22074|  2.98k|        {
22075|  2.98k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
22076|       |
22077|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
22078|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
22079|       |            // that determines size_and_type.first is read, so it is emitted first there to
22080|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
22081|       |            // 'C' elements are read as unsigned bytes, but BJData limits a char to 0..127
22082|  2.98k|            const bool nd_is_char = size_and_type.second == 'C';
22083|  2.98k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (22083:17): [True: 230, False: 2.75k]
  |  Branch (22083:48): [True: 401, False: 2.35k]
  ------------------
22084|    631|            {
22085|    631|                size_and_type.second = 'U';
22086|    631|            }
22087|       |
22088|  2.98k|            string_t key = "_ArrayData_";
22089|  2.98k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1697|  5.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.98k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.98k]
  |  |  |  Branch (1697:94): [True: 1, False: 2.98k]
  |  |  ------------------
  ------------------
22090|      0|            {
22091|      0|                return false;
22092|      0|            }
22093|       |
22094|       |            // the numbers that are in the input, in one loop; the rest (if
22095|       |            // the input ends early) one by one below
22096|  2.98k|            std::size_t remaining = size_and_type.first;
22097|  2.98k|            if (!nd_is_char && JSON_HEDLEY_UNLIKELY(!parse_ubjson_typed_run(remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {})))
  ------------------
  |  | 1697|  2.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.75k]
  |  |  ------------------
  ------------------
  |  Branch (22097:17): [True: 2.75k, False: 231]
  |  Branch (22097:17): [True: 0, False: 2.98k]
  ------------------
22098|      0|            {
22099|      0|                return false;
22100|      0|            }
22101|       |
22102|  5.39k|            for (std::size_t i = size_and_type.first - remaining; i < size_and_type.first; ++i)
  ------------------
  |  Branch (22102:67): [True: 2.41k, False: 2.98k]
  ------------------
22103|  2.41k|            {
22104|  2.41k|                if (nd_is_char)
  ------------------
  |  Branch (22104:21): [True: 979, False: 1.43k]
  ------------------
22105|    979|                {
22106|    979|                    get();
22107|    979|                    if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|    979|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 979]
  |  |  ------------------
  ------------------
22108|      0|                    {
22109|      0|                        return false;
22110|      0|                    }
22111|    979|                    if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|    979|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 974]
  |  |  ------------------
  ------------------
22112|      5|                    {
22113|      5|                        return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
22114|      5|                    }
22115|    974|                    if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(current))))
  ------------------
  |  | 1697|    974|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 974]
  |  |  ------------------
  ------------------
22116|      0|                    {
22117|      0|                        return false;
22118|      0|                    }
22119|    974|                    continue;
22120|    974|                }
22121|       |
22122|  1.43k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1697|  1.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.43k]
  |  |  ------------------
  ------------------
22123|      0|                {
22124|      0|                    return false;
22125|      0|                }
22126|  1.43k|            }
22127|       |
22128|  2.98k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (22128:21): [True: 2.80k, False: 177]
  |  Branch (22128:41): [True: 2.80k, False: 0]
  ------------------
22129|  2.98k|        }
22130|       |
22131|       |        // If BJData type marker is 'B' decode as binary
22132|  77.1k|        if (size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (22132:13): [True: 8.57k, False: 68.5k]
  |  Branch (22132:44): [True: 3.04k, False: 5.53k]
  ------------------
22133|  3.04k|        {
22134|  3.04k|            binary_t result;
22135|  3.04k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (22135:20): [True: 2.91k, False: 129]
  |  Branch (22135:63): [True: 2.91k, False: 0]
  ------------------
22136|  3.04k|        }
22137|       |
22138|  74.0k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22138:13): [True: 5.53k, False: 68.5k]
  ------------------
22139|  5.53k|        {
22140|       |            // reading an element of a valueless type consumes no input, so the
22141|       |            // declared count alone decides how much is allocated; the check is
22142|       |            // made before the start event so that no container is opened that
22143|       |            // is then abandoned. See @ref max_valueless_container_size.
22144|  5.53k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1697|  27.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
22145|  5.53k|                                     && size_and_type.first > max_valueless_container_size))
22146|      0|            {
22147|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
22148|      0|            }
22149|       |
22150|  5.53k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1697|  5.53k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.53k]
  |  |  ------------------
  ------------------
22151|      0|            {
22152|      0|                return false;
22153|      0|            }
22154|       |
22155|  5.53k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (22155:17): [True: 0, False: 5.53k]
  ------------------
22156|      0|            {
22157|       |                // a no-op is not a value, so a container of them holds none;
22158|       |                // the declared size has already been passed to the SAX parser
22159|      0|                container_stack.back().remaining = 0;
22160|      0|            }
22161|       |
22162|  5.53k|            return size_and_type.second == 0
  ------------------
  |  Branch (22162:20): [True: 1.82k, False: 3.71k]
  ------------------
22163|  3.71k|                   || parse_ubjson_typed_run(container_stack.back().remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {});
  ------------------
  |  Branch (22163:23): [True: 3.71k, False: 0]
  ------------------
22164|  5.53k|        }
22165|       |
22166|  68.5k|        return enter_array(detail::unknown_size());
22167|  74.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runERmiNS4_17integral_constantIbLb1EEE:
21974|  6.46k|    {
21975|  6.46k|        switch (type)
21976|  6.46k|        {
21977|    971|            case 'U':
  ------------------
  |  Branch (21977:13): [True: 971, False: 5.49k]
  ------------------
21978|    971|                return parse_ubjson_typed_run<std::uint8_t>(remaining);
21979|    691|            case 'i':
  ------------------
  |  Branch (21979:13): [True: 691, False: 5.77k]
  ------------------
21980|    691|                return parse_ubjson_typed_run<std::int8_t>(remaining);
21981|    486|            case 'I':
  ------------------
  |  Branch (21981:13): [True: 486, False: 5.98k]
  ------------------
21982|    486|                return parse_ubjson_typed_run<std::int16_t>(remaining);
21983|    558|            case 'l':
  ------------------
  |  Branch (21983:13): [True: 558, False: 5.91k]
  ------------------
21984|    558|                return parse_ubjson_typed_run<std::int32_t>(remaining);
21985|    428|            case 'L':
  ------------------
  |  Branch (21985:13): [True: 428, False: 6.04k]
  ------------------
21986|    428|                return parse_ubjson_typed_run<std::int64_t>(remaining);
21987|    492|            case 'u':
  ------------------
  |  Branch (21987:13): [True: 492, False: 5.97k]
  ------------------
21988|    492|                return parse_ubjson_typed_run<std::uint16_t>(remaining);
21989|    435|            case 'm':
  ------------------
  |  Branch (21989:13): [True: 435, False: 6.03k]
  ------------------
21990|    435|                return parse_ubjson_typed_run<std::uint32_t>(remaining);
21991|    427|            case 'M':
  ------------------
  |  Branch (21991:13): [True: 427, False: 6.04k]
  ------------------
21992|    427|                return parse_ubjson_typed_run<std::uint64_t>(remaining);
21993|    480|            case 'd':
  ------------------
  |  Branch (21993:13): [True: 480, False: 5.98k]
  ------------------
21994|    480|                return parse_ubjson_typed_run<float>(remaining);
21995|    509|            case 'D':
  ------------------
  |  Branch (21995:13): [True: 509, False: 5.95k]
  ------------------
21996|    509|                return parse_ubjson_typed_run<double>(remaining);
21997|    991|            default:
  ------------------
  |  Branch (21997:13): [True: 991, False: 5.47k]
  ------------------
21998|    991|                return true;
21999|  6.46k|        }
22000|  6.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIhEEbRm:
22010|    971|    {
22011|    971|        constexpr std::size_t size = sizeof(NumberType);
22012|    971|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    971|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 227, False: 744]
  ------------------
22014|    227|        {
22015|    227|            return true;
22016|    227|        }
22017|    744|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    744|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    744|        std::size_t read = 0;
22021|    744|        bool accepted = true;
22022|  4.73k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 3.99k, False: 744]
  |  Branch (22022:32): [True: 3.99k, False: 0]
  ------------------
22023|  3.99k|        {
22024|  3.99k|            NumberType number{};
22025|  3.99k|            std::memcpy(&number, data + (read * size), size);
22026|  3.99k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 3.99k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  3.99k|            ++read;
22031|  3.99k|            accepted = emit_ubjson_number(number);
22032|  3.99k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    744|        ia.bulk_skip(read * size);
22035|    744|        chars_read += read * size;
22036|    744|        current = data[(read * size) - 1];
22037|    744|        remaining -= read;
22038|    744|        return accepted;
22039|    971|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIhTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|  3.99k|    {
22056|  3.99k|        return emit_unsigned(number);
22057|  3.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIaEEbRm:
22010|    691|    {
22011|    691|        constexpr std::size_t size = sizeof(NumberType);
22012|    691|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    691|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 187, False: 504]
  ------------------
22014|    187|        {
22015|    187|            return true;
22016|    187|        }
22017|    504|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    504|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    504|        std::size_t read = 0;
22021|    504|        bool accepted = true;
22022|  4.04k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 3.54k, False: 504]
  |  Branch (22022:32): [True: 3.54k, False: 0]
  ------------------
22023|  3.54k|        {
22024|  3.54k|            NumberType number{};
22025|  3.54k|            std::memcpy(&number, data + (read * size), size);
22026|  3.54k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 3.54k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  3.54k|            ++read;
22031|  3.54k|            accepted = emit_ubjson_number(number);
22032|  3.54k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    504|        ia.bulk_skip(read * size);
22035|    504|        chars_read += read * size;
22036|    504|        current = data[(read * size) - 1];
22037|    504|        remaining -= read;
22038|    504|        return accepted;
22039|    691|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIaTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|  3.54k|    {
22050|  3.54k|        return emit_signed(number);
22051|  3.54k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIsEEbRm:
22010|    486|    {
22011|    486|        constexpr std::size_t size = sizeof(NumberType);
22012|    486|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    486|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 201, False: 285]
  ------------------
22014|    201|        {
22015|    201|            return true;
22016|    201|        }
22017|    285|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    285|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    285|        std::size_t read = 0;
22021|    285|        bool accepted = true;
22022|  2.28k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 2.00k, False: 285]
  |  Branch (22022:32): [True: 2.00k, False: 0]
  ------------------
22023|  2.00k|        {
22024|  2.00k|            NumberType number{};
22025|  2.00k|            std::memcpy(&number, data + (read * size), size);
22026|  2.00k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 2.00k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  2.00k|            ++read;
22031|  2.00k|            accepted = emit_ubjson_number(number);
22032|  2.00k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    285|        ia.bulk_skip(read * size);
22035|    285|        chars_read += read * size;
22036|    285|        current = data[(read * size) - 1];
22037|    285|        remaining -= read;
22038|    285|        return accepted;
22039|    486|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIsTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|  2.00k|    {
22050|  2.00k|        return emit_signed(number);
22051|  2.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIiEEbRm:
22010|    558|    {
22011|    558|        constexpr std::size_t size = sizeof(NumberType);
22012|    558|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    558|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 257, False: 301]
  ------------------
22014|    257|        {
22015|    257|            return true;
22016|    257|        }
22017|    301|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    301|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    301|        std::size_t read = 0;
22021|    301|        bool accepted = true;
22022|  1.41k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 1.11k, False: 301]
  |  Branch (22022:32): [True: 1.11k, False: 0]
  ------------------
22023|  1.11k|        {
22024|  1.11k|            NumberType number{};
22025|  1.11k|            std::memcpy(&number, data + (read * size), size);
22026|  1.11k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 1.11k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  1.11k|            ++read;
22031|  1.11k|            accepted = emit_ubjson_number(number);
22032|  1.11k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    301|        ia.bulk_skip(read * size);
22035|    301|        chars_read += read * size;
22036|    301|        current = data[(read * size) - 1];
22037|    301|        remaining -= read;
22038|    301|        return accepted;
22039|    558|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIiTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|  1.11k|    {
22050|  1.11k|        return emit_signed(number);
22051|  1.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIlEEbRm:
22010|    428|    {
22011|    428|        constexpr std::size_t size = sizeof(NumberType);
22012|    428|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    428|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 244, False: 184]
  ------------------
22014|    244|        {
22015|    244|            return true;
22016|    244|        }
22017|    184|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    184|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    184|        std::size_t read = 0;
22021|    184|        bool accepted = true;
22022|    726|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 542, False: 184]
  |  Branch (22022:32): [True: 542, False: 0]
  ------------------
22023|    542|        {
22024|    542|            NumberType number{};
22025|    542|            std::memcpy(&number, data + (read * size), size);
22026|    542|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 542]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|    542|            ++read;
22031|    542|            accepted = emit_ubjson_number(number);
22032|    542|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    184|        ia.bulk_skip(read * size);
22035|    184|        chars_read += read * size;
22036|    184|        current = data[(read * size) - 1];
22037|    184|        remaining -= read;
22038|    184|        return accepted;
22039|    428|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIlTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|    542|    {
22050|    542|        return emit_signed(number);
22051|    542|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runItEEbRm:
22010|    492|    {
22011|    492|        constexpr std::size_t size = sizeof(NumberType);
22012|    492|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    492|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 231, False: 261]
  ------------------
22014|    231|        {
22015|    231|            return true;
22016|    231|        }
22017|    261|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    261|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    261|        std::size_t read = 0;
22021|    261|        bool accepted = true;
22022|  2.32k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 2.05k, False: 261]
  |  Branch (22022:32): [True: 2.05k, False: 0]
  ------------------
22023|  2.05k|        {
22024|  2.05k|            NumberType number{};
22025|  2.05k|            std::memcpy(&number, data + (read * size), size);
22026|  2.05k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 2.05k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  2.05k|            ++read;
22031|  2.05k|            accepted = emit_ubjson_number(number);
22032|  2.05k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    261|        ia.bulk_skip(read * size);
22035|    261|        chars_read += read * size;
22036|    261|        current = data[(read * size) - 1];
22037|    261|        remaining -= read;
22038|    261|        return accepted;
22039|    492|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberItTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|  2.05k|    {
22056|  2.05k|        return emit_unsigned(number);
22057|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIjEEbRm:
22010|    435|    {
22011|    435|        constexpr std::size_t size = sizeof(NumberType);
22012|    435|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    435|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 202, False: 233]
  ------------------
22014|    202|        {
22015|    202|            return true;
22016|    202|        }
22017|    233|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    233|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    233|        std::size_t read = 0;
22021|    233|        bool accepted = true;
22022|  1.24k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 1.01k, False: 233]
  |  Branch (22022:32): [True: 1.01k, False: 0]
  ------------------
22023|  1.01k|        {
22024|  1.01k|            NumberType number{};
22025|  1.01k|            std::memcpy(&number, data + (read * size), size);
22026|  1.01k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 1.01k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  1.01k|            ++read;
22031|  1.01k|            accepted = emit_ubjson_number(number);
22032|  1.01k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    233|        ia.bulk_skip(read * size);
22035|    233|        chars_read += read * size;
22036|    233|        current = data[(read * size) - 1];
22037|    233|        remaining -= read;
22038|    233|        return accepted;
22039|    435|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIjTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|  1.01k|    {
22056|  1.01k|        return emit_unsigned(number);
22057|  1.01k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runImEEbRm:
22010|    427|    {
22011|    427|        constexpr std::size_t size = sizeof(NumberType);
22012|    427|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    427|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 249, False: 178]
  ------------------
22014|    249|        {
22015|    249|            return true;
22016|    249|        }
22017|    178|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    178|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    178|        std::size_t read = 0;
22021|    178|        bool accepted = true;
22022|    813|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 635, False: 178]
  |  Branch (22022:32): [True: 635, False: 0]
  ------------------
22023|    635|        {
22024|    635|            NumberType number{};
22025|    635|            std::memcpy(&number, data + (read * size), size);
22026|    635|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 635]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|    635|            ++read;
22031|    635|            accepted = emit_ubjson_number(number);
22032|    635|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    178|        ia.bulk_skip(read * size);
22035|    178|        chars_read += read * size;
22036|    178|        current = data[(read * size) - 1];
22037|    178|        remaining -= read;
22038|    178|        return accepted;
22039|    427|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberImTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|    635|    {
22056|    635|        return emit_unsigned(number);
22057|    635|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIfEEbRm:
22010|    480|    {
22011|    480|        constexpr std::size_t size = sizeof(NumberType);
22012|    480|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    480|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 215, False: 265]
  ------------------
22014|    215|        {
22015|    215|            return true;
22016|    215|        }
22017|    265|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    265|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    265|        std::size_t read = 0;
22021|    265|        bool accepted = true;
22022|  1.76k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 1.50k, False: 265]
  |  Branch (22022:32): [True: 1.50k, False: 0]
  ------------------
22023|  1.50k|        {
22024|  1.50k|            NumberType number{};
22025|  1.50k|            std::memcpy(&number, data + (read * size), size);
22026|  1.50k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 1.50k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  1.50k|            ++read;
22031|  1.50k|            accepted = emit_ubjson_number(number);
22032|  1.50k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    265|        ia.bulk_skip(read * size);
22035|    265|        chars_read += read * size;
22036|    265|        current = data[(read * size) - 1];
22037|    265|        remaining -= read;
22038|    265|        return accepted;
22039|    480|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIfTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEbSN_:
22043|  1.50k|    {
22044|  1.50k|        return emit_float(number);
22045|  1.50k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIdEEbRm:
22010|    509|    {
22011|    509|        constexpr std::size_t size = sizeof(NumberType);
22012|    509|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    509|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 280, False: 229]
  ------------------
22014|    280|        {
22015|    280|            return true;
22016|    280|        }
22017|    229|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    229|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    229|        std::size_t read = 0;
22021|    229|        bool accepted = true;
22022|    916|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 687, False: 229]
  |  Branch (22022:32): [True: 687, False: 0]
  ------------------
22023|    687|        {
22024|    687|            NumberType number{};
22025|    687|            std::memcpy(&number, data + (read * size), size);
22026|    687|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 687]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|    687|            ++read;
22031|    687|            accepted = emit_ubjson_number(number);
22032|    687|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    229|        ia.bulk_skip(read * size);
22035|    229|        chars_read += read * size;
22036|    229|        current = data[(read * size) - 1];
22037|    229|        remaining -= read;
22038|    229|        return accepted;
22039|    509|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIdTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEbSN_:
22043|    687|    {
22044|    687|        return emit_float(number);
22045|    687|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
23219|  3.04k|    {
23220|  3.04k|        return get_bytes(len, "binary", result);
23221|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17get_ubjson_objectEv:
22173|  14.3k|    {
22174|  14.3k|        std::pair<std::size_t, char_int_type> size_and_type;
22175|  14.3k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  14.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 14.3k]
  |  |  ------------------
  ------------------
22176|      0|        {
22177|      0|            return false;
22178|      0|        }
22179|       |
22180|       |        // do not accept ND-array size in objects in BJData
22181|  14.3k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22181:13): [True: 1, False: 14.3k]
  ------------------
22182|      1|        {
22183|      1|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
22184|      1|        }
22185|       |
22186|  14.3k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22186:13): [True: 362, False: 13.9k]
  ------------------
22187|    362|        {
22188|    362|            return enter_object(size_and_type.first, size_and_type.second);
22189|    362|        }
22190|       |
22191|  13.9k|        return enter_object(detail::unknown_size());
22192|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17get_ubjson_stringERSC_bPKc:
21355|  29.6k|    {
21356|  29.6k|        if (get_char)
  ------------------
  |  Branch (21356:13): [True: 6.89k, False: 22.7k]
  ------------------
21357|  6.89k|        {
21358|       |            // no get_ignore_noop() here: the byte read next must be a string
21359|       |            // length type specification, and a no-op ('N') is not valid in
21360|       |            // that position. No-ops at positions where a value may appear are
21361|       |            // already consumed by the callers via get_ignore_noop().
21362|  6.89k|            get();
21363|  6.89k|        }
21364|       |
21365|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
21366|      0|        {
21367|      0|            return false;
21368|      0|        }
21369|       |
21370|  29.6k|        switch (current)
21371|  29.6k|        {
21372|  20.7k|            case 'U':
  ------------------
  |  Branch (21372:13): [True: 20.7k, False: 8.89k]
  ------------------
21373|  20.7k|            {
21374|  20.7k|                return get_string_with_length<std::uint8_t>(result, context);
21375|      0|            }
21376|       |
21377|  4.93k|            case 'i':
  ------------------
  |  Branch (21377:13): [True: 4.93k, False: 24.7k]
  ------------------
21378|  4.93k|            {
21379|  4.93k|                std::int8_t len{};
21380|  4.93k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21380:24): [True: 4.92k, False: 4]
  |  Branch (21380:43): [True: 4.92k, False: 5]
  |  Branch (21380:78): [True: 4.88k, False: 34]
  |  Branch (21380:105): [True: 4.88k, False: 0]
  ------------------
21381|      0|            }
21382|       |
21383|    684|            case 'I':
  ------------------
  |  Branch (21383:13): [True: 684, False: 28.9k]
  ------------------
21384|    684|            {
21385|    684|                std::int16_t len{};
21386|    684|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21386:24): [True: 679, False: 5]
  |  Branch (21386:43): [True: 676, False: 3]
  |  Branch (21386:78): [True: 619, False: 57]
  |  Branch (21386:105): [True: 619, False: 0]
  ------------------
21387|      0|            }
21388|       |
21389|    508|            case 'l':
  ------------------
  |  Branch (21389:13): [True: 508, False: 29.1k]
  ------------------
21390|    508|            {
21391|    508|                std::int32_t len{};
21392|    508|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21392:24): [True: 499, False: 9]
  |  Branch (21392:43): [True: 468, False: 31]
  |  Branch (21392:78): [True: 394, False: 74]
  |  Branch (21392:105): [True: 394, False: 0]
  ------------------
21393|      0|            }
21394|       |
21395|    524|            case 'L':
  ------------------
  |  Branch (21395:13): [True: 524, False: 29.1k]
  ------------------
21396|    524|            {
21397|    524|                std::int64_t len{};
21398|    524|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21398:24): [True: 511, False: 13]
  |  Branch (21398:43): [True: 448, False: 63]
  |  Branch (21398:78): [True: 303, False: 145]
  |  Branch (21398:105): [True: 303, False: 0]
  ------------------
21399|      0|            }
21400|       |
21401|    924|            case 'u':
  ------------------
  |  Branch (21401:13): [True: 924, False: 28.7k]
  ------------------
21402|    924|            {
21403|    924|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21403:21): [True: 0, False: 924]
  ------------------
21404|      0|                {
21405|      0|                    break;
21406|      0|                }
21407|    924|                return get_string_with_length<std::uint16_t>(result, context);
21408|    924|            }
21409|       |
21410|    426|            case 'm':
  ------------------
  |  Branch (21410:13): [True: 426, False: 29.2k]
  ------------------
21411|    426|            {
21412|    426|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21412:21): [True: 0, False: 426]
  ------------------
21413|      0|                {
21414|      0|                    break;
21415|      0|                }
21416|    426|                return get_string_with_length<std::uint32_t>(result, context);
21417|    426|            }
21418|       |
21419|    552|            case 'M':
  ------------------
  |  Branch (21419:13): [True: 552, False: 29.0k]
  ------------------
21420|    552|            {
21421|    552|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21421:21): [True: 0, False: 552]
  ------------------
21422|      0|                {
21423|      0|                    break;
21424|      0|                }
21425|    552|                return get_string_with_length<std::uint64_t>(result, context);
21426|    552|            }
21427|       |
21428|     70|            default:
  ------------------
  |  Branch (21428:13): [True: 70, False: 29.5k]
  ------------------
21429|     70|                break;
21430|  29.6k|        }
21431|     70|        return length_type_error("", "string");
21432|  29.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIaEEbT_:
21332|  4.92k|    {
21333|  4.92k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|  4.92k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 4.92k]
  |  |  ------------------
  ------------------
21334|      5|        {
21335|      5|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      5|        }
21337|  4.92k|        return true;
21338|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIaEEbT_RSC_:
23119|  4.92k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  4.92k|        return get_bytes(len, "string", result);
23130|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIaSC_EEbT_PKcRT0_:
23245|  4.92k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  4.92k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  4.92k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 4.19k, False: 725]
  ------------------
23250|  4.19k|        {
23251|  4.19k|            return true;
23252|  4.19k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    725|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    725|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 34, False: 691]
  ------------------
23258|     34|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     34|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 34, False: 0]
  ------------------
23262|     34|                                       ? static_cast<std::size_t>(len)
23263|     34|                                       : chunk_size;
23264|     34|            const std::size_t old_size = result.size();
23265|     34|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     34|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     34|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 34, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     34|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     34|            chars_read += bytes_read;
23273|     34|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     34|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 0]
  |  |  ------------------
  ------------------
23274|     34|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     34|                result.resize(old_size + bytes_read);
23279|     34|                ++chars_read;
23280|     34|                current = char_traits<char_type>::eof();
23281|     34|                return unexpect_eof(context);
23282|     34|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    691|        return true;
23288|    725|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIaEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  4.92k|    {
23295|  4.92k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 691, False: 4.23k]
  ------------------
23296|    691|        {
23297|    691|            return false;
23298|    691|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  4.23k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  4.23k|        const std::size_t remaining = ia.bulk_remaining();
23303|  4.23k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 34, False: 4.19k]
  ------------------
23304|     34|        {
23305|     34|            return false; // (the loop reports the premature end)
23306|     34|        }
23307|  4.19k|        const auto n = static_cast<std::size_t>(ulen);
23308|  4.19k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  4.19k|        ia.bulk_skip(n);
23310|  4.19k|        chars_read += n;
23311|  4.19k|        return true;
23312|  4.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIsEEbT_:
21332|    679|    {
21333|    679|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    679|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 3, False: 676]
  |  |  ------------------
  ------------------
21334|      3|        {
21335|      3|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      3|        }
21337|    676|        return true;
21338|    679|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIsEEbT_RSC_:
23119|    676|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    676|        return get_bytes(len, "string", result);
23130|    676|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIsSC_EEbT_PKcRT0_:
23245|    676|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    676|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    676|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 338, False: 338]
  ------------------
23250|    338|        {
23251|    338|            return true;
23252|    338|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    338|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    338|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 57, False: 281]
  ------------------
23258|     57|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     57|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 37, False: 20]
  ------------------
23262|     57|                                       ? static_cast<std::size_t>(len)
23263|     57|                                       : chunk_size;
23264|     57|            const std::size_t old_size = result.size();
23265|     57|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     57|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     57|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 57, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     57|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     57|            chars_read += bytes_read;
23273|     57|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     57|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 57, False: 0]
  |  |  ------------------
  ------------------
23274|     57|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     57|                result.resize(old_size + bytes_read);
23279|     57|                ++chars_read;
23280|     57|                current = char_traits<char_type>::eof();
23281|     57|                return unexpect_eof(context);
23282|     57|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    281|        return true;
23288|    338|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIsEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    676|    {
23295|    676|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 281, False: 395]
  ------------------
23296|    281|        {
23297|    281|            return false;
23298|    281|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    395|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    395|        const std::size_t remaining = ia.bulk_remaining();
23303|    395|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 57, False: 338]
  ------------------
23304|     57|        {
23305|     57|            return false; // (the loop reports the premature end)
23306|     57|        }
23307|    338|        const auto n = static_cast<std::size_t>(ulen);
23308|    338|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    338|        ia.bulk_skip(n);
23310|    338|        chars_read += n;
23311|    338|        return true;
23312|    395|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIiEEbT_:
21332|    499|    {
21333|    499|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    499|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 31, False: 468]
  |  |  ------------------
  ------------------
21334|     31|        {
21335|     31|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     31|        }
21337|    468|        return true;
21338|    499|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIlEEbT_:
21332|    511|    {
21333|    511|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    511|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 63, False: 448]
  |  |  ------------------
  ------------------
21334|     63|        {
21335|     63|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     63|        }
21337|    448|        return true;
21338|    511|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIlEEbT_RSC_:
23119|    448|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    448|        return get_bytes(len, "string", result);
23130|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIlSC_EEbT_PKcRT0_:
23245|    448|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    448|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    448|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 142, False: 306]
  ------------------
23250|    142|        {
23251|    142|            return true;
23252|    142|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    306|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    306|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 145, False: 161]
  ------------------
23258|    145|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    145|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 35, False: 110]
  ------------------
23262|    145|                                       ? static_cast<std::size_t>(len)
23263|    145|                                       : chunk_size;
23264|    145|            const std::size_t old_size = result.size();
23265|    145|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    145|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    145|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 145, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    145|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    145|            chars_read += bytes_read;
23273|    145|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    145|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 145, False: 0]
  |  |  ------------------
  ------------------
23274|    145|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    145|                result.resize(old_size + bytes_read);
23279|    145|                ++chars_read;
23280|    145|                current = char_traits<char_type>::eof();
23281|    145|                return unexpect_eof(context);
23282|    145|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    161|        return true;
23288|    306|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIlEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    448|    {
23295|    448|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 161, False: 287]
  ------------------
23296|    161|        {
23297|    161|            return false;
23298|    161|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    287|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    287|        const std::size_t remaining = ia.bulk_remaining();
23303|    287|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 145, False: 142]
  ------------------
23304|    145|        {
23305|    145|            return false; // (the loop reports the premature end)
23306|    145|        }
23307|    142|        const auto n = static_cast<std::size_t>(ulen);
23308|    142|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    142|        ia.bulk_skip(n);
23310|    142|        chars_read += n;
23311|    142|        return true;
23312|    287|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthImEEbRSC_PKc:
23198|    552|    {
23199|    552|        NumberType len{};
23200|    552|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 533, False: 19]
  |  Branch (23200:35): [True: 348, False: 185]
  |  Branch (23200:62): [True: 348, False: 0]
  ------------------
23201|    552|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringImEEbT_RSC_:
23119|    533|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    533|        return get_bytes(len, "string", result);
23130|    533|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15get_ignore_noopEv:
22874|   304k|    {
22875|   304k|        do
22876|   310k|        {
22877|   310k|            get();
22878|   310k|        }
22879|   310k|        while (current == 'N');
  ------------------
  |  Branch (22879:16): [True: 5.91k, False: 304k]
  ------------------
22880|       |
22881|   304k|        return current;
22882|   304k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE3getEv:
22840|   491k|    {
22841|   491k|        ++chars_read;
22842|   491k|        return current = ia.get_character();
22843|   491k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter13get_characterEv:
 9757|   491k|    {
 9758|   491k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9759|       |        // the character is in the get area: step over it, as sbumpc() does
 9760|   491k|        const char* const next = streambuf_access::get_ptr(sb);
 9761|   491k|        if (JSON_HEDLEY_LIKELY(next != streambuf_access::get_end(sb)))
  ------------------
  |  | 1696|   491k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 481k, False: 9.66k]
  |  |  ------------------
  ------------------
 9762|   481k|        {
 9763|   481k|            current_in_get_area = true;
 9764|   481k|            streambuf_access::bump(sb, 1);
 9765|   481k|            return std::char_traits<char>::to_int_type(*next);
 9766|   481k|        }
 9767|  9.66k|        if (no_get_area)
  ------------------
  |  Branch (9767:13): [True: 0, False: 9.66k]
  ------------------
 9768|      0|        {
 9769|      0|            return get_character_no_get_area();
 9770|      0|        }
 9771|  9.66k|#endif
 9772|  9.66k|        return get_character_slow();
 9773|  9.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter18get_character_slowEv:
 9899|  9.66k|    {
 9900|  9.66k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9901|       |        // the get area is exhausted (get_character() handles the other case),
 9902|       |        // so sbumpc() refills it
 9903|  9.66k|        save_token_segment();
 9904|  9.66k|#endif
 9905|       |
 9906|  9.66k|        auto res = sb->sbumpc();
 9907|       |        // set eof manually, as we don't use the istream interface.
 9908|  9.66k|        if (JSON_HEDLEY_UNLIKELY(res == std::char_traits<char>::eof()))
  ------------------
  |  | 1697|  9.66k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 9.66k, False: 0]
  |  |  ------------------
  ------------------
 9909|  9.66k|        {
 9910|  9.66k|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9911|  9.66k|            current_in_get_area = false;
 9912|  9.66k|#endif
 9913|  9.66k|            is->clear(is->rdstate() | std::ios::eofbit);
 9914|  9.66k|        }
 9915|      0|#if !JSON_DISABLE_STREAM_BULK_SCAN
 9916|      0|        else
 9917|      0|        {
 9918|       |            // the consumed character is at gptr() - 1, unless the streambuf
 9919|       |            // has no get area and returned it from uflow()
 9920|      0|            const char* const next = streambuf_access::get_ptr(sb);
 9921|      0|            after_refill(res, next != nullptr && next != streambuf_access::get_begin(sb));
  ------------------
  |  Branch (9921:31): [True: 0, False: 0]
  |  Branch (9921:50): [True: 0, False: 0]
  ------------------
 9922|      0|        }
 9923|  9.66k|#endif
 9924|  9.66k|        return res;
 9925|  9.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter18save_token_segmentEv:
 9972|  9.66k|    {
 9973|  9.66k|        if (token_segment != nullptr)
  ------------------
  |  Branch (9973:13): [True: 0, False: 9.66k]
  ------------------
 9974|      0|        {
 9975|      0|            token_carry.append(token_segment, streambuf_access::get_end(sb));
 9976|      0|            token_segment = nullptr;
 9977|      0|        }
 9978|  9.66k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15last_byte_errorENS1_12exception_idERKSC_PKcSP_:
23407|    973|    {
23408|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
23409|    973|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
23410|    973|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (23410:51): [True: 832, False: 141]
  ------------------
23411|    973|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEED2Ev:
18487|  14.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEED2Ev:
17434|  14.9k|    ~json_sax_dom_binary_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterERNSt3__113basic_istreamIcNS2_11char_traitsIcEEEE:
10719|  14.9k|{
10720|  14.9k|    if (stream.rdbuf() == nullptr)
  ------------------
  |  Branch (10720:9): [True: 0, False: 14.9k]
  ------------------
10721|      0|    {
10722|      0|        JSON_THROW(parse_error::create(exception_id::syntax_error, 0, empty_input_message(), nullptr));
  ------------------
  |  | 2608|      0|    #define JSON_THROW(exception) throw exception
  ------------------
10723|      0|    }
10724|  14.9k|    return input_stream_adapter(stream);
10725|  14.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapterC2ERNSt3__113basic_istreamIcNS3_11char_traitsIcEEEE:
 9654|  14.9k|        : is(&i), sb(i.rdbuf())
 9655|  14.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail18token_carry_bufferC2Ev:
 9305|  29.8k|    token_carry_buffer() = default;
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapterD2Ev:
 9633|  29.8k|    {
 9634|       |        // clear stream flags; we use underlying streambuf I/O, do not
 9635|       |        // maintain ifstream flags, except eof
 9636|  29.8k|        if (is != nullptr)
  ------------------
  |  Branch (9636:13): [True: 14.9k, False: 14.9k]
  ------------------
 9637|  14.9k|        {
 9638|       |#if JSON_PRECISE_STREAM_POSITION
 9639|       |            // consume the character last returned by get_character() unless it
 9640|       |            // was given back with release_lookahead()
 9641|       |            commit_lookahead();
 9642|       |#endif
 9643|       |            // only call clear() if there is something to clear: it throws
 9644|       |            // std::ios_base::failure if the stream has exceptions() enabled
 9645|       |            // for a state bit that remains set, and a destructor must not throw
 9646|  14.9k|            if ((is->rdstate() & ~std::ios::eofbit) != 0)
  ------------------
  |  Branch (9646:17): [True: 0, False: 14.9k]
  ------------------
 9647|      0|            {
 9648|      0|                is->clear(is->rdstate() & std::ios::eofbit);
 9649|      0|            }
 9650|  14.9k|        }
 9651|  29.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18token_carry_bufferD2Ev:
 9314|  59.6k|    ~token_carry_buffer() = default;
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataINS2_21__list_const_iteratorIhPvEESI_TnNS2_9enable_ifIXsr6detail14can_compare_neIT_T0_EE5valueEiE4typeELi0EEESE_SK_SL_bbNS0_6detail15error_handler_tE:
46023|  14.9k|    {
46024|  14.9k|        return from_binary_impl(detail::input_adapter(std::move(first), std::move(last)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
46025|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail22iterator_input_adapterINS2_21__list_const_iteratorIhPvEESK_EEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
45629|  14.9k|    {
45630|  14.9k|        basic_json result;
45631|  14.9k|        detail::json_sax_dom_binary_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
45632|  14.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
45633|  14.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (45633:13): [True: 0, False: 14.9k]
  ------------------
45634|      0|        {
45635|      0|            result = value_t::discarded;
45636|      0|        }
45637|  14.9k|        return result;
45638|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEEC2ERSG_bPNS1_5lexerISG_SL_Lb0EEE:
17426|  14.9k|        : json_sax_dom_error_state(allow_exceptions_), root(r), m_lexer_ref(lexer_)
17427|  14.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEEC2EOSL_NS1_14input_format_tENS1_15error_handler_tE:
18477|  14.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
18478|  14.9k|    {
18479|  14.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
18480|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9sax_parseEPSN_bNS1_18cbor_tag_handler_tE:
18502|  14.9k|    {
18503|  14.9k|        sax = sax_;
18504|  14.9k|        container_stack.clear();
18505|  14.9k|        bon8_pushback_size = 0;
18506|  14.9k|        bool result = false;
18507|       |
18508|  14.9k|        switch (input_format)
18509|  14.9k|        {
18510|      0|            case input_format_t::bson:
  ------------------
  |  Branch (18510:13): [True: 0, False: 14.9k]
  ------------------
18511|      0|                result = parse_bson_internal();
18512|      0|                break;
18513|       |
18514|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (18514:13): [True: 0, False: 14.9k]
  ------------------
18515|      0|                result = parse_cbor_internal(tag_handler);
18516|      0|                break;
18517|       |
18518|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (18518:13): [True: 0, False: 14.9k]
  ------------------
18519|      0|                result = parse_msgpack_internal();
18520|      0|                break;
18521|       |
18522|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (18522:13): [True: 0, False: 14.9k]
  ------------------
18523|  14.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (18523:13): [True: 14.9k, False: 0]
  ------------------
18524|  14.9k|                result = parse_ubjson_internal();
18525|  14.9k|                break;
18526|       |
18527|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (18527:13): [True: 0, False: 14.9k]
  ------------------
18528|      0|                result = parse_bon8_internal();
18529|      0|                break;
18530|       |
18531|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (18531:13): [True: 0, False: 14.9k]
  ------------------
18532|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (18532:13): [True: 0, False: 14.9k]
  ------------------
18533|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18533:17): [Folded, False: 0]
  ------------------
18534|  14.9k|        }
18535|       |
18536|       |        // strict mode: next byte must be EOF
18537|  7.57k|        if (result && strict)
  ------------------
  |  Branch (18537:13): [True: 7.57k, False: 0]
  |  Branch (18537:23): [True: 7.57k, False: 0]
  ------------------
18538|  7.57k|        {
18539|  7.57k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (18539:17): [True: 0, False: 7.57k]
  |  Branch (18539:59): [True: 7.57k, False: 0]
  ------------------
18540|  7.57k|            {
18541|  7.57k|                get_ignore_noop();
18542|  7.57k|            }
18543|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (18543:22): [True: 0, False: 0]
  ------------------
18544|      0|            {
18545|       |                // a string that ends a container hands back the byte after it
18546|      0|                get_bon8();
18547|      0|            }
18548|      0|            else
18549|      0|            {
18550|      0|                get();
18551|      0|            }
18552|       |
18553|  7.57k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1697|  7.57k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 111, False: 7.45k]
  |  |  ------------------
  ------------------
18554|    111|            {
18555|    111|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
18556|    111|            }
18557|  7.57k|        }
18558|       |
18559|  7.45k|        return result;
18560|  7.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIiEEbRT_PKc:
22855|  3.38k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.38k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.38k|        chars_read += new_chars_read;
22860|  3.38k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.38k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 133, False: 3.25k]
  |  |  ------------------
  ------------------
22861|    133|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    133|            ++chars_read;
22864|    133|            static_cast<void>(report_eof(context));
22865|    133|            return false;
22866|    133|        }
22867|  3.25k|        return true;
22868|  3.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIiEEmPT_m:
10174|  3.38k|    {
10175|  3.38k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  3.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIiEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  3.38k|    {
10255|  3.38k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  16.4k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 13.1k, False: 3.25k]
  ------------------
10257|  13.1k|        {
10258|  13.1k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  13.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 13.0k, False: 133]
  |  |  ------------------
  ------------------
10259|  13.0k|            {
10260|  13.0k|                ptr[read_index] = static_cast<char>(*current);
10261|  13.0k|                std::advance(current, 1);
10262|  13.0k|            }
10263|    133|            else
10264|    133|            {
10265|    133|                return read_index;
10266|    133|            }
10267|  13.1k|        }
10268|  3.25k|        return count * sizeof(T);
10269|  3.38k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10report_eofEPKc:
23343|  4.08k|    {
23344|  4.08k|        return sax->parse_error(chars_read, "<end of file>",
23345|  4.08k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
23346|  4.08k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17exception_messageERKSC_SQ_:
23454|  7.06k|    {
23455|  7.06k|        std::string error_msg = "syntax error while parsing ";
23456|  7.06k|        error_msg += input_format_name(input_format);
23457|       |
23458|  7.06k|        return concat(error_msg, ' ', context, ": ", detail);
23459|  7.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE15enter_containerEbmm:
18618|  87.5k|    {
18619|  87.5k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1697|   175k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 87.5k]
  |  |  |  Branch (1697:94): [True: 14.1k, False: 73.4k]
  |  |  ------------------
  ------------------
18620|      0|        {
18621|      0|            return false;
18622|      0|        }
18623|       |
18624|  87.5k|        container_stack.emplace_back(len, is_object, type_marker);
18625|  87.5k|        return true;
18626|  87.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12start_objectEm:
17483|  17.3k|    {
17484|  17.3k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
17485|       |
17486|       |#if JSON_DIAGNOSTIC_POSITIONS
17487|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17488|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17489|       |#endif
17490|       |
17491|  17.3k|        return check_container_size(*this, len, "object", ref_stack.back());
17492|  17.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueINS1_7value_tEEEPSG_OT_:
17566|  96.8k|    {
17567|  96.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 9.35k, False: 87.5k]
  ------------------
17568|  9.35k|        {
17569|  9.35k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  9.35k|            return &root;
17576|  9.35k|        }
17577|       |
17578|  87.5k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  87.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 75.1k, False: 12.3k]
  |  Branch (17578:9): [True: 12.3k, False: 0]
  |  Branch (17578:9): [True: 87.5k, False: 0]
  ------------------
17579|       |
17580|  87.5k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 75.1k, False: 12.3k]
  ------------------
17581|  75.1k|        {
17582|  75.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  75.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  75.1k|        }
17590|       |
17591|  12.3k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  12.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 12.3k, False: 0]
  ------------------
17592|  12.3k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  12.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 12.3k, False: 0]
  ------------------
17593|  12.3k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  12.3k|        return object_element;
17600|  12.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterINS5_21__list_const_iteratorIhPvEESL_EEEESH_EEbRT_mPKcPT0_:
16179|  96.8k|{
16180|  96.8k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1697|   112k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 268, False: 96.6k]
  |  |  |  Branch (1697:94): [True: 15.1k, False: 81.6k]
  |  |  |  Branch (1697:94): [True: 268, False: 14.9k]
  |  |  ------------------
  ------------------
16181|    268|    {
16182|    268|        return container_too_large_error(sax, len, kind, ref);
16183|    268|    }
16184|  96.6k|    return true;
16185|  96.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterINS5_21__list_const_iteratorIhPvEESL_EEEESH_EEbRT_mPKcPT0_:
16173|    268|{
16174|    268|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
16175|    268|}
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE11start_arrayEm:
17520|  79.5k|    {
17521|  79.5k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
17522|       |
17523|       |#if JSON_DIAGNOSTIC_POSITIONS
17524|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17525|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17526|       |#endif
17527|       |
17528|  79.5k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1697|  79.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 79.5k]
  |  |  ------------------
  ------------------
17529|      0|        {
17530|      0|            return false;
17531|      0|        }
17532|       |
17533|  79.5k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (17533:13): [True: 11.5k, False: 68.0k]
  ------------------
17534|  11.5k|        {
17535|  11.5k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
17536|  11.5k|        }
17537|       |
17538|  79.5k|        return true;
17539|  79.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE15container_frameC2Embm:
18584|  87.3k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE15leave_containerEv:
18650|  56.4k|    {
18651|  56.4k|        const bool is_object = container_stack.back().is_object;
18652|  56.4k|        container_stack.pop_back();
18653|  56.4k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (18653:16): [True: 10.8k, False: 45.6k]
  ------------------
18654|  56.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE10end_objectEv:
17506|  13.6k|    {
17507|  13.6k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  13.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17507:9): [True: 13.6k, False: 0]
  ------------------
17508|  13.6k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  13.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17508:9): [True: 13.6k, False: 0]
  ------------------
17509|       |
17510|       |#if JSON_DIAGNOSTIC_POSITIONS
17511|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17512|       |#endif
17513|       |
17514|  13.6k|        ref_stack.back()->set_parents();
17515|  13.6k|        ref_stack.pop_back();
17516|  13.6k|        return true;
17517|  13.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE9end_arrayEv:
17542|  51.5k|    {
17543|  51.5k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  51.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17543:9): [True: 51.5k, False: 0]
  ------------------
17544|  51.5k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2643|  51.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17544:9): [True: 51.5k, False: 0]
  ------------------
17545|       |
17546|       |#if JSON_DIAGNOSTIC_POSITIONS
17547|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17548|       |#endif
17549|       |
17550|  51.5k|        ref_stack.back()->set_parents();
17551|  51.5k|        ref_stack.pop_back();
17552|  51.5k|        return true;
17553|  51.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE12unexpect_eofEPKc:
23326|   205k|    {
23327|   205k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1697|   205k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2.79k, False: 202k]
  |  |  ------------------
  ------------------
23328|  2.79k|        {
23329|  2.79k|            return report_eof(context);
23330|  2.79k|        }
23331|   202k|        return true;
23332|   205k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17check_string_utf8ERSC_PKc:
23163|  28.4k|    {
23164|  28.4k|        return error_handler == error_handler_t::keep || check_string_utf8_handler(result, context);
  ------------------
  |  Branch (23164:16): [True: 28.4k, False: 0]
  |  Branch (23164:58): [True: 0, False: 0]
  ------------------
23165|  28.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE3keyERSC_:
17495|  31.6k|    {
17496|  31.6k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  31.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17496:9): [True: 31.6k, False: 0]
  ------------------
17497|  31.6k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  31.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17497:9): [True: 31.6k, False: 0]
  ------------------
17498|       |
17499|       |        // add null at the given key and store the reference for later; the
17500|       |        // key is moved, as the lexer starts the next token with reset()
17501|  31.6k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](std::move(val)));
17502|  31.6k|        return true;
17503|  31.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIdEEbRT_PKc:
22855|  1.22k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  1.22k|        auto new_chars_read = ia.get_elements(&dest);
22859|  1.22k|        chars_read += new_chars_read;
22860|  1.22k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  1.22k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 1.12k]
  |  |  ------------------
  ------------------
22861|     92|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|     92|            ++chars_read;
22864|     92|            static_cast<void>(report_eof(context));
22865|     92|            return false;
22866|     92|        }
22867|  1.12k|        return true;
22868|  1.22k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIdEEmPT_m:
10174|  1.22k|    {
10175|  1.22k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  1.22k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIdEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  1.22k|    {
10255|  1.22k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  10.2k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 9.16k, False: 1.12k]
  ------------------
10257|  9.16k|        {
10258|  9.16k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  9.16k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 9.07k, False: 92]
  |  |  ------------------
  ------------------
10259|  9.07k|            {
10260|  9.07k|                ptr[read_index] = static_cast<char>(*current);
10261|  9.07k|                std::advance(current, 1);
10262|  9.07k|            }
10263|     92|            else
10264|     92|            {
10265|     92|                return read_index;
10266|     92|            }
10267|  9.16k|        }
10268|  1.12k|        return count * sizeof(T);
10269|  1.22k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10emit_floatIdEEbT_:
23034|  1.12k|    {
23035|  1.12k|        const auto result = static_cast<number_float_t>(number);
23036|  1.12k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  2.22k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.12k]
  |  |  |  Branch (1697:94): [True: 1.09k, False: 30]
  |  |  |  Branch (1697:94): [True: 0, False: 1.09k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  1.12k|        return sax->number_float(result, no_source);
23041|  1.12k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE18out_of_range_errorENS1_12exception_idEPKcSR_:
23353|     52|    {
23354|     52|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
23355|     52|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE16get_token_stringEv:
23443|  1.66k|    {
23444|  1.66k|        return hex_byte(static_cast<std::uint8_t>(current));
23445|  1.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12number_floatEdRKSC_:
17461|  35.9k|    {
17462|  35.9k|        handle_value(val);
17463|  35.9k|        return true;
17464|  35.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRdEEPSG_OT_:
17566|  35.9k|    {
17567|  35.9k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 1.33k, False: 34.6k]
  ------------------
17568|  1.33k|        {
17569|  1.33k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  1.33k|            return &root;
17576|  1.33k|        }
17577|       |
17578|  34.6k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  34.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 34.0k, False: 626]
  |  Branch (17578:9): [True: 626, False: 0]
  |  Branch (17578:9): [True: 34.6k, False: 0]
  ------------------
17579|       |
17580|  34.6k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 34.0k, False: 626]
  ------------------
17581|  34.0k|        {
17582|  34.0k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  34.0k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  34.0k|        }
17590|       |
17591|    626|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|    626|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 626, False: 0]
  ------------------
17592|    626|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|    626|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 626, False: 0]
  ------------------
17593|    626|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|    626|        return object_element;
17600|    626|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringIiEEbT_RSC_:
23119|    468|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    468|        return get_bytes(len, "string", result);
23130|    468|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesIiSC_EEbT_PKcRT0_:
23245|    468|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    468|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 468]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    468|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 468]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    468|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    679|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 285, False: 394]
  ------------------
23258|    285|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    285|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 246, False: 39]
  ------------------
23262|    285|                                       ? static_cast<std::size_t>(len)
23263|    285|                                       : chunk_size;
23264|    285|            const std::size_t old_size = result.size();
23265|    285|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    285|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    285|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 285, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    285|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    285|            chars_read += bytes_read;
23273|    285|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    285|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 74, False: 211]
  |  |  ------------------
  ------------------
23274|     74|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     74|                result.resize(old_size + bytes_read);
23279|     74|                ++chars_read;
23280|     74|                current = char_traits<char_type>::eof();
23281|     74|                return unexpect_eof(context);
23282|     74|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|    211|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|    211|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 211, False: 0]
  ------------------
23285|    211|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|    211|        }
23287|    394|        return true;
23288|    468|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockIiSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|    468|    {
23317|    468|        return false;
23318|    468|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIcEEmPT_m:
10174|  18.1k|    {
10175|  18.1k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  18.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIcEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  18.1k|    {
10255|  18.1k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|   165k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 148k, False: 17.4k]
  ------------------
10257|   148k|        {
10258|   148k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|   148k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 147k, False: 688]
  |  |  ------------------
  ------------------
10259|   147k|            {
10260|   147k|                ptr[read_index] = static_cast<char>(*current);
10261|   147k|                std::advance(current, 1);
10262|   147k|            }
10263|    688|            else
10264|    688|            {
10265|    688|                return read_index;
10266|    688|            }
10267|   148k|        }
10268|  17.4k|        return count * sizeof(T);
10269|  18.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE6stringERSC_:
17467|  17.3k|    {
17468|       |        // json_sax documents that the passed value may be moved from,
17469|       |        // so hand the buffer over instead of copying it
17470|  17.3k|        handle_value(std::move(val));
17471|  17.3k|        return true;
17472|  17.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueISC_EEPSG_OT_:
17566|  17.3k|    {
17567|  17.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 390, False: 17.0k]
  ------------------
17568|    390|        {
17569|    390|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    390|            return &root;
17576|    390|        }
17577|       |
17578|  17.0k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  17.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 10.6k, False: 6.38k]
  |  Branch (17578:9): [True: 6.38k, False: 0]
  |  Branch (17578:9): [True: 17.0k, False: 0]
  ------------------
17579|       |
17580|  17.0k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 10.6k, False: 6.38k]
  ------------------
17581|  10.6k|        {
17582|  10.6k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  10.6k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  10.6k|        }
17590|       |
17591|  6.38k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  6.38k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 6.38k, False: 0]
  ------------------
17592|  6.38k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  6.38k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 6.38k, False: 0]
  ------------------
17593|  6.38k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  6.38k|        return object_element;
17600|  6.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIhEEmPT_m:
10174|  42.6k|    {
10175|  42.6k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  42.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIhEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  42.6k|    {
10255|  42.6k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  93.9k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 51.6k, False: 42.3k]
  ------------------
10257|  51.6k|        {
10258|  51.6k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  51.6k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 51.3k, False: 300]
  |  |  ------------------
  ------------------
10259|  51.3k|            {
10260|  51.3k|                ptr[read_index] = static_cast<char>(*current);
10261|  51.3k|                std::advance(current, 1);
10262|  51.3k|            }
10263|    300|            else
10264|    300|            {
10265|    300|                return read_index;
10266|    300|            }
10267|  51.6k|        }
10268|  42.3k|        return count * sizeof(T);
10269|  42.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
17475|  2.91k|    {
17476|       |        // json_sax documents that the passed value may be moved from,
17477|       |        // so hand the buffer over instead of copying it
17478|  2.91k|        handle_value(std::move(val));
17479|  2.91k|        return true;
17480|  2.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
17566|  2.91k|    {
17567|  2.91k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 51, False: 2.86k]
  ------------------
17568|     51|        {
17569|     51|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     51|            return &root;
17576|     51|        }
17577|       |
17578|  2.86k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  2.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 2.42k, False: 433]
  |  Branch (17578:9): [True: 433, False: 0]
  |  Branch (17578:9): [True: 2.86k, False: 0]
  ------------------
17579|       |
17580|  2.86k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 2.42k, False: 433]
  ------------------
17581|  2.42k|        {
17582|  2.42k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  2.42k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  2.42k|        }
17590|       |
17591|    433|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|    433|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 433, False: 0]
  ------------------
17592|    433|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|    433|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 433, False: 0]
  ------------------
17593|    433|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|    433|        return object_element;
17600|    433|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIhLb0EEEbRT_:
22948|  40.9k|    {
22949|       |        // read in the original format
22950|       |
22951|  40.9k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  40.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 40.9k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  40.9k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 40.9k]
  |  Branch (22955:34): [Folded, False: 40.8k]
  |  Branch (22955:57): [True: 40.8k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  40.9k|        return true;
22960|  40.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIhEEbRT_PKc:
22855|  40.9k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  40.9k|        auto new_chars_read = ia.get_elements(&dest);
22859|  40.9k|        chars_read += new_chars_read;
22860|  40.9k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  40.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 171, False: 40.8k]
  |  |  ------------------
  ------------------
22861|    171|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    171|            ++chars_read;
22864|    171|            static_cast<void>(report_eof(context));
22865|    171|            return false;
22866|    171|        }
22867|  40.8k|        return true;
22868|  40.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE7booleanEb:
17443|  16.0k|    {
17444|  16.0k|        handle_value(val);
17445|  16.0k|        return true;
17446|  16.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRbEEPSG_OT_:
17566|  16.0k|    {
17567|  16.0k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 14, False: 15.9k]
  ------------------
17568|     14|        {
17569|     14|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     14|            return &root;
17576|     14|        }
17577|       |
17578|  15.9k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  15.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 11.2k, False: 4.74k]
  |  Branch (17578:9): [True: 4.74k, False: 0]
  |  Branch (17578:9): [True: 15.9k, False: 0]
  ------------------
17579|       |
17580|  15.9k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 11.2k, False: 4.74k]
  ------------------
17581|  11.2k|        {
17582|  11.2k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  11.2k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  11.2k|        }
17590|       |
17591|  4.74k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.74k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.74k, False: 0]
  ------------------
17592|  4.74k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.74k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.74k, False: 0]
  ------------------
17593|  4.74k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.74k|        return object_element;
17600|  4.74k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE4nullEv:
17437|  11.1k|    {
17438|  11.1k|        handle_value(nullptr);
17439|  11.1k|        return true;
17440|  11.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIDnEEPSG_OT_:
17566|  11.1k|    {
17567|  11.1k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 14, False: 11.1k]
  ------------------
17568|     14|        {
17569|     14|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     14|            return &root;
17576|     14|        }
17577|       |
17578|  11.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  11.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 7.05k, False: 4.06k]
  |  Branch (17578:9): [True: 4.06k, False: 0]
  |  Branch (17578:9): [True: 11.1k, False: 0]
  ------------------
17579|       |
17580|  11.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 7.05k, False: 4.06k]
  ------------------
17581|  7.05k|        {
17582|  7.05k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  7.05k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  7.05k|        }
17590|       |
17591|  4.06k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.06k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.06k, False: 0]
  ------------------
17592|  4.06k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.06k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.06k, False: 0]
  ------------------
17593|  4.06k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.06k|        return object_element;
17600|  4.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE11emit_signedIiEEbT_:
22980|  1.93k|    {
22981|  1.93k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  1.93k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.93k, False: 0]
  |  |  ------------------
  ------------------
22982|  1.93k|        {
22983|  1.93k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  1.93k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE14number_integerEl:
17449|  14.3k|    {
17450|  14.3k|        handle_value(val);
17451|  14.3k|        return true;
17452|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRlEEPSG_OT_:
17566|  14.3k|    {
17567|  14.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 209, False: 14.1k]
  ------------------
17568|    209|        {
17569|    209|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    209|            return &root;
17576|    209|        }
17577|       |
17578|  14.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  14.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 13.1k, False: 1.02k]
  |  Branch (17578:9): [True: 1.02k, False: 0]
  |  Branch (17578:9): [True: 14.1k, False: 0]
  ------------------
17579|       |
17580|  14.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 13.1k, False: 1.02k]
  ------------------
17581|  13.1k|        {
17582|  13.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  13.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  13.1k|        }
17590|       |
17591|  1.02k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.02k, False: 0]
  ------------------
17592|  1.02k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.02k, False: 0]
  ------------------
17593|  1.02k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.02k|        return object_element;
17600|  1.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE15number_unsignedEm:
17455|  27.2k|    {
17456|  27.2k|        handle_value(val);
17457|  27.2k|        return true;
17458|  27.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRmEEPSG_OT_:
17566|  27.2k|    {
17567|  27.2k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 473, False: 26.8k]
  ------------------
17568|    473|        {
17569|    473|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    473|            return &root;
17576|    473|        }
17577|       |
17578|  26.8k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  26.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 25.1k, False: 1.65k]
  |  Branch (17578:9): [True: 1.65k, False: 0]
  |  Branch (17578:9): [True: 26.8k, False: 0]
  ------------------
17579|       |
17580|  26.8k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 25.1k, False: 1.65k]
  ------------------
17581|  25.1k|        {
17582|  25.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  25.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  25.1k|        }
17590|       |
17591|  1.65k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.65k, False: 0]
  ------------------
17592|  1.65k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.65k, False: 0]
  ------------------
17593|  1.65k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.65k|        return object_element;
17600|  1.65k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIlEEbRT_PKc:
22855|  3.26k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.26k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.26k|        chars_read += new_chars_read;
22860|  3.26k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 153, False: 3.11k]
  |  |  ------------------
  ------------------
22861|    153|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    153|            ++chars_read;
22864|    153|            static_cast<void>(report_eof(context));
22865|    153|            return false;
22866|    153|        }
22867|  3.11k|        return true;
22868|  3.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIlEEmPT_m:
10174|  3.26k|    {
10175|  3.26k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  3.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIlEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  3.26k|    {
10255|  3.26k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  28.2k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 25.1k, False: 3.11k]
  ------------------
10257|  25.1k|        {
10258|  25.1k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  25.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 25.0k, False: 153]
  |  |  ------------------
  ------------------
10259|  25.0k|            {
10260|  25.0k|                ptr[read_index] = static_cast<char>(*current);
10261|  25.0k|                std::advance(current, 1);
10262|  25.0k|            }
10263|    153|            else
10264|    153|            {
10265|    153|                return read_index;
10266|    153|            }
10267|  25.1k|        }
10268|  3.11k|        return count * sizeof(T);
10269|  3.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE11emit_signedIlEEbT_:
22980|  1.90k|    {
22981|  1.90k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  1.90k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.90k, False: 0]
  |  |  ------------------
  ------------------
22982|  1.90k|        {
22983|  1.90k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  1.90k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toImEEbRT_PKc:
22855|  5.08k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  5.08k|        auto new_chars_read = ia.get_elements(&dest);
22859|  5.08k|        chars_read += new_chars_read;
22860|  5.08k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  5.08k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 144, False: 4.93k]
  |  |  ------------------
  ------------------
22861|    144|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    144|            ++chars_read;
22864|    144|            static_cast<void>(report_eof(context));
22865|    144|            return false;
22866|    144|        }
22867|  4.93k|        return true;
22868|  5.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsImEEmPT_m:
10174|  5.08k|    {
10175|  5.08k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  5.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implImEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  5.08k|    {
10255|  5.08k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  44.6k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 39.7k, False: 4.93k]
  ------------------
10257|  39.7k|        {
10258|  39.7k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  39.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 39.6k, False: 144]
  |  |  ------------------
  ------------------
10259|  39.6k|            {
10260|  39.6k|                ptr[read_index] = static_cast<char>(*current);
10261|  39.6k|                std::advance(current, 1);
10262|  39.6k|            }
10263|    144|            else
10264|    144|            {
10265|    144|                return read_index;
10266|    144|            }
10267|  39.7k|        }
10268|  4.93k|        return count * sizeof(T);
10269|  5.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE13emit_unsignedImEEbT_:
23008|  11.7k|    {
23009|  11.7k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  11.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 11.7k, False: 0]
  |  |  ------------------
  ------------------
23010|  11.7k|        {
23011|  11.7k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  11.7k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  11.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberItLb0EEEbRT_:
22948|  5.29k|    {
22949|       |        // read in the original format
22950|       |
22951|  5.29k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  5.29k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.29k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  5.29k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 5.29k]
  |  Branch (22955:34): [Folded, False: 5.14k]
  |  Branch (22955:57): [True: 5.14k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  5.29k|        return true;
22960|  5.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toItEEbRT_PKc:
22855|  5.29k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  5.29k|        auto new_chars_read = ia.get_elements(&dest);
22859|  5.29k|        chars_read += new_chars_read;
22860|  5.29k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  5.29k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 148, False: 5.14k]
  |  |  ------------------
  ------------------
22861|    148|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    148|            ++chars_read;
22864|    148|            static_cast<void>(report_eof(context));
22865|    148|            return false;
22866|    148|        }
22867|  5.14k|        return true;
22868|  5.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsItEEmPT_m:
10174|  5.29k|    {
10175|  5.29k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  5.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implItEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  5.29k|    {
10255|  5.29k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  15.6k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 10.4k, False: 5.14k]
  ------------------
10257|  10.4k|        {
10258|  10.4k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  10.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 10.3k, False: 148]
  |  |  ------------------
  ------------------
10259|  10.3k|            {
10260|  10.3k|                ptr[read_index] = static_cast<char>(*current);
10261|  10.3k|                std::advance(current, 1);
10262|  10.3k|            }
10263|    148|            else
10264|    148|            {
10265|    148|                return read_index;
10266|    148|            }
10267|  10.4k|        }
10268|  5.14k|        return count * sizeof(T);
10269|  5.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIjLb0EEEbRT_:
22948|  3.13k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.13k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.13k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.13k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.13k]
  |  Branch (22955:34): [Folded, False: 3.03k]
  |  Branch (22955:57): [True: 3.03k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.13k|        return true;
22960|  3.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIjEEbRT_PKc:
22855|  3.13k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.13k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.13k|        chars_read += new_chars_read;
22860|  3.13k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 3.03k]
  |  |  ------------------
  ------------------
22861|    103|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    103|            ++chars_read;
22864|    103|            static_cast<void>(report_eof(context));
22865|    103|            return false;
22866|    103|        }
22867|  3.03k|        return true;
22868|  3.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIjEEmPT_m:
10174|  3.13k|    {
10175|  3.13k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  3.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIjEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  3.13k|    {
10255|  3.13k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  15.3k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 12.2k, False: 3.03k]
  ------------------
10257|  12.2k|        {
10258|  12.2k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  12.2k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 12.1k, False: 103]
  |  |  ------------------
  ------------------
10259|  12.1k|            {
10260|  12.1k|                ptr[read_index] = static_cast<char>(*current);
10261|  12.1k|                std::advance(current, 1);
10262|  12.1k|            }
10263|    103|            else
10264|    103|            {
10265|    103|                return read_index;
10266|    103|            }
10267|  12.2k|        }
10268|  3.03k|        return count * sizeof(T);
10269|  3.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberImLb0EEEbRT_:
22948|  5.08k|    {
22949|       |        // read in the original format
22950|       |
22951|  5.08k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  5.08k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.08k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  5.08k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 5.08k]
  |  Branch (22955:34): [Folded, False: 4.93k]
  |  Branch (22955:57): [True: 4.93k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  5.08k|        return true;
22960|  5.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringIjEEbT_RSC_:
23119|    415|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    415|        return get_bytes(len, "string", result);
23130|    415|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesIjSC_EEbT_PKcRT0_:
23245|    415|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    415|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 415]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    415|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 415]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    415|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    601|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 278, False: 323]
  ------------------
23258|    278|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    278|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 223, False: 55]
  ------------------
23262|    278|                                       ? static_cast<std::size_t>(len)
23263|    278|                                       : chunk_size;
23264|    278|            const std::size_t old_size = result.size();
23265|    278|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    278|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    278|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 278, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    278|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    278|            chars_read += bytes_read;
23273|    278|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    278|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 186]
  |  |  ------------------
  ------------------
23274|     92|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     92|                result.resize(old_size + bytes_read);
23279|     92|                ++chars_read;
23280|     92|                current = char_traits<char_type>::eof();
23281|     92|                return unexpect_eof(context);
23282|     92|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|    186|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|    186|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 186, False: 0]
  ------------------
23285|    186|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|    186|        }
23287|    323|        return true;
23288|    415|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockIjSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|    415|    {
23317|    415|        return false;
23318|    415|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesIhSC_EEbT_PKcRT0_:
23245|  20.7k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  20.7k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 20.7k]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  20.7k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 20.7k]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  20.7k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  32.3k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 11.6k, False: 20.6k]
  ------------------
23258|  11.6k|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|  11.6k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 11.6k, False: 0]
  ------------------
23262|  11.6k|                                       ? static_cast<std::size_t>(len)
23263|  11.6k|                                       : chunk_size;
23264|  11.6k|            const std::size_t old_size = result.size();
23265|  11.6k|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|  11.6k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|  11.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 11.6k, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|  11.6k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|  11.6k|            chars_read += bytes_read;
23273|  11.6k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|  11.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 11.6k]
  |  |  ------------------
  ------------------
23274|     34|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     34|                result.resize(old_size + bytes_read);
23279|     34|                ++chars_read;
23280|     34|                current = char_traits<char_type>::eof();
23281|     34|                return unexpect_eof(context);
23282|     34|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|  11.6k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|  11.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 11.6k, False: 0]
  ------------------
23285|  11.6k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|  11.6k|        }
23287|  20.6k|        return true;
23288|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockIhSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|  20.7k|    {
23317|  20.7k|        return false;
23318|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesItSC_EEbT_PKcRT0_:
23245|    916|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    916|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 916]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    916|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 916]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    916|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  1.41k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 567, False: 849]
  ------------------
23258|    567|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    567|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 546, False: 21]
  ------------------
23262|    567|                                       ? static_cast<std::size_t>(len)
23263|    567|                                       : chunk_size;
23264|    567|            const std::size_t old_size = result.size();
23265|    567|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    567|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    567|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 567, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    567|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    567|            chars_read += bytes_read;
23273|    567|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    567|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 67, False: 500]
  |  |  ------------------
  ------------------
23274|     67|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     67|                result.resize(old_size + bytes_read);
23279|     67|                ++chars_read;
23280|     67|                current = char_traits<char_type>::eof();
23281|     67|                return unexpect_eof(context);
23282|     67|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|    500|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|    500|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 500, False: 0]
  ------------------
23285|    500|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|    500|        }
23287|    849|        return true;
23288|    916|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockItSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|    916|    {
23317|    916|        return false;
23318|    916|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesImSC_EEbT_PKcRT0_:
23245|    533|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    533|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 533]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    533|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 533]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    533|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    722|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 374, False: 348]
  ------------------
23258|    374|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    374|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 222, False: 152]
  ------------------
23262|    374|                                       ? static_cast<std::size_t>(len)
23263|    374|                                       : chunk_size;
23264|    374|            const std::size_t old_size = result.size();
23265|    374|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    374|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    374|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 374, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    374|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    374|            chars_read += bytes_read;
23273|    374|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    374|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 185, False: 189]
  |  |  ------------------
  ------------------
23274|    185|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    185|                result.resize(old_size + bytes_read);
23279|    185|                ++chars_read;
23280|    185|                current = char_traits<char_type>::eof();
23281|    185|                return unexpect_eof(context);
23282|    185|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|    189|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|    189|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 189, False: 0]
  ------------------
23285|    189|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|    189|        }
23287|    348|        return true;
23288|    533|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockImSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|    533|    {
23317|    533|        return false;
23318|    533|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE13emit_unsignedIhEEbT_:
23008|  7.94k|    {
23009|  7.94k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  7.94k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 7.94k, False: 0]
  |  |  ------------------
  ------------------
23010|  7.94k|        {
23011|  7.94k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  7.94k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  7.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE13emit_unsignedItEEbT_:
23008|  2.99k|    {
23009|  2.99k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  2.99k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.99k, False: 0]
  |  |  ------------------
  ------------------
23010|  2.99k|        {
23011|  2.99k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  2.99k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  2.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE13emit_unsignedIjEEbT_:
23008|  1.87k|    {
23009|  1.87k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  1.87k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.87k, False: 0]
  |  |  ------------------
  ------------------
23010|  1.87k|        {
23011|  1.87k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  1.87k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
23245|  3.04k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  3.04k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 3.04k]
  |  Branch (23248:50): [Folded, False: 0]
  ------------------
23249|  3.04k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 3.04k]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  3.04k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  4.53k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 1.62k, False: 2.91k]
  ------------------
23258|  1.62k|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|  1.62k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 1.53k, False: 91]
  ------------------
23262|  1.62k|                                       ? static_cast<std::size_t>(len)
23263|  1.62k|                                       : chunk_size;
23264|  1.62k|            const std::size_t old_size = result.size();
23265|  1.62k|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|  1.62k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|  1.62k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 1.62k, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|  1.62k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|  1.62k|            chars_read += bytes_read;
23273|  1.62k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|  1.62k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 129, False: 1.49k]
  |  |  ------------------
  ------------------
23274|    129|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    129|                result.resize(old_size + bytes_read);
23279|    129|                ++chars_read;
23280|    129|                current = char_traits<char_type>::eof();
23281|    129|                return unexpect_eof(context);
23282|    129|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|  1.49k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|  1.49k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 1.49k, False: 0]
  ------------------
23285|  1.49k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|  1.49k|        }
23287|  2.91k|        return true;
23288|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockImNS0_27byte_container_with_subtypeISF_EEEEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|  3.04k|    {
23317|  3.04k|        return false;
23318|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE11enter_arrayEmm:
18630|  73.4k|    {
18631|  73.4k|        return enter_container(/*is_object*/false, len, type_marker);
18632|  73.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE12enter_objectEmm:
18636|  14.1k|    {
18637|  14.1k|        return enter_container(/*is_object*/true, len, type_marker);
18638|  14.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE15unexpected_byteEPKcSQ_:
23421|    150|    {
23422|    150|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
23423|    150|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE14get_half_floatEb:
23054|  29.6k|    {
23055|  29.6k|        const auto byte1_raw = get();
23056|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
23057|      0|        {
23058|      0|            return false;
23059|      0|        }
23060|  29.6k|        const auto byte2_raw = get();
23061|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
23062|      0|        {
23063|      0|            return false;
23064|      0|        }
23065|       |
23066|  29.6k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
23067|  29.6k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
23068|       |
23069|       |        // Code from RFC 8949, Appendix D, Figure 3:
23070|       |        // As half-precision floating-point numbers were only added
23071|       |        // to IEEE 754 in 2008, today's programming platforms often
23072|       |        // still only have limited support for them. It is very
23073|       |        // easy to include at least decoding support for them even
23074|       |        // without such support. An example of a small decoder for
23075|       |        // half-precision floating-point numbers in the C language
23076|       |        // is shown in Fig. 3.
23077|  29.6k|        const auto half = little_endian
  ------------------
  |  Branch (23077:27): [True: 29.5k, False: 96]
  ------------------
23078|  29.6k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
23079|  29.6k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
23080|  29.6k|        const double val = [&half]
23081|  29.6k|        {
23082|  29.6k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  29.6k|            const unsigned int mant = half & 0x3FFu;
23084|  29.6k|            JSON_ASSERT(exp <= 31);
23085|  29.6k|            JSON_ASSERT(mant <= 1023);
23086|  29.6k|            switch (exp)
23087|  29.6k|            {
23088|  29.6k|                case 0:
23089|  29.6k|                    return std::ldexp(mant, -24);
23090|  29.6k|                case 31:
23091|  29.6k|                    return (mant == 0)
23092|  29.6k|                    ? std::numeric_limits<double>::infinity()
23093|  29.6k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  29.6k|                default:
23095|  29.6k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  29.6k|            }
23097|  29.6k|        }();
23098|  29.6k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (23098:34): [True: 5.86k, False: 23.7k]
  ------------------
23099|  29.6k|                                 ? static_cast<number_float_t>(-val)
23100|  29.6k|                                 : static_cast<number_float_t>(val), no_source);
23101|  29.6k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE14get_half_floatEbENKUlvE_clEv:
23081|  29.5k|        {
23082|  29.5k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  29.5k|            const unsigned int mant = half & 0x3FFu;
23084|  29.5k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2643|  29.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23084:13): [True: 29.5k, False: 0]
  ------------------
23085|  29.5k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2643|  29.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23085:13): [True: 29.5k, False: 0]
  ------------------
23086|  29.5k|            switch (exp)
23087|  29.5k|            {
23088|  6.40k|                case 0:
  ------------------
  |  Branch (23088:17): [True: 6.40k, False: 23.1k]
  ------------------
23089|  6.40k|                    return std::ldexp(mant, -24);
23090|  1.96k|                case 31:
  ------------------
  |  Branch (23090:17): [True: 1.96k, False: 27.5k]
  ------------------
23091|  1.96k|                    return (mant == 0)
  ------------------
  |  Branch (23091:28): [True: 2, False: 1.96k]
  ------------------
23092|  1.96k|                    ? std::numeric_limits<double>::infinity()
23093|  1.96k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  21.1k|                default:
  ------------------
  |  Branch (23094:17): [True: 21.1k, False: 8.37k]
  ------------------
23095|  21.1k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  29.5k|            }
23097|  29.5k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIfLb0EEEbRT_:
22948|  2.31k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.31k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.31k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.31k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.31k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.31k]
  |  Branch (22955:34): [Folded, False: 2.21k]
  |  Branch (22955:57): [True: 2.21k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.31k|        return true;
22960|  2.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIfEEbRT_PKc:
22855|  2.31k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.31k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.31k|        chars_read += new_chars_read;
22860|  2.31k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.31k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 99, False: 2.21k]
  |  |  ------------------
  ------------------
22861|     99|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|     99|            ++chars_read;
22864|     99|            static_cast<void>(report_eof(context));
22865|     99|            return false;
22866|     99|        }
22867|  2.21k|        return true;
22868|  2.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIfEEmPT_m:
10174|  2.31k|    {
10175|  2.31k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  2.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIfEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  2.31k|    {
10255|  2.31k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  11.1k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 8.98k, False: 2.21k]
  ------------------
10257|  8.98k|        {
10258|  8.98k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  8.98k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 8.88k, False: 99]
  |  |  ------------------
  ------------------
10259|  8.88k|            {
10260|  8.88k|                ptr[read_index] = static_cast<char>(*current);
10261|  8.88k|                std::advance(current, 1);
10262|  8.88k|            }
10263|     99|            else
10264|     99|            {
10265|     99|                return read_index;
10266|     99|            }
10267|  8.98k|        }
10268|  2.21k|        return count * sizeof(T);
10269|  2.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10emit_floatIfEEbT_:
23034|  2.21k|    {
23035|  2.21k|        const auto result = static_cast<number_float_t>(number);
23036|  2.21k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  4.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.21k]
  |  |  |  Branch (1697:94): [True: 1.93k, False: 282]
  |  |  |  Branch (1697:94): [True: 0, False: 1.93k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  2.21k|        return sax->number_float(result, no_source);
23041|  2.21k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIdLb0EEEbRT_:
22948|  1.22k|    {
22949|       |        // read in the original format
22950|       |
22951|  1.22k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  1.22k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.22k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  1.22k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 1.22k]
  |  Branch (22955:34): [Folded, False: 1.12k]
  |  Branch (22955:57): [True: 1.12k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  1.22k|        return true;
22960|  1.22k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE22get_string_with_lengthIhEEbRSC_PKc:
23198|  20.7k|    {
23199|  20.7k|        NumberType len{};
23200|  20.7k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 20.7k, False: 18]
  |  Branch (23200:35): [True: 20.6k, False: 34]
  |  Branch (23200:62): [True: 20.6k, False: 0]
  ------------------
23201|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringIhEEbT_RSC_:
23119|  20.7k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  20.7k|        return get_bytes(len, "string", result);
23130|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE22get_string_with_lengthItEEbRSC_PKc:
23198|    924|    {
23199|    924|        NumberType len{};
23200|    924|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 916, False: 8]
  |  Branch (23200:35): [True: 849, False: 67]
  |  Branch (23200:62): [True: 849, False: 0]
  ------------------
23201|    924|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringItEEbT_RSC_:
23119|    916|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    916|        return get_bytes(len, "string", result);
23130|    916|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE22get_string_with_lengthIjEEbRSC_PKc:
23198|    426|    {
23199|    426|        NumberType len{};
23200|    426|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 415, False: 11]
  |  Branch (23200:35): [True: 323, False: 92]
  |  Branch (23200:62): [True: 323, False: 0]
  ------------------
23201|    426|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIaLb0EEEbRT_:
22948|  25.7k|    {
22949|       |        // read in the original format
22950|       |
22951|  25.7k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  25.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 25.7k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  25.7k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 25.7k]
  |  Branch (22955:34): [Folded, False: 25.6k]
  |  Branch (22955:57): [True: 25.6k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  25.7k|        return true;
22960|  25.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIaEEbRT_PKc:
22855|  25.7k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  25.7k|        auto new_chars_read = ia.get_elements(&dest);
22859|  25.7k|        chars_read += new_chars_read;
22860|  25.7k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  25.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 25.6k]
  |  |  ------------------
  ------------------
22861|    114|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    114|            ++chars_read;
22864|    114|            static_cast<void>(report_eof(context));
22865|    114|            return false;
22866|    114|        }
22867|  25.6k|        return true;
22868|  25.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIaEEmPT_m:
10174|  25.7k|    {
10175|  25.7k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  25.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIaEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  25.7k|    {
10255|  25.7k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  51.4k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 25.7k, False: 25.6k]
  ------------------
10257|  25.7k|        {
10258|  25.7k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  25.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 25.6k, False: 114]
  |  |  ------------------
  ------------------
10259|  25.6k|            {
10260|  25.6k|                ptr[read_index] = static_cast<char>(*current);
10261|  25.6k|                std::advance(current, 1);
10262|  25.6k|            }
10263|    114|            else
10264|    114|            {
10265|    114|                return read_index;
10266|    114|            }
10267|  25.7k|        }
10268|  25.6k|        return count * sizeof(T);
10269|  25.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE11emit_signedIaEEbT_:
22980|  7.00k|    {
22981|  7.00k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  7.00k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 7.00k, False: 0]
  |  |  ------------------
  ------------------
22982|  7.00k|        {
22983|  7.00k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  7.00k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIsLb0EEEbRT_:
22948|  5.62k|    {
22949|       |        // read in the original format
22950|       |
22951|  5.62k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  5.62k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.62k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  5.62k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 5.62k]
  |  Branch (22955:34): [Folded, False: 5.48k]
  |  Branch (22955:57): [True: 5.48k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  5.62k|        return true;
22960|  5.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE6get_toIsEEbRT_PKc:
22855|  5.62k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  5.62k|        auto new_chars_read = ia.get_elements(&dest);
22859|  5.62k|        chars_read += new_chars_read;
22860|  5.62k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  5.62k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 135, False: 5.48k]
  |  |  ------------------
  ------------------
22861|    135|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    135|            ++chars_read;
22864|    135|            static_cast<void>(report_eof(context));
22865|    135|            return false;
22866|    135|        }
22867|  5.48k|        return true;
22868|  5.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIsEEmPT_m:
10174|  5.62k|    {
10175|  5.62k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
10176|  5.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIsEEmPT_mNS3_17integral_constantIbLb0EEE:
10254|  5.62k|    {
10255|  5.62k|        auto* ptr = reinterpret_cast<char*>(dest);
10256|  16.6k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (10256:42): [True: 11.1k, False: 5.48k]
  ------------------
10257|  11.1k|        {
10258|  11.1k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|  11.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 11.0k, False: 135]
  |  |  ------------------
  ------------------
10259|  11.0k|            {
10260|  11.0k|                ptr[read_index] = static_cast<char>(*current);
10261|  11.0k|                std::advance(current, 1);
10262|  11.0k|            }
10263|    135|            else
10264|    135|            {
10265|    135|                return read_index;
10266|    135|            }
10267|  11.1k|        }
10268|  5.48k|        return count * sizeof(T);
10269|  5.62k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE11emit_signedIsEEbT_:
22980|  3.23k|    {
22981|  3.23k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  3.23k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 3.23k, False: 0]
  |  |  ------------------
  ------------------
22982|  3.23k|        {
22983|  3.23k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  3.23k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIiLb0EEEbRT_:
22948|  3.38k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.38k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.38k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.38k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.38k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.38k]
  |  Branch (22955:34): [Folded, False: 3.25k]
  |  Branch (22955:57): [True: 3.25k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.38k|        return true;
22960|  3.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_numberIlLb0EEEbRT_:
22948|  3.26k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.26k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.26k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.26k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.26k]
  |  Branch (22955:34): [Folded, False: 3.11k]
  |  Branch (22955:57): [True: 3.11k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.26k|        return true;
22960|  3.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE21parse_ubjson_internalEv:
21219|  14.9k|    {
21220|       |        // the key currently being read; hoisted out of the loop so that its
21221|       |        // capacity is reused across elements and across nesting levels
21222|  14.9k|        string_t key;
21223|       |
21224|       |        // the type marker of the value to read next
21225|  14.9k|        char_int_type prefix = get_ignore_noop();
21226|       |
21227|   206k|        while (true)
  ------------------
  |  Branch (21227:16): [True: 199k, Folded]
  ------------------
21228|   199k|        {
21229|   199k|            const std::size_t depth = container_stack.size();
21230|       |
21231|   199k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1697|   199k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 199k]
  |  |  ------------------
  ------------------
21232|      0|            {
21233|      0|                return false;
21234|      0|            }
21235|       |
21236|       |            // the value begun here is complete once it is not inside anything
21237|   199k|            if (container_stack.empty())
  ------------------
  |  Branch (21237:17): [True: 2.70k, False: 196k]
  ------------------
21238|  2.70k|            {
21239|  2.70k|                return true;
21240|  2.70k|            }
21241|       |
21242|       |            // a value was completed rather than a container opened; a
21243|       |            // container that ends at a marker needs the next byte to test
21244|   196k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (21244:17): [True: 102k, False: 93.6k]
  |  Branch (21244:52): [True: 62.8k, False: 40.0k]
  ------------------
21245|  62.8k|            {
21246|  62.8k|                get_ignore_noop();
21247|  62.8k|            }
21248|       |
21249|       |            // advance to the next element, closing the containers that ended.
21250|       |            // top is a copy, not a reference: it must stay valid across the
21251|       |            // pop_back() below, which destroys the container_stack element it
21252|       |            // would otherwise alias.
21253|   196k|            for (;;)
21254|   241k|            {
21255|   241k|                const container_frame top = container_stack.back();
21256|       |
21257|   241k|                if (top.remaining != npos)
  ------------------
  |  Branch (21257:21): [True: 45.9k, False: 195k]
  ------------------
21258|  45.9k|                {
21259|  45.9k|                    if (top.remaining != 0)
  ------------------
  |  Branch (21259:25): [True: 42.1k, False: 3.84k]
  ------------------
21260|  42.1k|                    {
21261|  42.1k|                        --container_stack.back().remaining;
21262|  42.1k|                        if (top.is_object)
  ------------------
  |  Branch (21262:29): [True: 789, False: 41.3k]
  ------------------
21263|    789|                        {
21264|    789|                            key.clear();
21265|    789|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1697|  1.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 789]
  |  |  |  Branch (1697:94): [True: 68, False: 721]
  |  |  |  Branch (1697:94): [True: 0, False: 721]
  |  |  ------------------
  ------------------
21266|      0|                            {
21267|      0|                                return false;
21268|      0|                            }
21269|    789|                        }
21270|       |                        // an optimized container gives its elements no marker
21271|  42.1k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (21271:34): [True: 40.0k, False: 2.10k]
  ------------------
21272|  42.1k|                        break;
21273|  42.1k|                    }
21274|  45.9k|                }
21275|       |                // the end marker is compared against a literal rather than
21276|       |                // against a conditional expression, because char_int_type is
21277|       |                // unsigned for some input adapters and MSVC then reports the
21278|       |                // comparison as a signed/unsigned mismatch
21279|   195k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (21279:26): [True: 33.4k, False: 162k]
  |  Branch (21279:26): [True: 143k, False: 52.6k]
  ------------------
21280|   143k|                {
21281|       |                    // a container that ends at a marker is never optimized, so
21282|       |                    // every element carries its own marker; for an object the
21283|       |                    // byte tested above is the first byte of the key
21284|   143k|                    if (top.is_object)
  ------------------
  |  Branch (21284:25): [True: 22.7k, False: 120k]
  ------------------
21285|  22.7k|                    {
21286|  22.7k|                        key.clear();
21287|  22.7k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1697|  44.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 22.7k]
  |  |  |  Branch (1697:94): [True: 989, False: 21.7k]
  |  |  |  Branch (1697:94): [True: 0, False: 21.7k]
  |  |  ------------------
  ------------------
21288|      0|                        {
21289|      0|                            return false;
21290|      0|                        }
21291|  22.7k|                        prefix = get_ignore_noop();
21292|  22.7k|                    }
21293|   120k|                    else
21294|   120k|                    {
21295|   120k|                        prefix = current;
21296|   120k|                    }
21297|   143k|                    break;
21298|   143k|                }
21299|       |
21300|  56.4k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1697|  56.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 56.4k]
  |  |  ------------------
  ------------------
21301|      0|                {
21302|      0|                    return false;
21303|      0|                }
21304|  56.4k|                if (container_stack.empty())
  ------------------
  |  Branch (21304:21): [True: 4.86k, False: 51.5k]
  ------------------
21305|  4.86k|                {
21306|  4.86k|                    return true;
21307|  4.86k|                }
21308|       |                // the container that just ended was an element of the one
21309|       |                // below it, which may need the next byte for its own test
21310|  51.5k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (21310:21): [True: 51.2k, False: 305]
  ------------------
21311|  51.2k|                {
21312|  51.2k|                    get_ignore_noop();
21313|  51.2k|                }
21314|  51.5k|            }
21315|   196k|        }
21316|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE16get_ubjson_valueEm:
21816|   209k|    {
21817|   209k|        switch (prefix)
21818|   209k|        {
21819|  1.30k|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (21819:13): [True: 1.30k, False: 207k]
  ------------------
21820|  1.30k|                return unexpect_eof("value");
21821|       |
21822|  10.6k|            case 'T':  // true
  ------------------
  |  Branch (21822:13): [True: 10.6k, False: 198k]
  ------------------
21823|  10.6k|                return sax->boolean(true);
21824|  5.36k|            case 'F':  // false
  ------------------
  |  Branch (21824:13): [True: 5.36k, False: 203k]
  ------------------
21825|  5.36k|                return sax->boolean(false);
21826|       |
21827|  11.1k|            case 'Z':  // null
  ------------------
  |  Branch (21827:13): [True: 11.1k, False: 198k]
  ------------------
21828|  11.1k|                return sax->null();
21829|       |
21830|  1.14k|            case 'B':  // byte
  ------------------
  |  Branch (21830:13): [True: 1.14k, False: 208k]
  ------------------
21831|  1.14k|            {
21832|  1.14k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21832:21): [True: 0, False: 1.14k]
  ------------------
21833|      0|                {
21834|      0|                    break;
21835|      0|                }
21836|  1.14k|                std::uint8_t number{};
21837|  1.14k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21837:24): [True: 1.13k, False: 6]
  |  Branch (21837:46): [True: 1.13k, False: 0]
  ------------------
21838|  1.14k|            }
21839|       |
21840|  6.92k|            case 'U':
  ------------------
  |  Branch (21840:13): [True: 6.92k, False: 202k]
  ------------------
21841|  6.92k|            {
21842|  6.92k|                std::uint8_t number{};
21843|  6.92k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21843:24): [True: 6.80k, False: 116]
  |  Branch (21843:46): [True: 6.80k, False: 0]
  ------------------
21844|  1.14k|            }
21845|       |
21846|  7.09k|            case 'i':
  ------------------
  |  Branch (21846:13): [True: 7.09k, False: 202k]
  ------------------
21847|  7.09k|            {
21848|  7.09k|                std::int8_t number{};
21849|  7.09k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21849:24): [True: 7.00k, False: 87]
  |  Branch (21849:46): [True: 7.00k, False: 0]
  ------------------
21850|  1.14k|            }
21851|       |
21852|  3.32k|            case 'I':
  ------------------
  |  Branch (21852:13): [True: 3.32k, False: 205k]
  ------------------
21853|  3.32k|            {
21854|  3.32k|                std::int16_t number{};
21855|  3.32k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21855:24): [True: 3.23k, False: 88]
  |  Branch (21855:46): [True: 3.23k, False: 0]
  ------------------
21856|  1.14k|            }
21857|       |
21858|  2.02k|            case 'l':
  ------------------
  |  Branch (21858:13): [True: 2.02k, False: 207k]
  ------------------
21859|  2.02k|            {
21860|  2.02k|                std::int32_t number{};
21861|  2.02k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21861:24): [True: 1.93k, False: 92]
  |  Branch (21861:46): [True: 1.93k, False: 0]
  ------------------
21862|  1.14k|            }
21863|       |
21864|  1.99k|            case 'L':
  ------------------
  |  Branch (21864:13): [True: 1.99k, False: 207k]
  ------------------
21865|  1.99k|            {
21866|  1.99k|                std::int64_t number{};
21867|  1.99k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21867:24): [True: 1.90k, False: 94]
  |  Branch (21867:46): [True: 1.90k, False: 0]
  ------------------
21868|  1.14k|            }
21869|       |
21870|  3.08k|            case 'u':
  ------------------
  |  Branch (21870:13): [True: 3.08k, False: 206k]
  ------------------
21871|  3.08k|            {
21872|  3.08k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21872:21): [True: 0, False: 3.08k]
  ------------------
21873|      0|                {
21874|      0|                    break;
21875|      0|                }
21876|  3.08k|                std::uint16_t number{};
21877|  3.08k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21877:24): [True: 2.99k, False: 93]
  |  Branch (21877:46): [True: 2.99k, False: 0]
  ------------------
21878|  3.08k|            }
21879|       |
21880|  1.93k|            case 'm':
  ------------------
  |  Branch (21880:13): [True: 1.93k, False: 207k]
  ------------------
21881|  1.93k|            {
21882|  1.93k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21882:21): [True: 0, False: 1.93k]
  ------------------
21883|      0|                {
21884|      0|                    break;
21885|      0|                }
21886|  1.93k|                std::uint32_t number{};
21887|  1.93k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21887:24): [True: 1.87k, False: 62]
  |  Branch (21887:46): [True: 1.87k, False: 0]
  ------------------
21888|  1.93k|            }
21889|       |
21890|  3.41k|            case 'M':
  ------------------
  |  Branch (21890:13): [True: 3.41k, False: 205k]
  ------------------
21891|  3.41k|            {
21892|  3.41k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21892:21): [True: 0, False: 3.41k]
  ------------------
21893|      0|                {
21894|      0|                    break;
21895|      0|                }
21896|  3.41k|                std::uint64_t number{};
21897|  3.41k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21897:24): [True: 3.32k, False: 88]
  |  Branch (21897:46): [True: 3.32k, False: 0]
  ------------------
21898|  3.41k|            }
21899|       |
21900|  29.6k|            case 'h':
  ------------------
  |  Branch (21900:13): [True: 29.6k, False: 179k]
  ------------------
21901|  29.6k|            {
21902|  29.6k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21902:21): [True: 0, False: 29.6k]
  ------------------
21903|      0|                {
21904|      0|                    break;
21905|      0|                }
21906|  29.6k|                return get_half_float(true);
21907|  29.6k|            }
21908|       |
21909|  2.31k|            case 'd':
  ------------------
  |  Branch (21909:13): [True: 2.31k, False: 206k]
  ------------------
21910|  2.31k|            {
21911|  2.31k|                float number{};
21912|  2.31k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21912:24): [True: 2.21k, False: 99]
  |  Branch (21912:46): [True: 2.21k, False: 0]
  ------------------
21913|  29.6k|            }
21914|       |
21915|  1.22k|            case 'D':
  ------------------
  |  Branch (21915:13): [True: 1.22k, False: 208k]
  ------------------
21916|  1.22k|            {
21917|  1.22k|                double number{};
21918|  1.22k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21918:24): [True: 1.12k, False: 92]
  |  Branch (21918:46): [True: 1.12k, False: 0]
  ------------------
21919|  29.6k|            }
21920|       |
21921|  7.55k|            case 'H':
  ------------------
  |  Branch (21921:13): [True: 7.55k, False: 201k]
  ------------------
21922|  7.55k|            {
21923|  7.55k|                return get_ubjson_high_precision_number();
21924|  29.6k|            }
21925|       |
21926|  8.48k|            case 'C':  // char
  ------------------
  |  Branch (21926:13): [True: 8.48k, False: 200k]
  ------------------
21927|  8.48k|            {
21928|  8.48k|                get();
21929|  8.48k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|  8.48k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 8.48k]
  |  |  ------------------
  ------------------
21930|      0|                {
21931|      0|                    return false;
21932|      0|                }
21933|  8.48k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|  8.48k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2, False: 8.48k]
  |  |  ------------------
  ------------------
21934|      2|                {
21935|      2|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
21936|      2|                }
21937|  8.48k|                string_t s(1, static_cast<typename string_t::value_type>(current));
21938|  8.48k|                return sax->string(s);
21939|  8.48k|            }
21940|       |
21941|  6.10k|            case 'S':  // string
  ------------------
  |  Branch (21941:13): [True: 6.10k, False: 203k]
  ------------------
21942|  6.10k|            {
21943|  6.10k|                string_t s;
21944|  6.10k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (21944:24): [True: 5.94k, False: 165]
  |  Branch (21944:48): [True: 5.94k, False: 0]
  ------------------
21945|  8.48k|            }
21946|       |
21947|  80.0k|            case '[':  // array
  ------------------
  |  Branch (21947:13): [True: 80.0k, False: 129k]
  ------------------
21948|  80.0k|                return get_ubjson_array();
21949|       |
21950|  14.3k|            case '{':  // object
  ------------------
  |  Branch (21950:13): [True: 14.3k, False: 194k]
  ------------------
21951|  14.3k|                return get_ubjson_object();
21952|       |
21953|    150|            default: // anything else
  ------------------
  |  Branch (21953:13): [True: 150, False: 209k]
  ------------------
21954|    150|                break;
21955|   209k|        }
21956|    150|        return unexpected_byte("invalid byte", "value");
21957|   209k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE32get_ubjson_high_precision_numberEv:
22198|  7.55k|    {
22199|       |        // get the size of the following number string
22200|  7.55k|        std::size_t size{};
22201|  7.55k|        bool no_ndarray = true;
22202|  7.55k|        auto res = get_ubjson_size_value(size, no_ndarray);
22203|  7.55k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1697|  7.55k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.55k]
  |  |  ------------------
  ------------------
22204|      0|        {
22205|      0|            return res;
22206|      0|        }
22207|       |
22208|       |        // get number string
22209|  7.55k|        std::vector<char> number_vector;
22210|   101k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (22210:33): [True: 94.3k, False: 7.55k]
  ------------------
22211|  94.3k|        {
22212|  94.3k|            get();
22213|  94.3k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  94.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 94.3k]
  |  |  ------------------
  ------------------
22214|      0|            {
22215|      0|                return false;
22216|      0|            }
22217|       |            // the lexer would stop at a NUL and accept the digits before it
22218|  94.3k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1697|  94.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 4, False: 94.3k]
  |  |  ------------------
  ------------------
22219|      4|            {
22220|      4|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22221|      4|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
22222|      4|            }
22223|  94.3k|            number_vector.push_back(static_cast<char>(current));
22224|  94.3k|        }
22225|       |
22226|       |        // parse number string
22227|  7.55k|        using ia_type = decltype(detail::input_adapter(number_vector));
22228|  7.55k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
22229|  7.55k|        const auto result_number = number_lexer.scan();
22230|  7.55k|        const auto number_string = number_lexer.get_token_string();
22231|  7.55k|        const auto result_remainder = number_lexer.scan();
22232|       |
22233|  7.55k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
22234|       |
22235|  7.55k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1697|  7.55k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1.33k, False: 6.21k]
  |  |  ------------------
  ------------------
22236|  1.33k|        {
22237|  1.33k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22238|  1.33k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22239|  1.33k|        }
22240|       |
22241|  6.21k|        switch (result_number)
22242|  6.21k|        {
22243|    310|            case token_type::value_integer:
  ------------------
  |  Branch (22243:13): [True: 310, False: 5.90k]
  ------------------
22244|    310|                return sax->number_integer(number_lexer.get_number_integer());
22245|  1.73k|            case token_type::value_unsigned:
  ------------------
  |  Branch (22245:13): [True: 1.73k, False: 4.48k]
  ------------------
22246|  1.73k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
22247|  3.20k|            case token_type::value_float:
  ------------------
  |  Branch (22247:13): [True: 3.20k, False: 3.01k]
  ------------------
22248|  3.20k|            {
22249|  3.20k|                const auto parsed_float = number_lexer.get_number_float();
22250|  3.20k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1697|  3.20k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 3.09k]
  |  |  ------------------
  ------------------
22251|    114|                {
22252|    114|                    return sax->parse_error(
22253|    114|                               chars_read,
22254|    114|                               number_string,
22255|    114|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
22256|    114|                }
22257|       |                // number_string is a std::string, while the SAX interface takes a
22258|       |                // string_t; convert explicitly, as the two are only implicitly
22259|       |                // convertible for some string types
22260|  3.09k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
22261|  3.20k|            }
22262|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (22262:13): [True: 0, False: 6.21k]
  ------------------
22263|      1|            case token_type::literal_true:
  ------------------
  |  Branch (22263:13): [True: 1, False: 6.21k]
  ------------------
22264|      2|            case token_type::literal_false:
  ------------------
  |  Branch (22264:13): [True: 1, False: 6.21k]
  ------------------
22265|      2|            case token_type::literal_null:
  ------------------
  |  Branch (22265:13): [True: 0, False: 6.21k]
  ------------------
22266|      4|            case token_type::value_string:
  ------------------
  |  Branch (22266:13): [True: 2, False: 6.21k]
  ------------------
22267|      6|            case token_type::begin_array:
  ------------------
  |  Branch (22267:13): [True: 2, False: 6.21k]
  ------------------
22268|      7|            case token_type::begin_object:
  ------------------
  |  Branch (22268:13): [True: 1, False: 6.21k]
  ------------------
22269|      8|            case token_type::end_array:
  ------------------
  |  Branch (22269:13): [True: 1, False: 6.21k]
  ------------------
22270|      9|            case token_type::end_object:
  ------------------
  |  Branch (22270:13): [True: 1, False: 6.21k]
  ------------------
22271|     10|            case token_type::name_separator:
  ------------------
  |  Branch (22271:13): [True: 1, False: 6.21k]
  ------------------
22272|     11|            case token_type::value_separator:
  ------------------
  |  Branch (22272:13): [True: 1, False: 6.21k]
  ------------------
22273|    566|            case token_type::parse_error:
  ------------------
  |  Branch (22273:13): [True: 555, False: 5.65k]
  ------------------
22274|    612|            case token_type::end_of_input:
  ------------------
  |  Branch (22274:13): [True: 46, False: 6.16k]
  ------------------
22275|    612|            case token_type::literal_or_value:
  ------------------
  |  Branch (22275:13): [True: 0, False: 6.21k]
  ------------------
22276|    612|            default:
  ------------------
  |  Branch (22276:13): [True: 0, False: 6.21k]
  ------------------
22277|    612|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22278|    612|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22279|  6.21k|        }
22280|  6.21k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE21get_ubjson_size_valueERmRbmm:
21560|  39.7k|    {
21561|  39.7k|        if (prefix == 0)
  ------------------
  |  Branch (21561:13): [True: 22.2k, False: 17.4k]
  ------------------
21562|  22.2k|        {
21563|  22.2k|            prefix = get_ignore_noop();
21564|  22.2k|        }
21565|       |
21566|  39.7k|        switch (prefix)
21567|  39.7k|        {
21568|  12.1k|            case 'U':
  ------------------
  |  Branch (21568:13): [True: 12.1k, False: 27.5k]
  ------------------
21569|  12.1k|            {
21570|  12.1k|                std::uint8_t number{};
21571|  12.1k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  12.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 12.1k]
  |  |  ------------------
  ------------------
21572|      0|                {
21573|      0|                    return false;
21574|      0|                }
21575|  12.1k|                result = static_cast<std::size_t>(number);
21576|  12.1k|                return true;
21577|  12.1k|            }
21578|       |
21579|  13.7k|            case 'i':
  ------------------
  |  Branch (21579:13): [True: 13.7k, False: 25.9k]
  ------------------
21580|  13.7k|                return get_ubjson_signed_count<std::int8_t>(result);
21581|       |
21582|  1.61k|            case 'I':
  ------------------
  |  Branch (21582:13): [True: 1.61k, False: 38.1k]
  ------------------
21583|  1.61k|                return get_ubjson_signed_count<std::int16_t>(result);
21584|       |
21585|    849|            case 'l':
  ------------------
  |  Branch (21585:13): [True: 849, False: 38.8k]
  ------------------
21586|    849|                return get_ubjson_signed_count<std::int32_t>(result);
21587|       |
21588|    744|            case 'L':
  ------------------
  |  Branch (21588:13): [True: 744, False: 38.9k]
  ------------------
21589|    744|                return get_ubjson_signed_count<std::int64_t>(result);
21590|       |
21591|  1.28k|            case 'u':
  ------------------
  |  Branch (21591:13): [True: 1.28k, False: 38.4k]
  ------------------
21592|  1.28k|            {
21593|  1.28k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21593:21): [True: 0, False: 1.28k]
  ------------------
21594|      0|                {
21595|      0|                    break;
21596|      0|                }
21597|  1.28k|                std::uint16_t number{};
21598|  1.28k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.28k]
  |  |  ------------------
  ------------------
21599|      0|                {
21600|      0|                    return false;
21601|      0|                }
21602|  1.28k|                result = static_cast<std::size_t>(number);
21603|  1.28k|                return true;
21604|  1.28k|            }
21605|       |
21606|    772|            case 'm':
  ------------------
  |  Branch (21606:13): [True: 772, False: 38.9k]
  ------------------
21607|    772|            {
21608|    772|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21608:21): [True: 0, False: 772]
  ------------------
21609|      0|                {
21610|      0|                    break;
21611|      0|                }
21612|    772|                std::uint32_t number{};
21613|    772|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    772|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 772]
  |  |  ------------------
  ------------------
21614|      0|                {
21615|      0|                    return false;
21616|      0|                }
21617|    772|                return store_ubjson_count(conditional_static_cast<std::size_t>(number), result);
21618|    772|            }
21619|       |
21620|  1.11k|            case 'M':
  ------------------
  |  Branch (21620:13): [True: 1.11k, False: 38.6k]
  ------------------
21621|  1.11k|            {
21622|  1.11k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21622:21): [True: 0, False: 1.11k]
  ------------------
21623|      0|                {
21624|      0|                    break;
21625|      0|                }
21626|  1.11k|                std::uint64_t number{};
21627|  1.11k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
21628|      0|                {
21629|      0|                    return false;
21630|      0|                }
21631|  1.11k|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (21631:21): [True: 0, False: 1.11k]
  ------------------
21632|      0|                {
21633|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21634|      0|                }
21635|  1.11k|                return store_ubjson_count(detail::conditional_static_cast<std::size_t>(number), result);
21636|  1.11k|            }
21637|       |
21638|  7.13k|            case '[':
  ------------------
  |  Branch (21638:13): [True: 7.13k, False: 32.6k]
  ------------------
21639|  7.13k|            {
21640|  7.13k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21640:21): [True: 0, False: 7.13k]
  ------------------
21641|      0|                {
21642|      0|                    break;
21643|      0|                }
21644|  7.13k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (21644:21): [True: 11, False: 7.11k]
  ------------------
21645|     11|                {
21646|     11|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
21647|     11|                }
21648|  7.11k|                std::vector<size_t> dim;
21649|  7.11k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1697|  7.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.11k]
  |  |  ------------------
  ------------------
21650|      0|                {
21651|      0|                    return false;
21652|      0|                }
21653|  7.11k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (21653:21): [True: 1.12k, False: 5.99k]
  |  Branch (21653:41): [True: 2.11k, False: 3.88k]
  |  Branch (21653:60): [True: 135, False: 1.98k]
  ------------------
21654|    728|                {
21655|    728|                    result = dim.at(dim.size() - 1);
21656|    728|                    return true;
21657|    728|                }
21658|  6.39k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (21658:21): [True: 3.30k, False: 3.08k]
  ------------------
21659|  3.30k|                {
21660|  3.30k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (21660:33): [True: 9.36k, False: 3.14k]
  ------------------
21661|  9.36k|                    {
21662|  9.36k|                        if ( i == 0 )
  ------------------
  |  Branch (21662:30): [True: 156, False: 9.20k]
  ------------------
21663|    156|                        {
21664|    156|                            result = 0;
21665|    156|                            return true;
21666|    156|                        }
21667|  9.36k|                    }
21668|       |
21669|  3.14k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1697|  3.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
21670|      0|                    {
21671|      0|                        return false;
21672|      0|                    }
21673|       |
21674|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
21675|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
21676|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
21677|  3.14k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (21677:25): [True: 2.99k, False: 157]
  ------------------
21678|  2.99k|                    {
21679|       |                        // every optimized type marker is_valid_optimized_type() accepts for BJData has a name
21680|  2.99k|                        const char* type_name = bjd_type_name(ndarray_dtype);
21681|  2.99k|                        JSON_ASSERT(type_name != nullptr);
  ------------------
  |  | 2643|  2.99k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (21681:25): [True: 2.99k, False: 0]
  ------------------
21682|       |
21683|  2.99k|                        string_t type_key = "_ArrayType_";
21684|  2.99k|                        string_t type = type_name; // sax->string() takes a reference
21685|  2.99k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1697|  5.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.99k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.99k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.99k]
  |  |  ------------------
  ------------------
21686|      0|                        {
21687|      0|                            return false;
21688|      0|                        }
21689|  2.99k|                    }
21690|       |
21691|  3.14k|                    string_t key = "_ArraySize_";
21692|  3.14k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1697|  6.29k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.14k]
  |  |  |  Branch (1697:94): [True: 0, False: 3.14k]
  |  |  |  Branch (1697:94): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
21693|      0|                    {
21694|      0|                        return false;
21695|      0|                    }
21696|  3.14k|                    result = 1;
21697|  3.14k|                    for (auto i : dim)
  ------------------
  |  Branch (21697:33): [True: 8.51k, False: 3.09k]
  ------------------
21698|  8.51k|                    {
21699|       |                        // Pre-multiplication overflow check: since the loop above
21700|       |                        // already rejected any zero dimension, i is always > 0
21701|       |                        // here, so result > SIZE_MAX/i means result*i would
21702|       |                        // overflow. This check must happen before multiplication
21703|       |                        // since overflow detection after the fact is unreliable,
21704|       |                        // as modular arithmetic can produce any value, not just 0
21705|       |                        // or SIZE_MAX.
21706|  8.51k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1697|  8.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 51, False: 8.46k]
  |  |  ------------------
  ------------------
21707|     51|                        {
21708|     51|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21709|     51|                        }
21710|  8.46k|                        result *= i;
21711|       |                        // the pre-check above already rules out result becoming 0
21712|       |                        // by overflow; the only value it cannot rule out is an
21713|       |                        // exact match with npos, the sentinel reserved for an
21714|       |                        // unknown-size container (see get_ubjson_size_type())
21715|  8.46k|                        if (result == npos)
  ------------------
  |  Branch (21715:29): [True: 0, False: 8.46k]
  ------------------
21716|      0|                        {
21717|      0|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21718|      0|                        }
21719|  8.46k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1697|  8.46k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 8.46k]
  |  |  ------------------
  ------------------
21720|      0|                        {
21721|      0|                            return false;
21722|      0|                        }
21723|  8.46k|                    }
21724|  3.09k|                    is_ndarray = true;
21725|  3.09k|                    return sax->end_array();
21726|  3.14k|                }
21727|  3.08k|                result = 0;
21728|  3.08k|                return true;
21729|  6.39k|            }
21730|       |
21731|    259|            default:
  ------------------
  |  Branch (21731:13): [True: 259, False: 39.4k]
  ------------------
21732|    259|                break;
21733|  39.7k|        }
21734|    259|        return length_type_error(" after '#'", "size");
21735|  39.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE23get_ubjson_signed_countIaEEbRm:
21526|  13.7k|    {
21527|  13.7k|        SignedType number{};
21528|  13.7k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|  13.7k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 6, False: 13.7k]
  |  |  ------------------
  ------------------
21533|      6|        {
21534|      6|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|      6|        }
21536|  13.7k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  13.7k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  13.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE23get_ubjson_signed_countIsEEbRm:
21526|  1.61k|    {
21527|  1.61k|        SignedType number{};
21528|  1.61k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|  1.61k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 7, False: 1.61k]
  |  |  ------------------
  ------------------
21533|      7|        {
21534|      7|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|      7|        }
21536|  1.61k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  1.61k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  1.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE23get_ubjson_signed_countIiEEbRm:
21526|    849|    {
21527|    849|        SignedType number{};
21528|    849|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    849|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 849]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|    849|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|    849|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 815]
  |  |  ------------------
  ------------------
21533|     34|        {
21534|     34|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     34|        }
21536|    815|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|    815|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 815]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|    815|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|    815|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE23get_ubjson_signed_countIlEEbRm:
21526|    744|    {
21527|    744|        SignedType number{};
21528|    744|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    744|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 744]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|    744|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|    744|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 67, False: 677]
  |  |  ------------------
  ------------------
21533|     67|        {
21534|     67|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     67|        }
21536|    677|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|    677|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 677]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|    677|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|    677|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE18store_ubjson_countEmRm:
21501|  18.5k|    {
21502|  18.5k|        if (JSON_HEDLEY_UNLIKELY(count == npos))
  ------------------
  |  | 1697|  18.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1, False: 18.5k]
  |  |  ------------------
  ------------------
21503|      1|        {
21504|      1|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21505|      1|        }
21506|  18.5k|        result = count;
21507|  18.5k|        return true;
21508|  18.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
21439|  7.11k|    {
21440|  7.11k|        std::pair<std::size_t, char_int_type> size_and_type;
21441|  7.11k|        size_t dimlen = 0;
21442|  7.11k|        bool no_ndarray = true;
21443|       |
21444|  7.11k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1697|  7.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.11k]
  |  |  ------------------
  ------------------
21445|      0|        {
21446|      0|            return false;
21447|      0|        }
21448|       |
21449|  7.11k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (21449:13): [True: 1.19k, False: 5.92k]
  ------------------
21450|  1.19k|        {
21451|  1.19k|            if (size_and_type.second != 0)
  ------------------
  |  Branch (21451:17): [True: 819, False: 380]
  ------------------
21452|    819|            {
21453|  8.76k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21453:41): [True: 7.94k, False: 819]
  ------------------
21454|  7.94k|                {
21455|  7.94k|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1697|  7.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.94k]
  |  |  ------------------
  ------------------
21456|      0|                    {
21457|      0|                        return false;
21458|      0|                    }
21459|  7.94k|                    dim.push_back(dimlen);
21460|  7.94k|                }
21461|    819|            }
21462|    380|            else
21463|    380|            {
21464|  1.26k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21464:41): [True: 884, False: 380]
  ------------------
21465|    884|                {
21466|    884|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1697|    884|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 884]
  |  |  ------------------
  ------------------
21467|      0|                    {
21468|      0|                        return false;
21469|      0|                    }
21470|    884|                    dim.push_back(dimlen);
21471|    884|                }
21472|    380|            }
21473|  1.19k|        }
21474|  5.92k|        else
21475|  5.92k|        {
21476|  15.4k|            while (current != ']')
  ------------------
  |  Branch (21476:20): [True: 9.50k, False: 5.92k]
  ------------------
21477|  9.50k|            {
21478|  9.50k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1697|  9.50k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 9.50k]
  |  |  ------------------
  ------------------
21479|      0|                {
21480|      0|                    return false;
21481|      0|                }
21482|  9.50k|                dim.push_back(dimlen);
21483|  9.50k|                get_ignore_noop();
21484|  9.50k|            }
21485|  5.92k|        }
21486|  7.11k|        return true;
21487|  7.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE20get_ubjson_size_typeERNS4_4pairImmEEb:
21749|   101k|    {
21750|   101k|        result.first = npos; // size
21751|   101k|        result.second = 0; // type
21752|       |        // seed the flag with the caller's context: inside an ndarray dimension
21753|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
21754|       |        // rejects it up front instead of reading it and reporting afterwards.
21755|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
21756|       |        // another level, which overflowed the stack (see #5104).
21757|   101k|        bool is_ndarray = inside_ndarray;
21758|       |
21759|   101k|        get_ignore_noop();
21760|       |
21761|   101k|        if (current == '$')
  ------------------
  |  Branch (21761:13): [True: 10.8k, False: 90.6k]
  ------------------
21762|  10.8k|        {
21763|  10.8k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
21764|  10.8k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 10.8k]
  |  |  ------------------
  ------------------
21765|      0|            {
21766|      0|                return false;
21767|      0|            }
21768|       |
21769|       |            // validate the type marker up front: otherwise it would only be
21770|       |            // checked when an element is read, and a container with count 0
21771|       |            // would accept any marker
21772|  10.8k|            if (JSON_HEDLEY_UNLIKELY(!is_valid_optimized_type(result.second)))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 16, False: 10.8k]
  |  |  ------------------
  ------------------
21773|     16|            {
21774|     16|                return optimized_type_error();
21775|     16|            }
21776|       |
21777|  10.8k|            get_ignore_noop();
21778|  10.8k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 10.7k]
  |  |  ------------------
  ------------------
21779|    103|            {
21780|    103|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|    103|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 103]
  |  |  ------------------
  ------------------
21781|      0|                {
21782|      0|                    return false;
21783|      0|                }
21784|    103|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
21785|    103|            }
21786|       |
21787|  10.7k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
21788|       |            // an ndarray was read here only if the flag flipped; when it was
21789|       |            // seeded true, get_ubjson_size_value() already rejected the nested
21790|       |            // dimension vector
21791|  10.7k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21791:17): [True: 3.80k, False: 6.90k]
  |  Branch (21791:31): [True: 2.98k, False: 819]
  ------------------
21792|  2.98k|            {
21793|  2.98k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
21794|  2.98k|            }
21795|  10.7k|            return is_error;
21796|  10.8k|        }
21797|       |
21798|  90.6k|        if (current == '#')
  ------------------
  |  Branch (21798:13): [True: 3.13k, False: 87.5k]
  ------------------
21799|  3.13k|        {
21800|  3.13k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
21801|  3.13k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21801:17): [True: 489, False: 2.65k]
  |  Branch (21801:31): [True: 109, False: 380]
  ------------------
21802|    109|            {
21803|    109|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
21804|    109|            }
21805|  3.03k|            return is_error;
21806|  3.13k|        }
21807|       |
21808|  87.5k|        return true;
21809|  90.6k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE23is_valid_optimized_typeEm:
23505|  10.8k|    {
23506|  10.8k|        switch (marker)
23507|  10.8k|        {
23508|    825|            case 'i':
  ------------------
  |  Branch (23508:13): [True: 825, False: 9.99k]
  ------------------
23509|  1.57k|            case 'U':
  ------------------
  |  Branch (23509:13): [True: 752, False: 10.0k]
  ------------------
23510|  2.11k|            case 'I':
  ------------------
  |  Branch (23510:13): [True: 536, False: 10.2k]
  ------------------
23511|  2.78k|            case 'l':
  ------------------
  |  Branch (23511:13): [True: 669, False: 10.1k]
  ------------------
23512|  3.27k|            case 'L':
  ------------------
  |  Branch (23512:13): [True: 489, False: 10.3k]
  ------------------
23513|  3.77k|            case 'd':
  ------------------
  |  Branch (23513:13): [True: 504, False: 10.3k]
  ------------------
23514|  4.35k|            case 'D':
  ------------------
  |  Branch (23514:13): [True: 580, False: 10.2k]
  ------------------
23515|  4.78k|            case 'C':
  ------------------
  |  Branch (23515:13): [True: 427, False: 10.3k]
  ------------------
23516|  4.78k|                return true;
23517|      1|            case 'Z':
  ------------------
  |  Branch (23517:13): [True: 1, False: 10.8k]
  ------------------
23518|      2|            case 'N':
  ------------------
  |  Branch (23518:13): [True: 1, False: 10.8k]
  ------------------
23519|      3|            case 'T':
  ------------------
  |  Branch (23519:13): [True: 1, False: 10.8k]
  ------------------
23520|      4|            case 'F':
  ------------------
  |  Branch (23520:13): [True: 1, False: 10.8k]
  ------------------
23521|      5|            case 'H':
  ------------------
  |  Branch (23521:13): [True: 1, False: 10.8k]
  ------------------
23522|      6|            case 'S':
  ------------------
  |  Branch (23522:13): [True: 1, False: 10.8k]
  ------------------
23523|      8|            case '[':
  ------------------
  |  Branch (23523:13): [True: 2, False: 10.8k]
  ------------------
23524|      9|            case '{':
  ------------------
  |  Branch (23524:13): [True: 1, False: 10.8k]
  ------------------
23525|      9|                return input_format != input_format_t::bjdata;
23526|  3.52k|            case 'B':
  ------------------
  |  Branch (23526:13): [True: 3.52k, False: 7.29k]
  ------------------
23527|  4.09k|            case 'u':
  ------------------
  |  Branch (23527:13): [True: 572, False: 10.2k]
  ------------------
23528|  4.56k|            case 'm':
  ------------------
  |  Branch (23528:13): [True: 472, False: 10.3k]
  ------------------
23529|  5.17k|            case 'M':
  ------------------
  |  Branch (23529:13): [True: 610, False: 10.2k]
  ------------------
23530|  6.02k|            case 'h':
  ------------------
  |  Branch (23530:13): [True: 847, False: 9.97k]
  ------------------
23531|  6.02k|                return input_format == input_format_t::bjdata;
23532|      7|            default:
  ------------------
  |  Branch (23532:13): [True: 7, False: 10.8k]
  ------------------
23533|      7|                return false;
23534|  10.8k|        }
23535|  10.8k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE20optimized_type_errorEv:
23366|     16|    {
23367|     16|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
23368|     16|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE13bjd_type_nameEm:
23546|  2.99k|    {
23547|  2.99k|        switch (marker)
23548|  2.99k|        {
23549|    401|            case 'B':
  ------------------
  |  Branch (23549:13): [True: 401, False: 2.58k]
  ------------------
23550|    401|                return "byte";
23551|    230|            case 'C':
  ------------------
  |  Branch (23551:13): [True: 230, False: 2.76k]
  ------------------
23552|    230|                return "char";
23553|    180|            case 'D':
  ------------------
  |  Branch (23553:13): [True: 180, False: 2.81k]
  ------------------
23554|    180|                return "double";
23555|    220|            case 'I':
  ------------------
  |  Branch (23555:13): [True: 220, False: 2.77k]
  ------------------
23556|    220|                return "int16";
23557|    143|            case 'L':
  ------------------
  |  Branch (23557:13): [True: 143, False: 2.84k]
  ------------------
23558|    143|                return "int64";
23559|    122|            case 'M':
  ------------------
  |  Branch (23559:13): [True: 122, False: 2.86k]
  ------------------
23560|    122|                return "uint64";
23561|    292|            case 'U':
  ------------------
  |  Branch (23561:13): [True: 292, False: 2.69k]
  ------------------
23562|    292|                return "uint8";
23563|    180|            case 'd':
  ------------------
  |  Branch (23563:13): [True: 180, False: 2.81k]
  ------------------
23564|    180|                return "single";
23565|    205|            case 'h':
  ------------------
  |  Branch (23565:13): [True: 205, False: 2.78k]
  ------------------
23566|    205|                return "half";
23567|    387|            case 'i':
  ------------------
  |  Branch (23567:13): [True: 387, False: 2.60k]
  ------------------
23568|    387|                return "int8";
23569|    222|            case 'l':
  ------------------
  |  Branch (23569:13): [True: 222, False: 2.76k]
  ------------------
23570|    222|                return "int32";
23571|    192|            case 'm':
  ------------------
  |  Branch (23571:13): [True: 192, False: 2.79k]
  ------------------
23572|    192|                return "uint32";
23573|    216|            case 'u':
  ------------------
  |  Branch (23573:13): [True: 216, False: 2.77k]
  ------------------
23574|    216|                return "uint16";
23575|      0|            default:
  ------------------
  |  Branch (23575:13): [True: 0, False: 2.99k]
  ------------------
23576|      0|                return nullptr;
23577|  2.99k|        }
23578|  2.99k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17length_type_errorEPKcSQ_:
23433|    329|    {
23434|    329|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (23434:29): [True: 329, False: 0]
  ------------------
23435|    329|        return last_byte_error(exception_id::invalid_string_or_size,
23436|    329|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
23437|    329|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE16get_ubjson_arrayEv:
22063|  80.0k|    {
22064|  80.0k|        std::pair<std::size_t, char_int_type> size_and_type;
22065|  80.0k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  80.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 80.0k]
  |  |  ------------------
  ------------------
22066|      0|        {
22067|      0|            return false;
22068|      0|        }
22069|       |
22070|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
22071|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
22072|       |
22073|  80.0k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22073:13): [True: 2.98k, False: 77.1k]
  ------------------
22074|  2.98k|        {
22075|  2.98k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
22076|       |
22077|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
22078|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
22079|       |            // that determines size_and_type.first is read, so it is emitted first there to
22080|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
22081|       |            // 'C' elements are read as unsigned bytes, but BJData limits a char to 0..127
22082|  2.98k|            const bool nd_is_char = size_and_type.second == 'C';
22083|  2.98k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (22083:17): [True: 230, False: 2.75k]
  |  Branch (22083:48): [True: 401, False: 2.35k]
  ------------------
22084|    631|            {
22085|    631|                size_and_type.second = 'U';
22086|    631|            }
22087|       |
22088|  2.98k|            string_t key = "_ArrayData_";
22089|  2.98k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1697|  5.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.98k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.98k]
  |  |  |  Branch (1697:94): [True: 1, False: 2.98k]
  |  |  ------------------
  ------------------
22090|      0|            {
22091|      0|                return false;
22092|      0|            }
22093|       |
22094|       |            // the numbers that are in the input, in one loop; the rest (if
22095|       |            // the input ends early) one by one below
22096|  2.98k|            std::size_t remaining = size_and_type.first;
22097|  2.98k|            if (!nd_is_char && JSON_HEDLEY_UNLIKELY(!parse_ubjson_typed_run(remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {})))
  ------------------
  |  | 1697|  2.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.75k]
  |  |  ------------------
  ------------------
  |  Branch (22097:17): [True: 2.75k, False: 231]
  |  Branch (22097:17): [True: 0, False: 2.98k]
  ------------------
22098|      0|            {
22099|      0|                return false;
22100|      0|            }
22101|       |
22102|  14.0k|            for (std::size_t i = size_and_type.first - remaining; i < size_and_type.first; ++i)
  ------------------
  |  Branch (22102:67): [True: 11.0k, False: 2.98k]
  ------------------
22103|  11.0k|            {
22104|  11.0k|                if (nd_is_char)
  ------------------
  |  Branch (22104:21): [True: 979, False: 10.1k]
  ------------------
22105|    979|                {
22106|    979|                    get();
22107|    979|                    if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|    979|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 979]
  |  |  ------------------
  ------------------
22108|      0|                    {
22109|      0|                        return false;
22110|      0|                    }
22111|    979|                    if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|    979|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 974]
  |  |  ------------------
  ------------------
22112|      5|                    {
22113|      5|                        return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
22114|      5|                    }
22115|    974|                    if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(current))))
  ------------------
  |  | 1697|    974|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 974]
  |  |  ------------------
  ------------------
22116|      0|                    {
22117|      0|                        return false;
22118|      0|                    }
22119|    974|                    continue;
22120|    974|                }
22121|       |
22122|  10.1k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1697|  10.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 10.1k]
  |  |  ------------------
  ------------------
22123|      0|                {
22124|      0|                    return false;
22125|      0|                }
22126|  10.1k|            }
22127|       |
22128|  2.98k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (22128:21): [True: 2.80k, False: 177]
  |  Branch (22128:41): [True: 2.80k, False: 0]
  ------------------
22129|  2.98k|        }
22130|       |
22131|       |        // If BJData type marker is 'B' decode as binary
22132|  77.1k|        if (size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (22132:13): [True: 8.57k, False: 68.5k]
  |  Branch (22132:44): [True: 3.04k, False: 5.53k]
  ------------------
22133|  3.04k|        {
22134|  3.04k|            binary_t result;
22135|  3.04k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (22135:20): [True: 2.91k, False: 129]
  |  Branch (22135:63): [True: 2.91k, False: 0]
  ------------------
22136|  3.04k|        }
22137|       |
22138|  74.0k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22138:13): [True: 5.53k, False: 68.5k]
  ------------------
22139|  5.53k|        {
22140|       |            // reading an element of a valueless type consumes no input, so the
22141|       |            // declared count alone decides how much is allocated; the check is
22142|       |            // made before the start event so that no container is opened that
22143|       |            // is then abandoned. See @ref max_valueless_container_size.
22144|  5.53k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1697|  27.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
22145|  5.53k|                                     && size_and_type.first > max_valueless_container_size))
22146|      0|            {
22147|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
22148|      0|            }
22149|       |
22150|  5.53k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1697|  5.53k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.53k]
  |  |  ------------------
  ------------------
22151|      0|            {
22152|      0|                return false;
22153|      0|            }
22154|       |
22155|  5.53k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (22155:17): [True: 0, False: 5.53k]
  ------------------
22156|      0|            {
22157|       |                // a no-op is not a value, so a container of them holds none;
22158|       |                // the declared size has already been passed to the SAX parser
22159|      0|                container_stack.back().remaining = 0;
22160|      0|            }
22161|       |
22162|  5.53k|            return size_and_type.second == 0
  ------------------
  |  Branch (22162:20): [True: 1.82k, False: 3.71k]
  ------------------
22163|  3.71k|                   || parse_ubjson_typed_run(container_stack.back().remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {});
  ------------------
  |  Branch (22163:23): [True: 3.71k, False: 0]
  ------------------
22164|  5.53k|        }
22165|       |
22166|  68.5k|        return enter_array(detail::unknown_size());
22167|  74.0k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE22parse_ubjson_typed_runERmmNS4_17integral_constantIbLb0EEE:
22004|  6.46k|    {
22005|  6.46k|        return true;
22006|  6.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
23219|  3.04k|    {
23220|  3.04k|        return get_bytes(len, "binary", result);
23221|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17get_ubjson_objectEv:
22173|  14.3k|    {
22174|  14.3k|        std::pair<std::size_t, char_int_type> size_and_type;
22175|  14.3k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  14.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 14.3k]
  |  |  ------------------
  ------------------
22176|      0|        {
22177|      0|            return false;
22178|      0|        }
22179|       |
22180|       |        // do not accept ND-array size in objects in BJData
22181|  14.3k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22181:13): [True: 1, False: 14.3k]
  ------------------
22182|      1|        {
22183|      1|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
22184|      1|        }
22185|       |
22186|  14.3k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22186:13): [True: 362, False: 13.9k]
  ------------------
22187|    362|        {
22188|    362|            return enter_object(size_and_type.first, size_and_type.second);
22189|    362|        }
22190|       |
22191|  13.9k|        return enter_object(detail::unknown_size());
22192|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17get_ubjson_stringERSC_bPKc:
21355|  29.6k|    {
21356|  29.6k|        if (get_char)
  ------------------
  |  Branch (21356:13): [True: 6.89k, False: 22.7k]
  ------------------
21357|  6.89k|        {
21358|       |            // no get_ignore_noop() here: the byte read next must be a string
21359|       |            // length type specification, and a no-op ('N') is not valid in
21360|       |            // that position. No-ops at positions where a value may appear are
21361|       |            // already consumed by the callers via get_ignore_noop().
21362|  6.89k|            get();
21363|  6.89k|        }
21364|       |
21365|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
21366|      0|        {
21367|      0|            return false;
21368|      0|        }
21369|       |
21370|  29.6k|        switch (current)
21371|  29.6k|        {
21372|  20.7k|            case 'U':
  ------------------
  |  Branch (21372:13): [True: 20.7k, False: 8.89k]
  ------------------
21373|  20.7k|            {
21374|  20.7k|                return get_string_with_length<std::uint8_t>(result, context);
21375|      0|            }
21376|       |
21377|  4.93k|            case 'i':
  ------------------
  |  Branch (21377:13): [True: 4.93k, False: 24.7k]
  ------------------
21378|  4.93k|            {
21379|  4.93k|                std::int8_t len{};
21380|  4.93k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21380:24): [True: 4.92k, False: 4]
  |  Branch (21380:43): [True: 4.92k, False: 5]
  |  Branch (21380:78): [True: 4.88k, False: 34]
  |  Branch (21380:105): [True: 4.88k, False: 0]
  ------------------
21381|      0|            }
21382|       |
21383|    684|            case 'I':
  ------------------
  |  Branch (21383:13): [True: 684, False: 28.9k]
  ------------------
21384|    684|            {
21385|    684|                std::int16_t len{};
21386|    684|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21386:24): [True: 679, False: 5]
  |  Branch (21386:43): [True: 676, False: 3]
  |  Branch (21386:78): [True: 619, False: 57]
  |  Branch (21386:105): [True: 619, False: 0]
  ------------------
21387|      0|            }
21388|       |
21389|    508|            case 'l':
  ------------------
  |  Branch (21389:13): [True: 508, False: 29.1k]
  ------------------
21390|    508|            {
21391|    508|                std::int32_t len{};
21392|    508|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21392:24): [True: 499, False: 9]
  |  Branch (21392:43): [True: 468, False: 31]
  |  Branch (21392:78): [True: 394, False: 74]
  |  Branch (21392:105): [True: 394, False: 0]
  ------------------
21393|      0|            }
21394|       |
21395|    524|            case 'L':
  ------------------
  |  Branch (21395:13): [True: 524, False: 29.1k]
  ------------------
21396|    524|            {
21397|    524|                std::int64_t len{};
21398|    524|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21398:24): [True: 511, False: 13]
  |  Branch (21398:43): [True: 448, False: 63]
  |  Branch (21398:78): [True: 303, False: 145]
  |  Branch (21398:105): [True: 303, False: 0]
  ------------------
21399|      0|            }
21400|       |
21401|    924|            case 'u':
  ------------------
  |  Branch (21401:13): [True: 924, False: 28.7k]
  ------------------
21402|    924|            {
21403|    924|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21403:21): [True: 0, False: 924]
  ------------------
21404|      0|                {
21405|      0|                    break;
21406|      0|                }
21407|    924|                return get_string_with_length<std::uint16_t>(result, context);
21408|    924|            }
21409|       |
21410|    426|            case 'm':
  ------------------
  |  Branch (21410:13): [True: 426, False: 29.2k]
  ------------------
21411|    426|            {
21412|    426|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21412:21): [True: 0, False: 426]
  ------------------
21413|      0|                {
21414|      0|                    break;
21415|      0|                }
21416|    426|                return get_string_with_length<std::uint32_t>(result, context);
21417|    426|            }
21418|       |
21419|    552|            case 'M':
  ------------------
  |  Branch (21419:13): [True: 552, False: 29.0k]
  ------------------
21420|    552|            {
21421|    552|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21421:21): [True: 0, False: 552]
  ------------------
21422|      0|                {
21423|      0|                    break;
21424|      0|                }
21425|    552|                return get_string_with_length<std::uint64_t>(result, context);
21426|    552|            }
21427|       |
21428|     70|            default:
  ------------------
  |  Branch (21428:13): [True: 70, False: 29.5k]
  ------------------
21429|     70|                break;
21430|  29.6k|        }
21431|     70|        return length_type_error("", "string");
21432|  29.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE26check_ubjson_string_lengthIaEEbT_:
21332|  4.92k|    {
21333|  4.92k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|  4.92k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 4.92k]
  |  |  ------------------
  ------------------
21334|      5|        {
21335|      5|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      5|        }
21337|  4.92k|        return true;
21338|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringIaEEbT_RSC_:
23119|  4.92k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  4.92k|        return get_bytes(len, "string", result);
23130|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesIaSC_EEbT_PKcRT0_:
23245|  4.92k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  4.92k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 4.92k]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  4.92k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 4.92k]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  4.92k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  9.12k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 4.23k, False: 4.88k]
  ------------------
23258|  4.23k|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|  4.23k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 4.23k, False: 0]
  ------------------
23262|  4.23k|                                       ? static_cast<std::size_t>(len)
23263|  4.23k|                                       : chunk_size;
23264|  4.23k|            const std::size_t old_size = result.size();
23265|  4.23k|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|  4.23k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|  4.23k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 4.23k, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|  4.23k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|  4.23k|            chars_read += bytes_read;
23273|  4.23k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|  4.23k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 4.19k]
  |  |  ------------------
  ------------------
23274|     34|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     34|                result.resize(old_size + bytes_read);
23279|     34|                ++chars_read;
23280|     34|                current = char_traits<char_type>::eof();
23281|     34|                return unexpect_eof(context);
23282|     34|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|  4.19k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|  4.19k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 4.19k, False: 0]
  ------------------
23285|  4.19k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|  4.19k|        }
23287|  4.88k|        return true;
23288|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockIaSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|  4.92k|    {
23317|  4.92k|        return false;
23318|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE26check_ubjson_string_lengthIsEEbT_:
21332|    679|    {
21333|    679|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    679|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 3, False: 676]
  |  |  ------------------
  ------------------
21334|      3|        {
21335|      3|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      3|        }
21337|    676|        return true;
21338|    679|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringIsEEbT_RSC_:
23119|    676|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    676|        return get_bytes(len, "string", result);
23130|    676|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesIsSC_EEbT_PKcRT0_:
23245|    676|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    676|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 676]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    676|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 676]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    676|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  1.01k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 395, False: 619]
  ------------------
23258|    395|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    395|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 375, False: 20]
  ------------------
23262|    395|                                       ? static_cast<std::size_t>(len)
23263|    395|                                       : chunk_size;
23264|    395|            const std::size_t old_size = result.size();
23265|    395|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    395|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    395|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 395, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    395|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    395|            chars_read += bytes_read;
23273|    395|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    395|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 57, False: 338]
  |  |  ------------------
  ------------------
23274|     57|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     57|                result.resize(old_size + bytes_read);
23279|     57|                ++chars_read;
23280|     57|                current = char_traits<char_type>::eof();
23281|     57|                return unexpect_eof(context);
23282|     57|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|    338|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|    338|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 338, False: 0]
  ------------------
23285|    338|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|    338|        }
23287|    619|        return true;
23288|    676|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockIsSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|    676|    {
23317|    676|        return false;
23318|    676|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE26check_ubjson_string_lengthIiEEbT_:
21332|    499|    {
21333|    499|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    499|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 31, False: 468]
  |  |  ------------------
  ------------------
21334|     31|        {
21335|     31|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     31|        }
21337|    468|        return true;
21338|    499|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE26check_ubjson_string_lengthIlEEbT_:
21332|    511|    {
21333|    511|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    511|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 63, False: 448]
  |  |  ------------------
  ------------------
21334|     63|        {
21335|     63|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     63|        }
21337|    448|        return true;
21338|    511|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringIlEEbT_RSC_:
23119|    448|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    448|        return get_bytes(len, "string", result);
23130|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE9get_bytesIlSC_EEbT_PKcRT0_:
23245|    448|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    448|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [Folded, False: 448]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    448|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 448]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    448|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    590|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 287, False: 303]
  ------------------
23258|    287|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    287|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 177, False: 110]
  ------------------
23262|    287|                                       ? static_cast<std::size_t>(len)
23263|    287|                                       : chunk_size;
23264|    287|            const std::size_t old_size = result.size();
23265|    287|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    287|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    287|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 287, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    287|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    287|            chars_read += bytes_read;
23273|    287|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    287|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 145, False: 142]
  |  |  ------------------
  ------------------
23274|    145|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    145|                result.resize(old_size + bytes_read);
23279|    145|                ++chars_read;
23280|    145|                current = char_traits<char_type>::eof();
23281|    145|                return unexpect_eof(context);
23282|    145|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|    142|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|    142|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 142, False: 0]
  ------------------
23285|    142|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|    142|        }
23287|    303|        return true;
23288|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE17append_from_blockIlSC_EEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|    448|    {
23317|    448|        return false;
23318|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE22get_string_with_lengthImEEbRSC_PKc:
23198|    552|    {
23199|    552|        NumberType len{};
23200|    552|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 533, False: 19]
  |  Branch (23200:35): [True: 348, False: 185]
  |  Branch (23200:62): [True: 348, False: 0]
  ------------------
23201|    552|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE10get_stringImEEbT_RSC_:
23119|    533|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    533|        return get_bytes(len, "string", result);
23130|    533|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE15get_ignore_noopEv:
22874|   304k|    {
22875|   304k|        do
22876|   310k|        {
22877|   310k|            get();
22878|   310k|        }
22879|   310k|        while (current == 'N');
  ------------------
  |  Branch (22879:16): [True: 5.91k, False: 304k]
  ------------------
22880|       |
22881|   304k|        return current;
22882|   304k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE3getEv:
22840|   491k|    {
22841|   491k|        ++chars_read;
22842|   491k|        return current = ia.get_character();
22843|   491k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E13get_characterEv:
10120|   491k|    {
10121|   491k|        if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1696|   491k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 481k, False: 9.66k]
  |  |  ------------------
  ------------------
10122|   481k|        {
10123|   481k|            auto result = char_traits<char_type>::to_int_type(*current);
10124|   481k|            std::advance(current, 1);
10125|   481k|            return result;
10126|   481k|        }
10127|       |
10128|  9.66k|        ++eof_reads;
10129|  9.66k|        return char_traits<char_type>::eof();
10130|   491k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEE15last_byte_errorENS1_12exception_idERKSC_PKcST_:
23407|    973|    {
23408|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
23409|    973|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
23410|    973|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (23410:51): [True: 832, False: 141]
  ------------------
23411|    973|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_26json_sax_dom_binary_parserISG_SL_EEED2Ev:
18487|  14.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEED2Ev:
17434|  14.9k|    ~json_sax_dom_binary_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterINSt3__121__list_const_iteratorIhPvEES6_vEENS1_30iterator_input_adapter_factoryIT_T0_vE12adapter_typeES8_S9_:
10603|  14.9k|{
10604|  14.9k|    using factory_type = iterator_input_adapter_factory<IteratorType, SentinelType>;
10605|  14.9k|    return factory_type::create(first, last);
10606|  14.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail30iterator_input_adapter_factoryINSt3__121__list_const_iteratorIhPvEES6_vE6createES6_S6_:
10465|  14.9k|    {
10466|  14.9k|        return adapter_type(std::move(first), std::move(last));
10467|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_EC2ES6_S6_:
10116|  14.9k|        : begin(first), current(std::move(first)), end(std::move(last))
10117|  14.9k|    {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIRP8_IO_FILEEESE_OT_bbNS0_6detail15error_handler_tE:
46010|  14.9k|    {
46011|  14.9k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
46012|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail18file_input_adapterEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
45629|  14.9k|    {
45630|  14.9k|        basic_json result;
45631|  14.9k|        detail::json_sax_dom_binary_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
45632|  14.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
45633|  14.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (45633:13): [True: 0, False: 14.9k]
  ------------------
45634|      0|        {
45635|      0|            result = value_t::discarded;
45636|      0|        }
45637|  14.9k|        return result;
45638|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEEC2ERSG_bPNS1_5lexerISG_SH_Lb0EEE:
17426|  14.9k|        : json_sax_dom_error_state(allow_exceptions_), root(r), m_lexer_ref(lexer_)
17427|  14.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEEC2EOSH_NS1_14input_format_tENS1_15error_handler_tE:
18477|  14.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
18478|  14.9k|    {
18479|  14.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
18480|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapterC2EOS2_:
 9396|  14.9k|        : m_file(rhs.m_file)
 9397|       |#if JSON_FILE_WINDOW
 9398|  14.9k|        , token_carry(std::move(rhs.token_carry))
 9399|  14.9k|        , token_segment(rhs.token_segment)
 9400|  14.9k|        , current_in_buffer(rhs.current_in_buffer)
 9401|  14.9k|        , tracking_token(rhs.tracking_token)
 9402|       |#endif
 9403|  14.9k|    {
 9404|       |        // the lock is owned by the thread, not the adapter: hand it over
 9405|  14.9k|        rhs.m_file = nullptr;
 9406|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9sax_parseEPSJ_bNS1_18cbor_tag_handler_tE:
18502|  14.9k|    {
18503|  14.9k|        sax = sax_;
18504|  14.9k|        container_stack.clear();
18505|  14.9k|        bon8_pushback_size = 0;
18506|  14.9k|        bool result = false;
18507|       |
18508|  14.9k|        switch (input_format)
18509|  14.9k|        {
18510|      0|            case input_format_t::bson:
  ------------------
  |  Branch (18510:13): [True: 0, False: 14.9k]
  ------------------
18511|      0|                result = parse_bson_internal();
18512|      0|                break;
18513|       |
18514|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (18514:13): [True: 0, False: 14.9k]
  ------------------
18515|      0|                result = parse_cbor_internal(tag_handler);
18516|      0|                break;
18517|       |
18518|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (18518:13): [True: 0, False: 14.9k]
  ------------------
18519|      0|                result = parse_msgpack_internal();
18520|      0|                break;
18521|       |
18522|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (18522:13): [True: 0, False: 14.9k]
  ------------------
18523|  14.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (18523:13): [True: 14.9k, False: 0]
  ------------------
18524|  14.9k|                result = parse_ubjson_internal();
18525|  14.9k|                break;
18526|       |
18527|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (18527:13): [True: 0, False: 14.9k]
  ------------------
18528|      0|                result = parse_bon8_internal();
18529|      0|                break;
18530|       |
18531|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (18531:13): [True: 0, False: 14.9k]
  ------------------
18532|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (18532:13): [True: 0, False: 14.9k]
  ------------------
18533|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18533:17): [Folded, False: 0]
  ------------------
18534|  14.9k|        }
18535|       |
18536|       |        // strict mode: next byte must be EOF
18537|  7.57k|        if (result && strict)
  ------------------
  |  Branch (18537:13): [True: 7.57k, False: 0]
  |  Branch (18537:23): [True: 7.57k, False: 0]
  ------------------
18538|  7.57k|        {
18539|  7.57k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (18539:17): [True: 0, False: 7.57k]
  |  Branch (18539:59): [True: 7.57k, False: 0]
  ------------------
18540|  7.57k|            {
18541|  7.57k|                get_ignore_noop();
18542|  7.57k|            }
18543|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (18543:22): [True: 0, False: 0]
  ------------------
18544|      0|            {
18545|       |                // a string that ends a container hands back the byte after it
18546|      0|                get_bon8();
18547|      0|            }
18548|      0|            else
18549|      0|            {
18550|      0|                get();
18551|      0|            }
18552|       |
18553|  7.57k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1697|  7.57k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 111, False: 7.45k]
  |  |  ------------------
  ------------------
18554|    111|            {
18555|    111|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
18556|    111|            }
18557|  7.57k|        }
18558|       |
18559|  7.45k|        return result;
18560|  7.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIiEEbRT_PKc:
22855|  2.26k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.26k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.26k|        chars_read += new_chars_read;
22860|  2.26k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 133, False: 2.13k]
  |  |  ------------------
  ------------------
22861|    133|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    133|            ++chars_read;
22864|    133|            static_cast<void>(report_eof(context));
22865|    133|            return false;
22866|    133|        }
22867|  2.13k|        return true;
22868|  2.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIiEEmPT_m:
 9445|  2.26k|    {
 9446|  2.26k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  2.26k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10report_eofEPKc:
23343|  4.08k|    {
23344|  4.08k|        return sax->parse_error(chars_read, "<end of file>",
23345|  4.08k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
23346|  4.08k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17exception_messageERKSC_SM_:
23454|  7.06k|    {
23455|  7.06k|        std::string error_msg = "syntax error while parsing ";
23456|  7.06k|        error_msg += input_format_name(input_format);
23457|       |
23458|  7.06k|        return concat(error_msg, ' ', context, ": ", detail);
23459|  7.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15enter_containerEbmi:
18618|  87.5k|    {
18619|  87.5k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1697|   175k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 87.5k]
  |  |  |  Branch (1697:94): [True: 14.1k, False: 73.4k]
  |  |  ------------------
  ------------------
18620|      0|        {
18621|      0|            return false;
18622|      0|        }
18623|       |
18624|  87.5k|        container_stack.emplace_back(len, is_object, type_marker);
18625|  87.5k|        return true;
18626|  87.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12start_objectEm:
17483|  17.3k|    {
17484|  17.3k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
17485|       |
17486|       |#if JSON_DIAGNOSTIC_POSITIONS
17487|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17488|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17489|       |#endif
17490|       |
17491|  17.3k|        return check_container_size(*this, len, "object", ref_stack.back());
17492|  17.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueINS1_7value_tEEEPSG_OT_:
17566|  96.8k|    {
17567|  96.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 9.35k, False: 87.5k]
  ------------------
17568|  9.35k|        {
17569|  9.35k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  9.35k|            return &root;
17576|  9.35k|        }
17577|       |
17578|  87.5k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  87.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 75.1k, False: 12.3k]
  |  Branch (17578:9): [True: 12.3k, False: 0]
  |  Branch (17578:9): [True: 87.5k, False: 0]
  ------------------
17579|       |
17580|  87.5k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 75.1k, False: 12.3k]
  ------------------
17581|  75.1k|        {
17582|  75.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  75.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  75.1k|        }
17590|       |
17591|  12.3k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  12.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 12.3k, False: 0]
  ------------------
17592|  12.3k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  12.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 12.3k, False: 0]
  ------------------
17593|  12.3k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  12.3k|        return object_element;
17600|  12.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_18file_input_adapterEEESH_EEbRT_mPKcPT0_:
16179|  96.8k|{
16180|  96.8k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1697|   112k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 268, False: 96.6k]
  |  |  |  Branch (1697:94): [True: 15.1k, False: 81.6k]
  |  |  |  Branch (1697:94): [True: 268, False: 14.9k]
  |  |  ------------------
  ------------------
16181|    268|    {
16182|    268|        return container_too_large_error(sax, len, kind, ref);
16183|    268|    }
16184|  96.6k|    return true;
16185|  96.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_18file_input_adapterEEESH_EEbRT_mPKcPT0_:
16173|    268|{
16174|    268|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
16175|    268|}
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE11start_arrayEm:
17520|  79.5k|    {
17521|  79.5k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
17522|       |
17523|       |#if JSON_DIAGNOSTIC_POSITIONS
17524|       |        // Ensure this is after the call to handle_value to ensure correct start position.
17525|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
17526|       |#endif
17527|       |
17528|  79.5k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1697|  79.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 79.5k]
  |  |  ------------------
  ------------------
17529|      0|        {
17530|      0|            return false;
17531|      0|        }
17532|       |
17533|  79.5k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (17533:13): [True: 11.5k, False: 68.0k]
  ------------------
17534|  11.5k|        {
17535|  11.5k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
17536|  11.5k|        }
17537|       |
17538|  79.5k|        return true;
17539|  79.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15container_frameC2Embi:
18584|  87.3k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15leave_containerEv:
18650|  56.4k|    {
18651|  56.4k|        const bool is_object = container_stack.back().is_object;
18652|  56.4k|        container_stack.pop_back();
18653|  56.4k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (18653:16): [True: 10.8k, False: 45.6k]
  ------------------
18654|  56.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE10end_objectEv:
17506|  13.6k|    {
17507|  13.6k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  13.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17507:9): [True: 13.6k, False: 0]
  ------------------
17508|  13.6k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  13.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17508:9): [True: 13.6k, False: 0]
  ------------------
17509|       |
17510|       |#if JSON_DIAGNOSTIC_POSITIONS
17511|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17512|       |#endif
17513|       |
17514|  13.6k|        ref_stack.back()->set_parents();
17515|  13.6k|        ref_stack.pop_back();
17516|  13.6k|        return true;
17517|  13.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE9end_arrayEv:
17542|  51.5k|    {
17543|  51.5k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  51.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17543:9): [True: 51.5k, False: 0]
  ------------------
17544|  51.5k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2643|  51.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17544:9): [True: 51.5k, False: 0]
  ------------------
17545|       |
17546|       |#if JSON_DIAGNOSTIC_POSITIONS
17547|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
17548|       |#endif
17549|       |
17550|  51.5k|        ref_stack.back()->set_parents();
17551|  51.5k|        ref_stack.pop_back();
17552|  51.5k|        return true;
17553|  51.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE12unexpect_eofEPKc:
23326|   205k|    {
23327|   205k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1697|   205k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2.79k, False: 202k]
  |  |  ------------------
  ------------------
23328|  2.79k|        {
23329|  2.79k|            return report_eof(context);
23330|  2.79k|        }
23331|   202k|        return true;
23332|   205k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail18file_input_adapter14bulk_remainingEv:
 9464|  44.1k|    {
 9465|  44.1k|        if (!current_in_buffer)
  ------------------
  |  Branch (9465:13): [True: 0, False: 44.1k]
  ------------------
 9466|      0|        {
 9467|      0|            return 0;
 9468|      0|        }
 9469|  44.1k|        return static_cast<std::size_t>(buffer_end() - buffer_ptr());
 9470|  44.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail18file_input_adapter10buffer_endEv:
 9529|   535k|    {
 9530|   535k|        return m_file->_IO_read_end;
 9531|   535k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail18file_input_adapter10buffer_ptrEv:
 9525|   555k|    {
 9526|   555k|        return m_file->_IO_read_ptr;
 9527|   555k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail18file_input_adapter9bulk_dataEv:
 9458|  20.6k|    {
 9459|  20.6k|        return buffer_ptr();
 9460|  20.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter9bulk_skipEm:
 9474|  20.6k|    {
 9475|  20.6k|        JSON_ASSERT(n <= bulk_remaining());
  ------------------
  |  | 2643|  20.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (9475:9): [True: 20.6k, False: 0]
  ------------------
 9476|  20.6k|        buffer_bump(n);
 9477|  20.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter11buffer_bumpEm:
 9533|   487k|    {
 9534|   487k|        m_file->_IO_read_ptr += n;
 9535|   487k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17check_string_utf8ERSC_PKc:
23163|  28.4k|    {
23164|  28.4k|        return error_handler == error_handler_t::keep || check_string_utf8_handler(result, context);
  ------------------
  |  Branch (23164:16): [True: 28.4k, False: 0]
  |  Branch (23164:58): [True: 0, False: 0]
  ------------------
23165|  28.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE3keyERSC_:
17495|  31.6k|    {
17496|  31.6k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2643|  31.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17496:9): [True: 31.6k, False: 0]
  ------------------
17497|  31.6k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  31.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17497:9): [True: 31.6k, False: 0]
  ------------------
17498|       |
17499|       |        // add null at the given key and store the reference for later; the
17500|       |        // key is moved, as the lexer starts the next token with reset()
17501|  31.6k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](std::move(val)));
17502|  31.6k|        return true;
17503|  31.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIdEEbRT_PKc:
22855|    534|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|    534|        auto new_chars_read = ia.get_elements(&dest);
22859|    534|        chars_read += new_chars_read;
22860|    534|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|    534|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 442]
  |  |  ------------------
  ------------------
22861|     92|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|     92|            ++chars_read;
22864|     92|            static_cast<void>(report_eof(context));
22865|     92|            return false;
22866|     92|        }
22867|    442|        return true;
22868|    534|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIdEEmPT_m:
 9445|    534|    {
 9446|    534|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|    534|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10emit_floatIdEEbT_:
23034|  1.12k|    {
23035|  1.12k|        const auto result = static_cast<number_float_t>(number);
23036|  1.12k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  2.22k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.12k]
  |  |  |  Branch (1697:94): [True: 1.09k, False: 30]
  |  |  |  Branch (1697:94): [True: 0, False: 1.09k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  1.12k|        return sax->number_float(result, no_source);
23041|  1.12k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18out_of_range_errorENS1_12exception_idEPKcSN_:
23353|     52|    {
23354|     52|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
23355|     52|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE16get_token_stringEv:
23443|  1.66k|    {
23444|  1.66k|        return hex_byte(static_cast<std::uint8_t>(current));
23445|  1.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12number_floatEdRKSC_:
17461|  35.9k|    {
17462|  35.9k|        handle_value(val);
17463|  35.9k|        return true;
17464|  35.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRdEEPSG_OT_:
17566|  35.9k|    {
17567|  35.9k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 1.33k, False: 34.6k]
  ------------------
17568|  1.33k|        {
17569|  1.33k|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|  1.33k|            return &root;
17576|  1.33k|        }
17577|       |
17578|  34.6k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  34.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 34.0k, False: 626]
  |  Branch (17578:9): [True: 626, False: 0]
  |  Branch (17578:9): [True: 34.6k, False: 0]
  ------------------
17579|       |
17580|  34.6k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 34.0k, False: 626]
  ------------------
17581|  34.0k|        {
17582|  34.0k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  34.0k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  34.0k|        }
17590|       |
17591|    626|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|    626|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 626, False: 0]
  ------------------
17592|    626|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|    626|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 626, False: 0]
  ------------------
17593|    626|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|    626|        return object_element;
17600|    626|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIiEEbT_RSC_:
23119|    468|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    468|        return get_bytes(len, "string", result);
23130|    468|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIiSC_EEbT_PKcRT0_:
23245|    468|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    468|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    468|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 211, False: 257]
  ------------------
23250|    211|        {
23251|    211|            return true;
23252|    211|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    257|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    257|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 74, False: 183]
  ------------------
23258|     74|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     74|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 35, False: 39]
  ------------------
23262|     74|                                       ? static_cast<std::size_t>(len)
23263|     74|                                       : chunk_size;
23264|     74|            const std::size_t old_size = result.size();
23265|     74|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     74|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     74|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 74, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     74|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     74|            chars_read += bytes_read;
23273|     74|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     74|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 74, False: 0]
  |  |  ------------------
  ------------------
23274|     74|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     74|                result.resize(old_size + bytes_read);
23279|     74|                ++chars_read;
23280|     74|                current = char_traits<char_type>::eof();
23281|     74|                return unexpect_eof(context);
23282|     74|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    183|        return true;
23288|    257|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIiEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    468|    {
23295|    468|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 183, False: 285]
  ------------------
23296|    183|        {
23297|    183|            return false;
23298|    183|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    285|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    285|        const std::size_t remaining = ia.bulk_remaining();
23303|    285|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 74, False: 211]
  ------------------
23304|     74|        {
23305|     74|            return false; // (the loop reports the premature end)
23306|     74|        }
23307|    211|        const auto n = static_cast<std::size_t>(ulen);
23308|    211|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    211|        ia.bulk_skip(n);
23310|    211|        chars_read += n;
23311|    211|        return true;
23312|    285|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIcEEmPT_m:
 9445|    688|    {
 9446|    688|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|    688|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE6stringERSC_:
17467|  17.3k|    {
17468|       |        // json_sax documents that the passed value may be moved from,
17469|       |        // so hand the buffer over instead of copying it
17470|  17.3k|        handle_value(std::move(val));
17471|  17.3k|        return true;
17472|  17.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueISC_EEPSG_OT_:
17566|  17.3k|    {
17567|  17.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 390, False: 17.0k]
  ------------------
17568|    390|        {
17569|    390|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    390|            return &root;
17576|    390|        }
17577|       |
17578|  17.0k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  17.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 10.6k, False: 6.38k]
  |  Branch (17578:9): [True: 6.38k, False: 0]
  |  Branch (17578:9): [True: 17.0k, False: 0]
  ------------------
17579|       |
17580|  17.0k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 10.6k, False: 6.38k]
  ------------------
17581|  10.6k|        {
17582|  10.6k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  10.6k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  10.6k|        }
17590|       |
17591|  6.38k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  6.38k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 6.38k, False: 0]
  ------------------
17592|  6.38k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  6.38k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 6.38k, False: 0]
  ------------------
17593|  6.38k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  6.38k|        return object_element;
17600|  6.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIhEEmPT_m:
 9445|  38.6k|    {
 9446|  38.6k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  38.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
17475|  2.91k|    {
17476|       |        // json_sax documents that the passed value may be moved from,
17477|       |        // so hand the buffer over instead of copying it
17478|  2.91k|        handle_value(std::move(val));
17479|  2.91k|        return true;
17480|  2.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
17566|  2.91k|    {
17567|  2.91k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 51, False: 2.86k]
  ------------------
17568|     51|        {
17569|     51|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     51|            return &root;
17576|     51|        }
17577|       |
17578|  2.86k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  2.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 2.42k, False: 433]
  |  Branch (17578:9): [True: 433, False: 0]
  |  Branch (17578:9): [True: 2.86k, False: 0]
  ------------------
17579|       |
17580|  2.86k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 2.42k, False: 433]
  ------------------
17581|  2.42k|        {
17582|  2.42k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  2.42k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  2.42k|        }
17590|       |
17591|    433|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|    433|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 433, False: 0]
  ------------------
17592|    433|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|    433|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 433, False: 0]
  ------------------
17593|    433|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|    433|        return object_element;
17600|    433|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIhLb0EEEbRT_:
22948|  37.0k|    {
22949|       |        // read in the original format
22950|       |
22951|  37.0k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  37.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 37.0k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  37.0k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 37.0k]
  |  Branch (22955:34): [Folded, False: 36.8k]
  |  Branch (22955:57): [True: 36.8k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  37.0k|        return true;
22960|  37.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIhEEbRT_PKc:
22855|  37.0k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  37.0k|        auto new_chars_read = ia.get_elements(&dest);
22859|  37.0k|        chars_read += new_chars_read;
22860|  37.0k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  37.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 171, False: 36.8k]
  |  |  ------------------
  ------------------
22861|    171|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    171|            ++chars_read;
22864|    171|            static_cast<void>(report_eof(context));
22865|    171|            return false;
22866|    171|        }
22867|  36.8k|        return true;
22868|  37.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE7booleanEb:
17443|  16.0k|    {
17444|  16.0k|        handle_value(val);
17445|  16.0k|        return true;
17446|  16.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRbEEPSG_OT_:
17566|  16.0k|    {
17567|  16.0k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 14, False: 15.9k]
  ------------------
17568|     14|        {
17569|     14|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     14|            return &root;
17576|     14|        }
17577|       |
17578|  15.9k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  15.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 11.2k, False: 4.74k]
  |  Branch (17578:9): [True: 4.74k, False: 0]
  |  Branch (17578:9): [True: 15.9k, False: 0]
  ------------------
17579|       |
17580|  15.9k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 11.2k, False: 4.74k]
  ------------------
17581|  11.2k|        {
17582|  11.2k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  11.2k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  11.2k|        }
17590|       |
17591|  4.74k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.74k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.74k, False: 0]
  ------------------
17592|  4.74k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.74k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.74k, False: 0]
  ------------------
17593|  4.74k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.74k|        return object_element;
17600|  4.74k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE4nullEv:
17437|  11.1k|    {
17438|  11.1k|        handle_value(nullptr);
17439|  11.1k|        return true;
17440|  11.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIDnEEPSG_OT_:
17566|  11.1k|    {
17567|  11.1k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 14, False: 11.1k]
  ------------------
17568|     14|        {
17569|     14|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|     14|            return &root;
17576|     14|        }
17577|       |
17578|  11.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  11.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 7.05k, False: 4.06k]
  |  Branch (17578:9): [True: 4.06k, False: 0]
  |  Branch (17578:9): [True: 11.1k, False: 0]
  ------------------
17579|       |
17580|  11.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 7.05k, False: 4.06k]
  ------------------
17581|  7.05k|        {
17582|  7.05k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  7.05k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  7.05k|        }
17590|       |
17591|  4.06k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  4.06k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 4.06k, False: 0]
  ------------------
17592|  4.06k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  4.06k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 4.06k, False: 0]
  ------------------
17593|  4.06k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  4.06k|        return object_element;
17600|  4.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIiEEbT_:
22980|  1.93k|    {
22981|  1.93k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  1.93k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.93k, False: 0]
  |  |  ------------------
  ------------------
22982|  1.93k|        {
22983|  1.93k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  1.93k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE14number_integerEl:
17449|  14.3k|    {
17450|  14.3k|        handle_value(val);
17451|  14.3k|        return true;
17452|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRlEEPSG_OT_:
17566|  14.3k|    {
17567|  14.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 209, False: 14.1k]
  ------------------
17568|    209|        {
17569|    209|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    209|            return &root;
17576|    209|        }
17577|       |
17578|  14.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  14.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 13.1k, False: 1.02k]
  |  Branch (17578:9): [True: 1.02k, False: 0]
  |  Branch (17578:9): [True: 14.1k, False: 0]
  ------------------
17579|       |
17580|  14.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 13.1k, False: 1.02k]
  ------------------
17581|  13.1k|        {
17582|  13.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  13.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  13.1k|        }
17590|       |
17591|  1.02k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.02k, False: 0]
  ------------------
17592|  1.02k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.02k, False: 0]
  ------------------
17593|  1.02k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.02k|        return object_element;
17600|  1.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE15number_unsignedEm:
17455|  27.2k|    {
17456|  27.2k|        handle_value(val);
17457|  27.2k|        return true;
17458|  27.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRmEEPSG_OT_:
17566|  27.2k|    {
17567|  27.2k|        if (ref_stack.empty())
  ------------------
  |  Branch (17567:13): [True: 473, False: 26.8k]
  ------------------
17568|    473|        {
17569|    473|            root = BasicJsonType(std::forward<Value>(v));
17570|       |
17571|       |#if JSON_DIAGNOSTIC_POSITIONS
17572|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
17573|       |#endif
17574|       |
17575|    473|            return &root;
17576|    473|        }
17577|       |
17578|  26.8k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2643|  26.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17578:9): [True: 25.1k, False: 1.65k]
  |  Branch (17578:9): [True: 1.65k, False: 0]
  |  Branch (17578:9): [True: 26.8k, False: 0]
  ------------------
17579|       |
17580|  26.8k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (17580:13): [True: 25.1k, False: 1.65k]
  ------------------
17581|  25.1k|        {
17582|  25.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
17583|       |
17584|       |#if JSON_DIAGNOSTIC_POSITIONS
17585|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
17586|       |#endif
17587|       |
17588|  25.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
17589|  25.1k|        }
17590|       |
17591|  1.65k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2643|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17591:9): [True: 1.65k, False: 0]
  ------------------
17592|  1.65k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2643|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (17592:9): [True: 1.65k, False: 0]
  ------------------
17593|  1.65k|        *object_element = BasicJsonType(std::forward<Value>(v));
17594|       |
17595|       |#if JSON_DIAGNOSTIC_POSITIONS
17596|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
17597|       |#endif
17598|       |
17599|  1.65k|        return object_element;
17600|  1.65k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIlEEbRT_PKc:
22855|  2.72k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.72k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.72k|        chars_read += new_chars_read;
22860|  2.72k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.72k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 153, False: 2.57k]
  |  |  ------------------
  ------------------
22861|    153|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    153|            ++chars_read;
22864|    153|            static_cast<void>(report_eof(context));
22865|    153|            return false;
22866|    153|        }
22867|  2.57k|        return true;
22868|  2.72k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIlEEmPT_m:
 9445|  2.72k|    {
 9446|  2.72k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  2.72k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIlEEbT_:
22980|  1.90k|    {
22981|  1.90k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  1.90k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.90k, False: 0]
  |  |  ------------------
  ------------------
22982|  1.90k|        {
22983|  1.90k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  1.90k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toImEEbRT_PKc:
22855|  4.44k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  4.44k|        auto new_chars_read = ia.get_elements(&dest);
22859|  4.44k|        chars_read += new_chars_read;
22860|  4.44k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  4.44k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 144, False: 4.30k]
  |  |  ------------------
  ------------------
22861|    144|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    144|            ++chars_read;
22864|    144|            static_cast<void>(report_eof(context));
22865|    144|            return false;
22866|    144|        }
22867|  4.30k|        return true;
22868|  4.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsImEEmPT_m:
 9445|  4.44k|    {
 9446|  4.44k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  4.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedImEEbT_:
23008|  11.7k|    {
23009|  11.7k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  11.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 11.7k, False: 0]
  |  |  ------------------
  ------------------
23010|  11.7k|        {
23011|  11.7k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  11.7k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  11.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberItLb0EEEbRT_:
22948|  3.23k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.23k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.23k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.23k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.23k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.23k]
  |  Branch (22955:34): [Folded, False: 3.09k]
  |  Branch (22955:57): [True: 3.09k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.23k|        return true;
22960|  3.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toItEEbRT_PKc:
22855|  3.23k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.23k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.23k|        chars_read += new_chars_read;
22860|  3.23k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.23k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 148, False: 3.09k]
  |  |  ------------------
  ------------------
22861|    148|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    148|            ++chars_read;
22864|    148|            static_cast<void>(report_eof(context));
22865|    148|            return false;
22866|    148|        }
22867|  3.09k|        return true;
22868|  3.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsItEEmPT_m:
 9445|  3.23k|    {
 9446|  3.23k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  3.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIjLb0EEEbRT_:
22948|  2.12k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.12k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.12k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.12k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.12k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.12k]
  |  Branch (22955:34): [Folded, False: 2.02k]
  |  Branch (22955:57): [True: 2.02k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.12k|        return true;
22960|  2.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIjEEbRT_PKc:
22855|  2.12k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  2.12k|        auto new_chars_read = ia.get_elements(&dest);
22859|  2.12k|        chars_read += new_chars_read;
22860|  2.12k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  2.12k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 2.02k]
  |  |  ------------------
  ------------------
22861|    103|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    103|            ++chars_read;
22864|    103|            static_cast<void>(report_eof(context));
22865|    103|            return false;
22866|    103|        }
22867|  2.02k|        return true;
22868|  2.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIjEEmPT_m:
 9445|  2.12k|    {
 9446|  2.12k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  2.12k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberImLb0EEEbRT_:
22948|  4.44k|    {
22949|       |        // read in the original format
22950|       |
22951|  4.44k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  4.44k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 4.44k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  4.44k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 4.44k]
  |  Branch (22955:34): [Folded, False: 4.30k]
  |  Branch (22955:57): [True: 4.30k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  4.44k|        return true;
22960|  4.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIjEEbT_RSC_:
23119|    415|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    415|        return get_bytes(len, "string", result);
23130|    415|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIjSC_EEbT_PKcRT0_:
23245|    415|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    415|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    415|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 186, False: 229]
  ------------------
23250|    186|        {
23251|    186|            return true;
23252|    186|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    229|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    229|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 92, False: 137]
  ------------------
23258|     92|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     92|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 37, False: 55]
  ------------------
23262|     92|                                       ? static_cast<std::size_t>(len)
23263|     92|                                       : chunk_size;
23264|     92|            const std::size_t old_size = result.size();
23265|     92|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     92|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     92|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 92, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     92|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     92|            chars_read += bytes_read;
23273|     92|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     92|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 92, False: 0]
  |  |  ------------------
  ------------------
23274|     92|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     92|                result.resize(old_size + bytes_read);
23279|     92|                ++chars_read;
23280|     92|                current = char_traits<char_type>::eof();
23281|     92|                return unexpect_eof(context);
23282|     92|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    137|        return true;
23288|    229|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIjEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    415|    {
23295|    415|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 137, False: 278]
  ------------------
23296|    137|        {
23297|    137|            return false;
23298|    137|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    278|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    278|        const std::size_t remaining = ia.bulk_remaining();
23303|    278|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 92, False: 186]
  ------------------
23304|     92|        {
23305|     92|            return false; // (the loop reports the premature end)
23306|     92|        }
23307|    186|        const auto n = static_cast<std::size_t>(ulen);
23308|    186|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    186|        ia.bulk_skip(n);
23310|    186|        chars_read += n;
23311|    186|        return true;
23312|    278|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIhSC_EEbT_PKcRT0_:
23245|  20.7k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  20.7k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  20.7k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 11.6k, False: 9.07k]
  ------------------
23250|  11.6k|        {
23251|  11.6k|            return true;
23252|  11.6k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  9.07k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  9.07k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 34, False: 9.03k]
  ------------------
23258|     34|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     34|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 34, False: 0]
  ------------------
23262|     34|                                       ? static_cast<std::size_t>(len)
23263|     34|                                       : chunk_size;
23264|     34|            const std::size_t old_size = result.size();
23265|     34|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     34|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     34|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 34, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     34|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     34|            chars_read += bytes_read;
23273|     34|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     34|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 0]
  |  |  ------------------
  ------------------
23274|     34|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     34|                result.resize(old_size + bytes_read);
23279|     34|                ++chars_read;
23280|     34|                current = char_traits<char_type>::eof();
23281|     34|                return unexpect_eof(context);
23282|     34|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|  9.03k|        return true;
23288|  9.07k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIhEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  20.7k|    {
23295|  20.7k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 9.03k, False: 11.6k]
  ------------------
23296|  9.03k|        {
23297|  9.03k|            return false;
23298|  9.03k|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  11.6k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  11.6k|        const std::size_t remaining = ia.bulk_remaining();
23303|  11.6k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 34, False: 11.6k]
  ------------------
23304|     34|        {
23305|     34|            return false; // (the loop reports the premature end)
23306|     34|        }
23307|  11.6k|        const auto n = static_cast<std::size_t>(ulen);
23308|  11.6k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  11.6k|        ia.bulk_skip(n);
23310|  11.6k|        chars_read += n;
23311|  11.6k|        return true;
23312|  11.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesItSC_EEbT_PKcRT0_:
23245|    916|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    916|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    916|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 500, False: 416]
  ------------------
23250|    500|        {
23251|    500|            return true;
23252|    500|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    416|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    416|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 67, False: 349]
  ------------------
23258|     67|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     67|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 46, False: 21]
  ------------------
23262|     67|                                       ? static_cast<std::size_t>(len)
23263|     67|                                       : chunk_size;
23264|     67|            const std::size_t old_size = result.size();
23265|     67|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     67|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     67|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 67, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     67|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     67|            chars_read += bytes_read;
23273|     67|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     67|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 67, False: 0]
  |  |  ------------------
  ------------------
23274|     67|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     67|                result.resize(old_size + bytes_read);
23279|     67|                ++chars_read;
23280|     67|                current = char_traits<char_type>::eof();
23281|     67|                return unexpect_eof(context);
23282|     67|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    349|        return true;
23288|    416|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockItEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    916|    {
23295|    916|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 349, False: 567]
  ------------------
23296|    349|        {
23297|    349|            return false;
23298|    349|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    567|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    567|        const std::size_t remaining = ia.bulk_remaining();
23303|    567|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 67, False: 500]
  ------------------
23304|     67|        {
23305|     67|            return false; // (the loop reports the premature end)
23306|     67|        }
23307|    500|        const auto n = static_cast<std::size_t>(ulen);
23308|    500|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    500|        ia.bulk_skip(n);
23310|    500|        chars_read += n;
23311|    500|        return true;
23312|    567|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesImSC_EEbT_PKcRT0_:
23245|    533|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    533|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    533|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 189, False: 344]
  ------------------
23250|    189|        {
23251|    189|            return true;
23252|    189|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    344|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    344|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 185, False: 159]
  ------------------
23258|    185|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    185|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 33, False: 152]
  ------------------
23262|    185|                                       ? static_cast<std::size_t>(len)
23263|    185|                                       : chunk_size;
23264|    185|            const std::size_t old_size = result.size();
23265|    185|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    185|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    185|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 185, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    185|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    185|            chars_read += bytes_read;
23273|    185|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    185|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 185, False: 0]
  |  |  ------------------
  ------------------
23274|    185|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    185|                result.resize(old_size + bytes_read);
23279|    185|                ++chars_read;
23280|    185|                current = char_traits<char_type>::eof();
23281|    185|                return unexpect_eof(context);
23282|    185|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    159|        return true;
23288|    344|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockImEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    533|    {
23295|    533|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 159, False: 374]
  ------------------
23296|    159|        {
23297|    159|            return false;
23298|    159|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    374|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    374|        const std::size_t remaining = ia.bulk_remaining();
23303|    374|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 185, False: 189]
  ------------------
23304|    185|        {
23305|    185|            return false; // (the loop reports the premature end)
23306|    185|        }
23307|    189|        const auto n = static_cast<std::size_t>(ulen);
23308|    189|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    189|        ia.bulk_skip(n);
23310|    189|        chars_read += n;
23311|    189|        return true;
23312|    374|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedIhEEbT_:
23008|  7.94k|    {
23009|  7.94k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  7.94k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 7.94k, False: 0]
  |  |  ------------------
  ------------------
23010|  7.94k|        {
23011|  7.94k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  7.94k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  7.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedItEEbT_:
23008|  2.99k|    {
23009|  2.99k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  2.99k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 2.99k, False: 0]
  |  |  ------------------
  ------------------
23010|  2.99k|        {
23011|  2.99k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  2.99k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  2.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13emit_unsignedIjEEbT_:
23008|  1.87k|    {
23009|  1.87k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1696|  1.87k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 1.87k, False: 0]
  |  |  ------------------
  ------------------
23010|  1.87k|        {
23011|  1.87k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
23012|  1.87k|        }
23013|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
23014|      0|        return emit_float(static_cast<long double>(number));
23015|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
23245|  3.04k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  3.04k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [Folded, False: 0]
  ------------------
23249|  3.04k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 0, False: 3.04k]
  ------------------
23250|      0|        {
23251|      0|            return true;
23252|      0|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|  3.04k|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|  4.53k|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 1.62k, False: 2.91k]
  ------------------
23258|  1.62k|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|  1.62k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 1.53k, False: 91]
  ------------------
23262|  1.62k|                                       ? static_cast<std::size_t>(len)
23263|  1.62k|                                       : chunk_size;
23264|  1.62k|            const std::size_t old_size = result.size();
23265|  1.62k|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|  1.62k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|  1.62k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 1.62k, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|  1.62k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|  1.62k|            chars_read += bytes_read;
23273|  1.62k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|  1.62k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 129, False: 1.49k]
  |  |  ------------------
  ------------------
23274|    129|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    129|                result.resize(old_size + bytes_read);
23279|    129|                ++chars_read;
23280|    129|                current = char_traits<char_type>::eof();
23281|    129|                return unexpect_eof(context);
23282|    129|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|  1.49k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|  1.49k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 1.49k, False: 0]
  ------------------
23285|  1.49k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|  1.49k|        }
23287|  2.91k|        return true;
23288|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockImNS0_27byte_container_with_subtypeISF_EEEEbT_RT0_NS4_17integral_constantIbLb0EEE:
23316|  3.04k|    {
23317|  3.04k|        return false;
23318|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10emit_floatIfEEbT_:
23034|  2.21k|    {
23035|  2.21k|        const auto result = static_cast<number_float_t>(number);
23036|  2.21k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1697|  4.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.21k]
  |  |  |  Branch (1697:94): [True: 1.93k, False: 282]
  |  |  |  Branch (1697:94): [True: 0, False: 1.93k]
  |  |  ------------------
  ------------------
23037|      0|        {
23038|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
23039|      0|        }
23040|  2.21k|        return sax->number_float(result, no_source);
23041|  2.21k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11enter_arrayEmi:
18630|  73.4k|    {
18631|  73.4k|        return enter_container(/*is_object*/false, len, type_marker);
18632|  73.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE12enter_objectEmi:
18636|  14.1k|    {
18637|  14.1k|        return enter_container(/*is_object*/true, len, type_marker);
18638|  14.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15unexpected_byteEPKcSM_:
23421|    150|    {
23422|    150|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
23423|    150|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE14get_half_floatEb:
23054|  29.6k|    {
23055|  29.6k|        const auto byte1_raw = get();
23056|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
23057|      0|        {
23058|      0|            return false;
23059|      0|        }
23060|  29.6k|        const auto byte2_raw = get();
23061|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
23062|      0|        {
23063|      0|            return false;
23064|      0|        }
23065|       |
23066|  29.6k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
23067|  29.6k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
23068|       |
23069|       |        // Code from RFC 8949, Appendix D, Figure 3:
23070|       |        // As half-precision floating-point numbers were only added
23071|       |        // to IEEE 754 in 2008, today's programming platforms often
23072|       |        // still only have limited support for them. It is very
23073|       |        // easy to include at least decoding support for them even
23074|       |        // without such support. An example of a small decoder for
23075|       |        // half-precision floating-point numbers in the C language
23076|       |        // is shown in Fig. 3.
23077|  29.6k|        const auto half = little_endian
  ------------------
  |  Branch (23077:27): [True: 29.5k, False: 96]
  ------------------
23078|  29.6k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
23079|  29.6k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
23080|  29.6k|        const double val = [&half]
23081|  29.6k|        {
23082|  29.6k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  29.6k|            const unsigned int mant = half & 0x3FFu;
23084|  29.6k|            JSON_ASSERT(exp <= 31);
23085|  29.6k|            JSON_ASSERT(mant <= 1023);
23086|  29.6k|            switch (exp)
23087|  29.6k|            {
23088|  29.6k|                case 0:
23089|  29.6k|                    return std::ldexp(mant, -24);
23090|  29.6k|                case 31:
23091|  29.6k|                    return (mant == 0)
23092|  29.6k|                    ? std::numeric_limits<double>::infinity()
23093|  29.6k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  29.6k|                default:
23095|  29.6k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  29.6k|            }
23097|  29.6k|        }();
23098|  29.6k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (23098:34): [True: 5.86k, False: 23.7k]
  ------------------
23099|  29.6k|                                 ? static_cast<number_float_t>(-val)
23100|  29.6k|                                 : static_cast<number_float_t>(val), no_source);
23101|  29.6k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE14get_half_floatEbENKUlvE_clEv:
23081|  29.5k|        {
23082|  29.5k|            const int exp = (half >> 10u) & 0x1Fu;
23083|  29.5k|            const unsigned int mant = half & 0x3FFu;
23084|  29.5k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2643|  29.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23084:13): [True: 29.5k, False: 0]
  ------------------
23085|  29.5k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2643|  29.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23085:13): [True: 29.5k, False: 0]
  ------------------
23086|  29.5k|            switch (exp)
23087|  29.5k|            {
23088|  6.40k|                case 0:
  ------------------
  |  Branch (23088:17): [True: 6.40k, False: 23.1k]
  ------------------
23089|  6.40k|                    return std::ldexp(mant, -24);
23090|  1.96k|                case 31:
  ------------------
  |  Branch (23090:17): [True: 1.96k, False: 27.5k]
  ------------------
23091|  1.96k|                    return (mant == 0)
  ------------------
  |  Branch (23091:28): [True: 2, False: 1.96k]
  ------------------
23092|  1.96k|                    ? std::numeric_limits<double>::infinity()
23093|  1.96k|                    : std::numeric_limits<double>::quiet_NaN();
23094|  21.1k|                default:
  ------------------
  |  Branch (23094:17): [True: 21.1k, False: 8.37k]
  ------------------
23095|  21.1k|                    return std::ldexp(mant + 1024, exp - 25);
23096|  29.5k|            }
23097|  29.5k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIfLb0EEEbRT_:
22948|    812|    {
22949|       |        // read in the original format
22950|       |
22951|    812|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|    812|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 812]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|    812|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 812]
  |  Branch (22955:34): [Folded, False: 713]
  |  Branch (22955:57): [True: 713, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|    812|        return true;
22960|    812|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIfEEbRT_PKc:
22855|    812|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|    812|        auto new_chars_read = ia.get_elements(&dest);
22859|    812|        chars_read += new_chars_read;
22860|    812|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|    812|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 99, False: 713]
  |  |  ------------------
  ------------------
22861|     99|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|     99|            ++chars_read;
22864|     99|            static_cast<void>(report_eof(context));
22865|     99|            return false;
22866|     99|        }
22867|    713|        return true;
22868|    812|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIfEEmPT_m:
 9445|    812|    {
 9446|    812|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|    812|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIdLb0EEEbRT_:
22948|    534|    {
22949|       |        // read in the original format
22950|       |
22951|    534|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|    534|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 534]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|    534|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 534]
  |  Branch (22955:34): [Folded, False: 442]
  |  Branch (22955:57): [True: 442, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|    534|        return true;
22960|    534|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthIhEEbRSC_PKc:
23198|  20.7k|    {
23199|  20.7k|        NumberType len{};
23200|  20.7k|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 20.7k, False: 18]
  |  Branch (23200:35): [True: 20.6k, False: 34]
  |  Branch (23200:62): [True: 20.6k, False: 0]
  ------------------
23201|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIhEEbT_RSC_:
23119|  20.7k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  20.7k|        return get_bytes(len, "string", result);
23130|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthItEEbRSC_PKc:
23198|    924|    {
23199|    924|        NumberType len{};
23200|    924|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 916, False: 8]
  |  Branch (23200:35): [True: 849, False: 67]
  |  Branch (23200:62): [True: 849, False: 0]
  ------------------
23201|    924|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringItEEbT_RSC_:
23119|    916|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    916|        return get_bytes(len, "string", result);
23130|    916|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthIjEEbRSC_PKc:
23198|    426|    {
23199|    426|        NumberType len{};
23200|    426|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 415, False: 11]
  |  Branch (23200:35): [True: 323, False: 92]
  |  Branch (23200:62): [True: 323, False: 0]
  ------------------
23201|    426|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIaLb0EEEbRT_:
22948|  22.2k|    {
22949|       |        // read in the original format
22950|       |
22951|  22.2k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  22.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 22.2k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  22.2k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 22.2k]
  |  Branch (22955:34): [Folded, False: 22.1k]
  |  Branch (22955:57): [True: 22.1k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  22.2k|        return true;
22960|  22.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIaEEbRT_PKc:
22855|  22.2k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  22.2k|        auto new_chars_read = ia.get_elements(&dest);
22859|  22.2k|        chars_read += new_chars_read;
22860|  22.2k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  22.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 22.1k]
  |  |  ------------------
  ------------------
22861|    114|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    114|            ++chars_read;
22864|    114|            static_cast<void>(report_eof(context));
22865|    114|            return false;
22866|    114|        }
22867|  22.1k|        return true;
22868|  22.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIaEEmPT_m:
 9445|  22.2k|    {
 9446|  22.2k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  22.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIaEEbT_:
22980|  7.00k|    {
22981|  7.00k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  7.00k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 7.00k, False: 0]
  |  |  ------------------
  ------------------
22982|  7.00k|        {
22983|  7.00k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  7.00k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIsLb0EEEbRT_:
22948|  3.61k|    {
22949|       |        // read in the original format
22950|       |
22951|  3.61k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  3.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.61k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  3.61k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 3.61k]
  |  Branch (22955:34): [Folded, False: 3.48k]
  |  Branch (22955:57): [True: 3.48k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  3.61k|        return true;
22960|  3.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE6get_toIsEEbRT_PKc:
22855|  3.61k|    {
22856|       |        // false positive: new_chars_read is read on the next lines
22857|       |        // @infer-ignore DEAD_STORE
22858|  3.61k|        auto new_chars_read = ia.get_elements(&dest);
22859|  3.61k|        chars_read += new_chars_read;
22860|  3.61k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1697|  3.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 135, False: 3.48k]
  |  |  ------------------
  ------------------
22861|    135|        {
22862|       |            // in case of failure, advance position by 1 to report the failing location
22863|    135|            ++chars_read;
22864|    135|            static_cast<void>(report_eof(context));
22865|    135|            return false;
22866|    135|        }
22867|  3.48k|        return true;
22868|  3.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIsEEmPT_m:
 9445|  3.61k|    {
 9446|  3.61k|        return fread(dest, 1, sizeof(T) * count, m_file);
 9447|  3.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE11emit_signedIsEEbT_:
22980|  3.23k|    {
22981|  3.23k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1696|  3.23k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 3.23k, False: 0]
  |  |  ------------------
  ------------------
22982|  3.23k|        {
22983|  3.23k|            return sax->number_integer(static_cast<number_integer_t>(number));
22984|  3.23k|        }
22985|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (22985:13): [True: 0, False: 0]
  ------------------
22986|      0|        {
22987|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
22988|      0|        }
22989|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
22990|      0|        return emit_float(static_cast<long double>(number));
22991|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIiLb0EEEbRT_:
22948|  2.26k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.26k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.26k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.26k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.26k]
  |  Branch (22955:34): [Folded, False: 2.13k]
  |  Branch (22955:57): [True: 2.13k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.26k|        return true;
22960|  2.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_numberIlLb0EEEbRT_:
22948|  2.72k|    {
22949|       |        // read in the original format
22950|       |
22951|  2.72k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1697|  2.72k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.72k]
  |  |  ------------------
  ------------------
22952|      0|        {
22953|      0|            return false;
22954|      0|        }
22955|  2.72k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (22955:13): [True: 0, False: 2.72k]
  |  Branch (22955:34): [Folded, False: 2.57k]
  |  Branch (22955:57): [True: 2.57k, False: 0]
  ------------------
22956|      0|        {
22957|      0|            byte_swap(result);
22958|      0|        }
22959|  2.72k|        return true;
22960|  2.72k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE21parse_ubjson_internalEv:
21219|  14.9k|    {
21220|       |        // the key currently being read; hoisted out of the loop so that its
21221|       |        // capacity is reused across elements and across nesting levels
21222|  14.9k|        string_t key;
21223|       |
21224|       |        // the type marker of the value to read next
21225|  14.9k|        char_int_type prefix = get_ignore_noop();
21226|       |
21227|   198k|        while (true)
  ------------------
  |  Branch (21227:16): [True: 190k, Folded]
  ------------------
21228|   190k|        {
21229|   190k|            const std::size_t depth = container_stack.size();
21230|       |
21231|   190k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1697|   190k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 190k]
  |  |  ------------------
  ------------------
21232|      0|            {
21233|      0|                return false;
21234|      0|            }
21235|       |
21236|       |            // the value begun here is complete once it is not inside anything
21237|   190k|            if (container_stack.empty())
  ------------------
  |  Branch (21237:17): [True: 2.70k, False: 188k]
  ------------------
21238|  2.70k|            {
21239|  2.70k|                return true;
21240|  2.70k|            }
21241|       |
21242|       |            // a value was completed rather than a container opened; a
21243|       |            // container that ends at a marker needs the next byte to test
21244|   188k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (21244:17): [True: 94.4k, False: 93.6k]
  |  Branch (21244:52): [True: 62.8k, False: 31.6k]
  ------------------
21245|  62.8k|            {
21246|  62.8k|                get_ignore_noop();
21247|  62.8k|            }
21248|       |
21249|       |            // advance to the next element, closing the containers that ended.
21250|       |            // top is a copy, not a reference: it must stay valid across the
21251|       |            // pop_back() below, which destroys the container_stack element it
21252|       |            // would otherwise alias.
21253|   188k|            for (;;)
21254|   233k|            {
21255|   233k|                const container_frame top = container_stack.back();
21256|       |
21257|   233k|                if (top.remaining != npos)
  ------------------
  |  Branch (21257:21): [True: 37.5k, False: 195k]
  ------------------
21258|  37.5k|                {
21259|  37.5k|                    if (top.remaining != 0)
  ------------------
  |  Branch (21259:25): [True: 33.6k, False: 3.84k]
  ------------------
21260|  33.6k|                    {
21261|  33.6k|                        --container_stack.back().remaining;
21262|  33.6k|                        if (top.is_object)
  ------------------
  |  Branch (21262:29): [True: 789, False: 32.9k]
  ------------------
21263|    789|                        {
21264|    789|                            key.clear();
21265|    789|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1697|  1.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 789]
  |  |  |  Branch (1697:94): [True: 68, False: 721]
  |  |  |  Branch (1697:94): [True: 0, False: 721]
  |  |  ------------------
  ------------------
21266|      0|                            {
21267|      0|                                return false;
21268|      0|                            }
21269|    789|                        }
21270|       |                        // an optimized container gives its elements no marker
21271|  33.6k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (21271:34): [True: 31.5k, False: 2.10k]
  ------------------
21272|  33.6k|                        break;
21273|  33.6k|                    }
21274|  37.5k|                }
21275|       |                // the end marker is compared against a literal rather than
21276|       |                // against a conditional expression, because char_int_type is
21277|       |                // unsigned for some input adapters and MSVC then reports the
21278|       |                // comparison as a signed/unsigned mismatch
21279|   195k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (21279:26): [True: 33.4k, False: 162k]
  |  Branch (21279:26): [True: 143k, False: 52.6k]
  ------------------
21280|   143k|                {
21281|       |                    // a container that ends at a marker is never optimized, so
21282|       |                    // every element carries its own marker; for an object the
21283|       |                    // byte tested above is the first byte of the key
21284|   143k|                    if (top.is_object)
  ------------------
  |  Branch (21284:25): [True: 22.7k, False: 120k]
  ------------------
21285|  22.7k|                    {
21286|  22.7k|                        key.clear();
21287|  22.7k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1697|  44.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 22.7k]
  |  |  |  Branch (1697:94): [True: 989, False: 21.7k]
  |  |  |  Branch (1697:94): [True: 0, False: 21.7k]
  |  |  ------------------
  ------------------
21288|      0|                        {
21289|      0|                            return false;
21290|      0|                        }
21291|  22.7k|                        prefix = get_ignore_noop();
21292|  22.7k|                    }
21293|   120k|                    else
21294|   120k|                    {
21295|   120k|                        prefix = current;
21296|   120k|                    }
21297|   143k|                    break;
21298|   143k|                }
21299|       |
21300|  56.4k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1697|  56.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 56.4k]
  |  |  ------------------
  ------------------
21301|      0|                {
21302|      0|                    return false;
21303|      0|                }
21304|  56.4k|                if (container_stack.empty())
  ------------------
  |  Branch (21304:21): [True: 4.86k, False: 51.5k]
  ------------------
21305|  4.86k|                {
21306|  4.86k|                    return true;
21307|  4.86k|                }
21308|       |                // the container that just ended was an element of the one
21309|       |                // below it, which may need the next byte for its own test
21310|  51.5k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (21310:21): [True: 51.2k, False: 305]
  ------------------
21311|  51.2k|                {
21312|  51.2k|                    get_ignore_noop();
21313|  51.2k|                }
21314|  51.5k|            }
21315|   188k|        }
21316|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE16get_ubjson_valueEi:
21816|   192k|    {
21817|   192k|        switch (prefix)
21818|   192k|        {
21819|  1.30k|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (21819:13): [True: 1.30k, False: 190k]
  ------------------
21820|  1.30k|                return unexpect_eof("value");
21821|       |
21822|  10.6k|            case 'T':  // true
  ------------------
  |  Branch (21822:13): [True: 10.6k, False: 181k]
  ------------------
21823|  10.6k|                return sax->boolean(true);
21824|  5.36k|            case 'F':  // false
  ------------------
  |  Branch (21824:13): [True: 5.36k, False: 186k]
  ------------------
21825|  5.36k|                return sax->boolean(false);
21826|       |
21827|  11.1k|            case 'Z':  // null
  ------------------
  |  Branch (21827:13): [True: 11.1k, False: 181k]
  ------------------
21828|  11.1k|                return sax->null();
21829|       |
21830|  1.14k|            case 'B':  // byte
  ------------------
  |  Branch (21830:13): [True: 1.14k, False: 191k]
  ------------------
21831|  1.14k|            {
21832|  1.14k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21832:21): [True: 0, False: 1.14k]
  ------------------
21833|      0|                {
21834|      0|                    break;
21835|      0|                }
21836|  1.14k|                std::uint8_t number{};
21837|  1.14k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21837:24): [True: 1.13k, False: 6]
  |  Branch (21837:46): [True: 1.13k, False: 0]
  ------------------
21838|  1.14k|            }
21839|       |
21840|  2.93k|            case 'U':
  ------------------
  |  Branch (21840:13): [True: 2.93k, False: 189k]
  ------------------
21841|  2.93k|            {
21842|  2.93k|                std::uint8_t number{};
21843|  2.93k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21843:24): [True: 2.81k, False: 116]
  |  Branch (21843:46): [True: 2.81k, False: 0]
  ------------------
21844|  1.14k|            }
21845|       |
21846|  3.54k|            case 'i':
  ------------------
  |  Branch (21846:13): [True: 3.54k, False: 188k]
  ------------------
21847|  3.54k|            {
21848|  3.54k|                std::int8_t number{};
21849|  3.54k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21849:24): [True: 3.45k, False: 87]
  |  Branch (21849:46): [True: 3.45k, False: 0]
  ------------------
21850|  1.14k|            }
21851|       |
21852|  1.31k|            case 'I':
  ------------------
  |  Branch (21852:13): [True: 1.31k, False: 190k]
  ------------------
21853|  1.31k|            {
21854|  1.31k|                std::int16_t number{};
21855|  1.31k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21855:24): [True: 1.22k, False: 88]
  |  Branch (21855:46): [True: 1.22k, False: 0]
  ------------------
21856|  1.14k|            }
21857|       |
21858|    912|            case 'l':
  ------------------
  |  Branch (21858:13): [True: 912, False: 191k]
  ------------------
21859|    912|            {
21860|    912|                std::int32_t number{};
21861|    912|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21861:24): [True: 820, False: 92]
  |  Branch (21861:46): [True: 820, False: 0]
  ------------------
21862|  1.14k|            }
21863|       |
21864|  1.45k|            case 'L':
  ------------------
  |  Branch (21864:13): [True: 1.45k, False: 190k]
  ------------------
21865|  1.45k|            {
21866|  1.45k|                std::int64_t number{};
21867|  1.45k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (21867:24): [True: 1.36k, False: 94]
  |  Branch (21867:46): [True: 1.36k, False: 0]
  ------------------
21868|  1.14k|            }
21869|       |
21870|  1.03k|            case 'u':
  ------------------
  |  Branch (21870:13): [True: 1.03k, False: 191k]
  ------------------
21871|  1.03k|            {
21872|  1.03k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21872:21): [True: 0, False: 1.03k]
  ------------------
21873|      0|                {
21874|      0|                    break;
21875|      0|                }
21876|  1.03k|                std::uint16_t number{};
21877|  1.03k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21877:24): [True: 937, False: 93]
  |  Branch (21877:46): [True: 937, False: 0]
  ------------------
21878|  1.03k|            }
21879|       |
21880|    925|            case 'm':
  ------------------
  |  Branch (21880:13): [True: 925, False: 191k]
  ------------------
21881|    925|            {
21882|    925|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21882:21): [True: 0, False: 925]
  ------------------
21883|      0|                {
21884|      0|                    break;
21885|      0|                }
21886|    925|                std::uint32_t number{};
21887|    925|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21887:24): [True: 863, False: 62]
  |  Branch (21887:46): [True: 863, False: 0]
  ------------------
21888|    925|            }
21889|       |
21890|  2.77k|            case 'M':
  ------------------
  |  Branch (21890:13): [True: 2.77k, False: 189k]
  ------------------
21891|  2.77k|            {
21892|  2.77k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21892:21): [True: 0, False: 2.77k]
  ------------------
21893|      0|                {
21894|      0|                    break;
21895|      0|                }
21896|  2.77k|                std::uint64_t number{};
21897|  2.77k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (21897:24): [True: 2.68k, False: 88]
  |  Branch (21897:46): [True: 2.68k, False: 0]
  ------------------
21898|  2.77k|            }
21899|       |
21900|  29.6k|            case 'h':
  ------------------
  |  Branch (21900:13): [True: 29.6k, False: 162k]
  ------------------
21901|  29.6k|            {
21902|  29.6k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21902:21): [True: 0, False: 29.6k]
  ------------------
21903|      0|                {
21904|      0|                    break;
21905|      0|                }
21906|  29.6k|                return get_half_float(true);
21907|  29.6k|            }
21908|       |
21909|    812|            case 'd':
  ------------------
  |  Branch (21909:13): [True: 812, False: 191k]
  ------------------
21910|    812|            {
21911|    812|                float number{};
21912|    812|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21912:24): [True: 713, False: 99]
  |  Branch (21912:46): [True: 713, False: 0]
  ------------------
21913|  29.6k|            }
21914|       |
21915|    534|            case 'D':
  ------------------
  |  Branch (21915:13): [True: 534, False: 191k]
  ------------------
21916|    534|            {
21917|    534|                double number{};
21918|    534|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (21918:24): [True: 442, False: 92]
  |  Branch (21918:46): [True: 442, False: 0]
  ------------------
21919|  29.6k|            }
21920|       |
21921|  7.55k|            case 'H':
  ------------------
  |  Branch (21921:13): [True: 7.55k, False: 184k]
  ------------------
21922|  7.55k|            {
21923|  7.55k|                return get_ubjson_high_precision_number();
21924|  29.6k|            }
21925|       |
21926|  8.48k|            case 'C':  // char
  ------------------
  |  Branch (21926:13): [True: 8.48k, False: 183k]
  ------------------
21927|  8.48k|            {
21928|  8.48k|                get();
21929|  8.48k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|  8.48k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 8.48k]
  |  |  ------------------
  ------------------
21930|      0|                {
21931|      0|                    return false;
21932|      0|                }
21933|  8.48k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|  8.48k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 2, False: 8.48k]
  |  |  ------------------
  ------------------
21934|      2|                {
21935|      2|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
21936|      2|                }
21937|  8.48k|                string_t s(1, static_cast<typename string_t::value_type>(current));
21938|  8.48k|                return sax->string(s);
21939|  8.48k|            }
21940|       |
21941|  6.10k|            case 'S':  // string
  ------------------
  |  Branch (21941:13): [True: 6.10k, False: 186k]
  ------------------
21942|  6.10k|            {
21943|  6.10k|                string_t s;
21944|  6.10k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (21944:24): [True: 5.94k, False: 165]
  |  Branch (21944:48): [True: 5.94k, False: 0]
  ------------------
21945|  8.48k|            }
21946|       |
21947|  80.0k|            case '[':  // array
  ------------------
  |  Branch (21947:13): [True: 80.0k, False: 112k]
  ------------------
21948|  80.0k|                return get_ubjson_array();
21949|       |
21950|  14.3k|            case '{':  // object
  ------------------
  |  Branch (21950:13): [True: 14.3k, False: 177k]
  ------------------
21951|  14.3k|                return get_ubjson_object();
21952|       |
21953|    150|            default: // anything else
  ------------------
  |  Branch (21953:13): [True: 150, False: 192k]
  ------------------
21954|    150|                break;
21955|   192k|        }
21956|    150|        return unexpected_byte("invalid byte", "value");
21957|   192k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE32get_ubjson_high_precision_numberEv:
22198|  7.55k|    {
22199|       |        // get the size of the following number string
22200|  7.55k|        std::size_t size{};
22201|  7.55k|        bool no_ndarray = true;
22202|  7.55k|        auto res = get_ubjson_size_value(size, no_ndarray);
22203|  7.55k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1697|  7.55k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.55k]
  |  |  ------------------
  ------------------
22204|      0|        {
22205|      0|            return res;
22206|      0|        }
22207|       |
22208|       |        // get number string
22209|  7.55k|        std::vector<char> number_vector;
22210|   101k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (22210:33): [True: 94.3k, False: 7.55k]
  ------------------
22211|  94.3k|        {
22212|  94.3k|            get();
22213|  94.3k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1697|  94.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 94.3k]
  |  |  ------------------
  ------------------
22214|      0|            {
22215|      0|                return false;
22216|      0|            }
22217|       |            // the lexer would stop at a NUL and accept the digits before it
22218|  94.3k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1697|  94.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 4, False: 94.3k]
  |  |  ------------------
  ------------------
22219|      4|            {
22220|      4|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22221|      4|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
22222|      4|            }
22223|  94.3k|            number_vector.push_back(static_cast<char>(current));
22224|  94.3k|        }
22225|       |
22226|       |        // parse number string
22227|  7.55k|        using ia_type = decltype(detail::input_adapter(number_vector));
22228|  7.55k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
22229|  7.55k|        const auto result_number = number_lexer.scan();
22230|  7.55k|        const auto number_string = number_lexer.get_token_string();
22231|  7.55k|        const auto result_remainder = number_lexer.scan();
22232|       |
22233|  7.55k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
22234|       |
22235|  7.55k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1697|  7.55k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1.33k, False: 6.21k]
  |  |  ------------------
  ------------------
22236|  1.33k|        {
22237|  1.33k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22238|  1.33k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22239|  1.33k|        }
22240|       |
22241|  6.21k|        switch (result_number)
22242|  6.21k|        {
22243|    310|            case token_type::value_integer:
  ------------------
  |  Branch (22243:13): [True: 310, False: 5.90k]
  ------------------
22244|    310|                return sax->number_integer(number_lexer.get_number_integer());
22245|  1.73k|            case token_type::value_unsigned:
  ------------------
  |  Branch (22245:13): [True: 1.73k, False: 4.48k]
  ------------------
22246|  1.73k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
22247|  3.20k|            case token_type::value_float:
  ------------------
  |  Branch (22247:13): [True: 3.20k, False: 3.01k]
  ------------------
22248|  3.20k|            {
22249|  3.20k|                const auto parsed_float = number_lexer.get_number_float();
22250|  3.20k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1697|  3.20k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 114, False: 3.09k]
  |  |  ------------------
  ------------------
22251|    114|                {
22252|    114|                    return sax->parse_error(
22253|    114|                               chars_read,
22254|    114|                               number_string,
22255|    114|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
22256|    114|                }
22257|       |                // number_string is a std::string, while the SAX interface takes a
22258|       |                // string_t; convert explicitly, as the two are only implicitly
22259|       |                // convertible for some string types
22260|  3.09k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
22261|  3.20k|            }
22262|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (22262:13): [True: 0, False: 6.21k]
  ------------------
22263|      1|            case token_type::literal_true:
  ------------------
  |  Branch (22263:13): [True: 1, False: 6.21k]
  ------------------
22264|      2|            case token_type::literal_false:
  ------------------
  |  Branch (22264:13): [True: 1, False: 6.21k]
  ------------------
22265|      2|            case token_type::literal_null:
  ------------------
  |  Branch (22265:13): [True: 0, False: 6.21k]
  ------------------
22266|      4|            case token_type::value_string:
  ------------------
  |  Branch (22266:13): [True: 2, False: 6.21k]
  ------------------
22267|      6|            case token_type::begin_array:
  ------------------
  |  Branch (22267:13): [True: 2, False: 6.21k]
  ------------------
22268|      7|            case token_type::begin_object:
  ------------------
  |  Branch (22268:13): [True: 1, False: 6.21k]
  ------------------
22269|      8|            case token_type::end_array:
  ------------------
  |  Branch (22269:13): [True: 1, False: 6.21k]
  ------------------
22270|      9|            case token_type::end_object:
  ------------------
  |  Branch (22270:13): [True: 1, False: 6.21k]
  ------------------
22271|     10|            case token_type::name_separator:
  ------------------
  |  Branch (22271:13): [True: 1, False: 6.21k]
  ------------------
22272|     11|            case token_type::value_separator:
  ------------------
  |  Branch (22272:13): [True: 1, False: 6.21k]
  ------------------
22273|    566|            case token_type::parse_error:
  ------------------
  |  Branch (22273:13): [True: 555, False: 5.65k]
  ------------------
22274|    612|            case token_type::end_of_input:
  ------------------
  |  Branch (22274:13): [True: 46, False: 6.16k]
  ------------------
22275|    612|            case token_type::literal_or_value:
  ------------------
  |  Branch (22275:13): [True: 0, False: 6.21k]
  ------------------
22276|    612|            default:
  ------------------
  |  Branch (22276:13): [True: 0, False: 6.21k]
  ------------------
22277|    612|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
22278|    612|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
22279|  6.21k|        }
22280|  6.21k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE21get_ubjson_size_valueERmRbii:
21560|  39.7k|    {
21561|  39.7k|        if (prefix == 0)
  ------------------
  |  Branch (21561:13): [True: 22.2k, False: 17.4k]
  ------------------
21562|  22.2k|        {
21563|  22.2k|            prefix = get_ignore_noop();
21564|  22.2k|        }
21565|       |
21566|  39.7k|        switch (prefix)
21567|  39.7k|        {
21568|  12.1k|            case 'U':
  ------------------
  |  Branch (21568:13): [True: 12.1k, False: 27.5k]
  ------------------
21569|  12.1k|            {
21570|  12.1k|                std::uint8_t number{};
21571|  12.1k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  12.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 12.1k]
  |  |  ------------------
  ------------------
21572|      0|                {
21573|      0|                    return false;
21574|      0|                }
21575|  12.1k|                result = static_cast<std::size_t>(number);
21576|  12.1k|                return true;
21577|  12.1k|            }
21578|       |
21579|  13.7k|            case 'i':
  ------------------
  |  Branch (21579:13): [True: 13.7k, False: 25.9k]
  ------------------
21580|  13.7k|                return get_ubjson_signed_count<std::int8_t>(result);
21581|       |
21582|  1.61k|            case 'I':
  ------------------
  |  Branch (21582:13): [True: 1.61k, False: 38.1k]
  ------------------
21583|  1.61k|                return get_ubjson_signed_count<std::int16_t>(result);
21584|       |
21585|    849|            case 'l':
  ------------------
  |  Branch (21585:13): [True: 849, False: 38.8k]
  ------------------
21586|    849|                return get_ubjson_signed_count<std::int32_t>(result);
21587|       |
21588|    744|            case 'L':
  ------------------
  |  Branch (21588:13): [True: 744, False: 38.9k]
  ------------------
21589|    744|                return get_ubjson_signed_count<std::int64_t>(result);
21590|       |
21591|  1.28k|            case 'u':
  ------------------
  |  Branch (21591:13): [True: 1.28k, False: 38.4k]
  ------------------
21592|  1.28k|            {
21593|  1.28k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21593:21): [True: 0, False: 1.28k]
  ------------------
21594|      0|                {
21595|      0|                    break;
21596|      0|                }
21597|  1.28k|                std::uint16_t number{};
21598|  1.28k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.28k]
  |  |  ------------------
  ------------------
21599|      0|                {
21600|      0|                    return false;
21601|      0|                }
21602|  1.28k|                result = static_cast<std::size_t>(number);
21603|  1.28k|                return true;
21604|  1.28k|            }
21605|       |
21606|    772|            case 'm':
  ------------------
  |  Branch (21606:13): [True: 772, False: 38.9k]
  ------------------
21607|    772|            {
21608|    772|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21608:21): [True: 0, False: 772]
  ------------------
21609|      0|                {
21610|      0|                    break;
21611|      0|                }
21612|    772|                std::uint32_t number{};
21613|    772|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    772|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 772]
  |  |  ------------------
  ------------------
21614|      0|                {
21615|      0|                    return false;
21616|      0|                }
21617|    772|                return store_ubjson_count(conditional_static_cast<std::size_t>(number), result);
21618|    772|            }
21619|       |
21620|  1.11k|            case 'M':
  ------------------
  |  Branch (21620:13): [True: 1.11k, False: 38.6k]
  ------------------
21621|  1.11k|            {
21622|  1.11k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21622:21): [True: 0, False: 1.11k]
  ------------------
21623|      0|                {
21624|      0|                    break;
21625|      0|                }
21626|  1.11k|                std::uint64_t number{};
21627|  1.11k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
21628|      0|                {
21629|      0|                    return false;
21630|      0|                }
21631|  1.11k|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (21631:21): [True: 0, False: 1.11k]
  ------------------
21632|      0|                {
21633|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21634|      0|                }
21635|  1.11k|                return store_ubjson_count(detail::conditional_static_cast<std::size_t>(number), result);
21636|  1.11k|            }
21637|       |
21638|  7.13k|            case '[':
  ------------------
  |  Branch (21638:13): [True: 7.13k, False: 32.6k]
  ------------------
21639|  7.13k|            {
21640|  7.13k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21640:21): [True: 0, False: 7.13k]
  ------------------
21641|      0|                {
21642|      0|                    break;
21643|      0|                }
21644|  7.13k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (21644:21): [True: 11, False: 7.11k]
  ------------------
21645|     11|                {
21646|     11|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
21647|     11|                }
21648|  7.11k|                std::vector<size_t> dim;
21649|  7.11k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1697|  7.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.11k]
  |  |  ------------------
  ------------------
21650|      0|                {
21651|      0|                    return false;
21652|      0|                }
21653|  7.11k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (21653:21): [True: 1.12k, False: 5.99k]
  |  Branch (21653:41): [True: 2.11k, False: 3.88k]
  |  Branch (21653:60): [True: 135, False: 1.98k]
  ------------------
21654|    728|                {
21655|    728|                    result = dim.at(dim.size() - 1);
21656|    728|                    return true;
21657|    728|                }
21658|  6.39k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (21658:21): [True: 3.30k, False: 3.08k]
  ------------------
21659|  3.30k|                {
21660|  3.30k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (21660:33): [True: 9.36k, False: 3.14k]
  ------------------
21661|  9.36k|                    {
21662|  9.36k|                        if ( i == 0 )
  ------------------
  |  Branch (21662:30): [True: 156, False: 9.20k]
  ------------------
21663|    156|                        {
21664|    156|                            result = 0;
21665|    156|                            return true;
21666|    156|                        }
21667|  9.36k|                    }
21668|       |
21669|  3.14k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1697|  3.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
21670|      0|                    {
21671|      0|                        return false;
21672|      0|                    }
21673|       |
21674|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
21675|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
21676|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
21677|  3.14k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (21677:25): [True: 2.99k, False: 157]
  ------------------
21678|  2.99k|                    {
21679|       |                        // every optimized type marker is_valid_optimized_type() accepts for BJData has a name
21680|  2.99k|                        const char* type_name = bjd_type_name(ndarray_dtype);
21681|  2.99k|                        JSON_ASSERT(type_name != nullptr);
  ------------------
  |  | 2643|  2.99k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (21681:25): [True: 2.99k, False: 0]
  ------------------
21682|       |
21683|  2.99k|                        string_t type_key = "_ArrayType_";
21684|  2.99k|                        string_t type = type_name; // sax->string() takes a reference
21685|  2.99k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1697|  5.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.99k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.99k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.99k]
  |  |  ------------------
  ------------------
21686|      0|                        {
21687|      0|                            return false;
21688|      0|                        }
21689|  2.99k|                    }
21690|       |
21691|  3.14k|                    string_t key = "_ArraySize_";
21692|  3.14k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1697|  6.29k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 3.14k]
  |  |  |  Branch (1697:94): [True: 0, False: 3.14k]
  |  |  |  Branch (1697:94): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
21693|      0|                    {
21694|      0|                        return false;
21695|      0|                    }
21696|  3.14k|                    result = 1;
21697|  3.14k|                    for (auto i : dim)
  ------------------
  |  Branch (21697:33): [True: 8.51k, False: 3.09k]
  ------------------
21698|  8.51k|                    {
21699|       |                        // Pre-multiplication overflow check: since the loop above
21700|       |                        // already rejected any zero dimension, i is always > 0
21701|       |                        // here, so result > SIZE_MAX/i means result*i would
21702|       |                        // overflow. This check must happen before multiplication
21703|       |                        // since overflow detection after the fact is unreliable,
21704|       |                        // as modular arithmetic can produce any value, not just 0
21705|       |                        // or SIZE_MAX.
21706|  8.51k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1697|  8.51k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 51, False: 8.46k]
  |  |  ------------------
  ------------------
21707|     51|                        {
21708|     51|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21709|     51|                        }
21710|  8.46k|                        result *= i;
21711|       |                        // the pre-check above already rules out result becoming 0
21712|       |                        // by overflow; the only value it cannot rule out is an
21713|       |                        // exact match with npos, the sentinel reserved for an
21714|       |                        // unknown-size container (see get_ubjson_size_type())
21715|  8.46k|                        if (result == npos)
  ------------------
  |  Branch (21715:29): [True: 0, False: 8.46k]
  ------------------
21716|      0|                        {
21717|      0|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
21718|      0|                        }
21719|  8.46k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1697|  8.46k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 8.46k]
  |  |  ------------------
  ------------------
21720|      0|                        {
21721|      0|                            return false;
21722|      0|                        }
21723|  8.46k|                    }
21724|  3.09k|                    is_ndarray = true;
21725|  3.09k|                    return sax->end_array();
21726|  3.14k|                }
21727|  3.08k|                result = 0;
21728|  3.08k|                return true;
21729|  6.39k|            }
21730|       |
21731|    259|            default:
  ------------------
  |  Branch (21731:13): [True: 259, False: 39.4k]
  ------------------
21732|    259|                break;
21733|  39.7k|        }
21734|    259|        return length_type_error(" after '#'", "size");
21735|  39.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIaEEbRm:
21526|  13.7k|    {
21527|  13.7k|        SignedType number{};
21528|  13.7k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|  13.7k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 6, False: 13.7k]
  |  |  ------------------
  ------------------
21533|      6|        {
21534|      6|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|      6|        }
21536|  13.7k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  13.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  13.7k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  13.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIsEEbRm:
21526|  1.61k|    {
21527|  1.61k|        SignedType number{};
21528|  1.61k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|  1.61k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 7, False: 1.61k]
  |  |  ------------------
  ------------------
21533|      7|        {
21534|      7|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|      7|        }
21536|  1.61k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|  1.61k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|  1.61k|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|  1.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIiEEbRm:
21526|    849|    {
21527|    849|        SignedType number{};
21528|    849|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    849|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 849]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|    849|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|    849|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 815]
  |  |  ------------------
  ------------------
21533|     34|        {
21534|     34|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     34|        }
21536|    815|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|    815|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 815]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|    815|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|    815|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_signed_countIlEEbRm:
21526|    744|    {
21527|    744|        SignedType number{};
21528|    744|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1697|    744|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 744]
  |  |  ------------------
  ------------------
21529|      0|        {
21530|      0|            return false;
21531|      0|        }
21532|    744|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1697|    744|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 67, False: 677]
  |  |  ------------------
  ------------------
21533|     67|        {
21534|     67|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
21535|     67|        }
21536|    677|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1697|    677|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 677]
  |  |  ------------------
  ------------------
21537|      0|        {
21538|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21539|      0|        }
21540|    677|        return store_ubjson_count(static_cast<std::size_t>(number), result); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
21541|    677|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18store_ubjson_countEmRm:
21501|  18.5k|    {
21502|  18.5k|        if (JSON_HEDLEY_UNLIKELY(count == npos))
  ------------------
  |  | 1697|  18.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 1, False: 18.5k]
  |  |  ------------------
  ------------------
21503|      1|        {
21504|      1|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
21505|      1|        }
21506|  18.5k|        result = count;
21507|  18.5k|        return true;
21508|  18.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
21439|  7.11k|    {
21440|  7.11k|        std::pair<std::size_t, char_int_type> size_and_type;
21441|  7.11k|        size_t dimlen = 0;
21442|  7.11k|        bool no_ndarray = true;
21443|       |
21444|  7.11k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1697|  7.11k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.11k]
  |  |  ------------------
  ------------------
21445|      0|        {
21446|      0|            return false;
21447|      0|        }
21448|       |
21449|  7.11k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (21449:13): [True: 1.19k, False: 5.92k]
  ------------------
21450|  1.19k|        {
21451|  1.19k|            if (size_and_type.second != 0)
  ------------------
  |  Branch (21451:17): [True: 819, False: 380]
  ------------------
21452|    819|            {
21453|  8.76k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21453:41): [True: 7.94k, False: 819]
  ------------------
21454|  7.94k|                {
21455|  7.94k|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1697|  7.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 7.94k]
  |  |  ------------------
  ------------------
21456|      0|                    {
21457|      0|                        return false;
21458|      0|                    }
21459|  7.94k|                    dim.push_back(dimlen);
21460|  7.94k|                }
21461|    819|            }
21462|    380|            else
21463|    380|            {
21464|  1.26k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (21464:41): [True: 884, False: 380]
  ------------------
21465|    884|                {
21466|    884|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1697|    884|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 884]
  |  |  ------------------
  ------------------
21467|      0|                    {
21468|      0|                        return false;
21469|      0|                    }
21470|    884|                    dim.push_back(dimlen);
21471|    884|                }
21472|    380|            }
21473|  1.19k|        }
21474|  5.92k|        else
21475|  5.92k|        {
21476|  15.4k|            while (current != ']')
  ------------------
  |  Branch (21476:20): [True: 9.50k, False: 5.92k]
  ------------------
21477|  9.50k|            {
21478|  9.50k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1697|  9.50k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 9.50k]
  |  |  ------------------
  ------------------
21479|      0|                {
21480|      0|                    return false;
21481|      0|                }
21482|  9.50k|                dim.push_back(dimlen);
21483|  9.50k|                get_ignore_noop();
21484|  9.50k|            }
21485|  5.92k|        }
21486|  7.11k|        return true;
21487|  7.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE20get_ubjson_size_typeERNS4_4pairImiEEb:
21749|   101k|    {
21750|   101k|        result.first = npos; // size
21751|   101k|        result.second = 0; // type
21752|       |        // seed the flag with the caller's context: inside an ndarray dimension
21753|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
21754|       |        // rejects it up front instead of reading it and reporting afterwards.
21755|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
21756|       |        // another level, which overflowed the stack (see #5104).
21757|   101k|        bool is_ndarray = inside_ndarray;
21758|       |
21759|   101k|        get_ignore_noop();
21760|       |
21761|   101k|        if (current == '$')
  ------------------
  |  Branch (21761:13): [True: 10.8k, False: 90.6k]
  ------------------
21762|  10.8k|        {
21763|  10.8k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
21764|  10.8k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 10.8k]
  |  |  ------------------
  ------------------
21765|      0|            {
21766|      0|                return false;
21767|      0|            }
21768|       |
21769|       |            // validate the type marker up front: otherwise it would only be
21770|       |            // checked when an element is read, and a container with count 0
21771|       |            // would accept any marker
21772|  10.8k|            if (JSON_HEDLEY_UNLIKELY(!is_valid_optimized_type(result.second)))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 16, False: 10.8k]
  |  |  ------------------
  ------------------
21773|     16|            {
21774|     16|                return optimized_type_error();
21775|     16|            }
21776|       |
21777|  10.8k|            get_ignore_noop();
21778|  10.8k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1697|  10.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 103, False: 10.7k]
  |  |  ------------------
  ------------------
21779|    103|            {
21780|    103|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|    103|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 103]
  |  |  ------------------
  ------------------
21781|      0|                {
21782|      0|                    return false;
21783|      0|                }
21784|    103|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
21785|    103|            }
21786|       |
21787|  10.7k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
21788|       |            // an ndarray was read here only if the flag flipped; when it was
21789|       |            // seeded true, get_ubjson_size_value() already rejected the nested
21790|       |            // dimension vector
21791|  10.7k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21791:17): [True: 3.80k, False: 6.90k]
  |  Branch (21791:31): [True: 2.98k, False: 819]
  ------------------
21792|  2.98k|            {
21793|  2.98k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
21794|  2.98k|            }
21795|  10.7k|            return is_error;
21796|  10.8k|        }
21797|       |
21798|  90.6k|        if (current == '#')
  ------------------
  |  Branch (21798:13): [True: 3.13k, False: 87.5k]
  ------------------
21799|  3.13k|        {
21800|  3.13k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
21801|  3.13k|            if (is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (21801:17): [True: 489, False: 2.65k]
  |  Branch (21801:31): [True: 109, False: 380]
  ------------------
21802|    109|            {
21803|    109|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
21804|    109|            }
21805|  3.03k|            return is_error;
21806|  3.13k|        }
21807|       |
21808|  87.5k|        return true;
21809|  90.6k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE23is_valid_optimized_typeEi:
23505|  10.8k|    {
23506|  10.8k|        switch (marker)
23507|  10.8k|        {
23508|    825|            case 'i':
  ------------------
  |  Branch (23508:13): [True: 825, False: 9.99k]
  ------------------
23509|  1.57k|            case 'U':
  ------------------
  |  Branch (23509:13): [True: 752, False: 10.0k]
  ------------------
23510|  2.11k|            case 'I':
  ------------------
  |  Branch (23510:13): [True: 536, False: 10.2k]
  ------------------
23511|  2.78k|            case 'l':
  ------------------
  |  Branch (23511:13): [True: 669, False: 10.1k]
  ------------------
23512|  3.27k|            case 'L':
  ------------------
  |  Branch (23512:13): [True: 489, False: 10.3k]
  ------------------
23513|  3.77k|            case 'd':
  ------------------
  |  Branch (23513:13): [True: 504, False: 10.3k]
  ------------------
23514|  4.35k|            case 'D':
  ------------------
  |  Branch (23514:13): [True: 580, False: 10.2k]
  ------------------
23515|  4.78k|            case 'C':
  ------------------
  |  Branch (23515:13): [True: 427, False: 10.3k]
  ------------------
23516|  4.78k|                return true;
23517|      1|            case 'Z':
  ------------------
  |  Branch (23517:13): [True: 1, False: 10.8k]
  ------------------
23518|      2|            case 'N':
  ------------------
  |  Branch (23518:13): [True: 1, False: 10.8k]
  ------------------
23519|      3|            case 'T':
  ------------------
  |  Branch (23519:13): [True: 1, False: 10.8k]
  ------------------
23520|      4|            case 'F':
  ------------------
  |  Branch (23520:13): [True: 1, False: 10.8k]
  ------------------
23521|      5|            case 'H':
  ------------------
  |  Branch (23521:13): [True: 1, False: 10.8k]
  ------------------
23522|      6|            case 'S':
  ------------------
  |  Branch (23522:13): [True: 1, False: 10.8k]
  ------------------
23523|      8|            case '[':
  ------------------
  |  Branch (23523:13): [True: 2, False: 10.8k]
  ------------------
23524|      9|            case '{':
  ------------------
  |  Branch (23524:13): [True: 1, False: 10.8k]
  ------------------
23525|      9|                return input_format != input_format_t::bjdata;
23526|  3.52k|            case 'B':
  ------------------
  |  Branch (23526:13): [True: 3.52k, False: 7.29k]
  ------------------
23527|  4.09k|            case 'u':
  ------------------
  |  Branch (23527:13): [True: 572, False: 10.2k]
  ------------------
23528|  4.56k|            case 'm':
  ------------------
  |  Branch (23528:13): [True: 472, False: 10.3k]
  ------------------
23529|  5.17k|            case 'M':
  ------------------
  |  Branch (23529:13): [True: 610, False: 10.2k]
  ------------------
23530|  6.02k|            case 'h':
  ------------------
  |  Branch (23530:13): [True: 847, False: 9.97k]
  ------------------
23531|  6.02k|                return input_format == input_format_t::bjdata;
23532|      7|            default:
  ------------------
  |  Branch (23532:13): [True: 7, False: 10.8k]
  ------------------
23533|      7|                return false;
23534|  10.8k|        }
23535|  10.8k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE20optimized_type_errorEv:
23366|     16|    {
23367|     16|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
23368|     16|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE13bjd_type_nameEi:
23546|  2.99k|    {
23547|  2.99k|        switch (marker)
23548|  2.99k|        {
23549|    401|            case 'B':
  ------------------
  |  Branch (23549:13): [True: 401, False: 2.58k]
  ------------------
23550|    401|                return "byte";
23551|    230|            case 'C':
  ------------------
  |  Branch (23551:13): [True: 230, False: 2.76k]
  ------------------
23552|    230|                return "char";
23553|    180|            case 'D':
  ------------------
  |  Branch (23553:13): [True: 180, False: 2.81k]
  ------------------
23554|    180|                return "double";
23555|    220|            case 'I':
  ------------------
  |  Branch (23555:13): [True: 220, False: 2.77k]
  ------------------
23556|    220|                return "int16";
23557|    143|            case 'L':
  ------------------
  |  Branch (23557:13): [True: 143, False: 2.84k]
  ------------------
23558|    143|                return "int64";
23559|    122|            case 'M':
  ------------------
  |  Branch (23559:13): [True: 122, False: 2.86k]
  ------------------
23560|    122|                return "uint64";
23561|    292|            case 'U':
  ------------------
  |  Branch (23561:13): [True: 292, False: 2.69k]
  ------------------
23562|    292|                return "uint8";
23563|    180|            case 'd':
  ------------------
  |  Branch (23563:13): [True: 180, False: 2.81k]
  ------------------
23564|    180|                return "single";
23565|    205|            case 'h':
  ------------------
  |  Branch (23565:13): [True: 205, False: 2.78k]
  ------------------
23566|    205|                return "half";
23567|    387|            case 'i':
  ------------------
  |  Branch (23567:13): [True: 387, False: 2.60k]
  ------------------
23568|    387|                return "int8";
23569|    222|            case 'l':
  ------------------
  |  Branch (23569:13): [True: 222, False: 2.76k]
  ------------------
23570|    222|                return "int32";
23571|    192|            case 'm':
  ------------------
  |  Branch (23571:13): [True: 192, False: 2.79k]
  ------------------
23572|    192|                return "uint32";
23573|    216|            case 'u':
  ------------------
  |  Branch (23573:13): [True: 216, False: 2.77k]
  ------------------
23574|    216|                return "uint16";
23575|      0|            default:
  ------------------
  |  Branch (23575:13): [True: 0, False: 2.99k]
  ------------------
23576|      0|                return nullptr;
23577|  2.99k|        }
23578|  2.99k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17length_type_errorEPKcSM_:
23433|    329|    {
23434|    329|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (23434:29): [True: 329, False: 0]
  ------------------
23435|    329|        return last_byte_error(exception_id::invalid_string_or_size,
23436|    329|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
23437|    329|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE16get_ubjson_arrayEv:
22063|  80.0k|    {
22064|  80.0k|        std::pair<std::size_t, char_int_type> size_and_type;
22065|  80.0k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  80.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 80.0k]
  |  |  ------------------
  ------------------
22066|      0|        {
22067|      0|            return false;
22068|      0|        }
22069|       |
22070|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
22071|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
22072|       |
22073|  80.0k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22073:13): [True: 2.98k, False: 77.1k]
  ------------------
22074|  2.98k|        {
22075|  2.98k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
22076|       |
22077|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
22078|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
22079|       |            // that determines size_and_type.first is read, so it is emitted first there to
22080|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
22081|       |            // 'C' elements are read as unsigned bytes, but BJData limits a char to 0..127
22082|  2.98k|            const bool nd_is_char = size_and_type.second == 'C';
22083|  2.98k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (22083:17): [True: 230, False: 2.75k]
  |  Branch (22083:48): [True: 401, False: 2.35k]
  ------------------
22084|    631|            {
22085|    631|                size_and_type.second = 'U';
22086|    631|            }
22087|       |
22088|  2.98k|            string_t key = "_ArrayData_";
22089|  2.98k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1697|  5.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.98k]
  |  |  |  Branch (1697:94): [True: 0, False: 2.98k]
  |  |  |  Branch (1697:94): [True: 1, False: 2.98k]
  |  |  ------------------
  ------------------
22090|      0|            {
22091|      0|                return false;
22092|      0|            }
22093|       |
22094|       |            // the numbers that are in the input, in one loop; the rest (if
22095|       |            // the input ends early) one by one below
22096|  2.98k|            std::size_t remaining = size_and_type.first;
22097|  2.98k|            if (!nd_is_char && JSON_HEDLEY_UNLIKELY(!parse_ubjson_typed_run(remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {})))
  ------------------
  |  | 1697|  2.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 2.75k]
  |  |  ------------------
  ------------------
  |  Branch (22097:17): [True: 2.75k, False: 231]
  |  Branch (22097:17): [True: 0, False: 2.98k]
  ------------------
22098|      0|            {
22099|      0|                return false;
22100|      0|            }
22101|       |
22102|  5.39k|            for (std::size_t i = size_and_type.first - remaining; i < size_and_type.first; ++i)
  ------------------
  |  Branch (22102:67): [True: 2.41k, False: 2.98k]
  ------------------
22103|  2.41k|            {
22104|  2.41k|                if (nd_is_char)
  ------------------
  |  Branch (22104:21): [True: 979, False: 1.43k]
  ------------------
22105|    979|                {
22106|    979|                    get();
22107|    979|                    if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1697|    979|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 979]
  |  |  ------------------
  ------------------
22108|      0|                    {
22109|      0|                        return false;
22110|      0|                    }
22111|    979|                    if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1697|    979|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 974]
  |  |  ------------------
  ------------------
22112|      5|                    {
22113|      5|                        return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
22114|      5|                    }
22115|    974|                    if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(current))))
  ------------------
  |  | 1697|    974|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 974]
  |  |  ------------------
  ------------------
22116|      0|                    {
22117|      0|                        return false;
22118|      0|                    }
22119|    974|                    continue;
22120|    974|                }
22121|       |
22122|  1.43k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1697|  1.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 1.43k]
  |  |  ------------------
  ------------------
22123|      0|                {
22124|      0|                    return false;
22125|      0|                }
22126|  1.43k|            }
22127|       |
22128|  2.98k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (22128:21): [True: 2.80k, False: 177]
  |  Branch (22128:41): [True: 2.80k, False: 0]
  ------------------
22129|  2.98k|        }
22130|       |
22131|       |        // If BJData type marker is 'B' decode as binary
22132|  77.1k|        if (size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (22132:13): [True: 8.57k, False: 68.5k]
  |  Branch (22132:44): [True: 3.04k, False: 5.53k]
  ------------------
22133|  3.04k|        {
22134|  3.04k|            binary_t result;
22135|  3.04k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (22135:20): [True: 2.91k, False: 129]
  |  Branch (22135:63): [True: 2.91k, False: 0]
  ------------------
22136|  3.04k|        }
22137|       |
22138|  74.0k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22138:13): [True: 5.53k, False: 68.5k]
  ------------------
22139|  5.53k|        {
22140|       |            // reading an element of a valueless type consumes no input, so the
22141|       |            // declared count alone decides how much is allocated; the check is
22142|       |            // made before the start event so that no container is opened that
22143|       |            // is then abandoned. See @ref max_valueless_container_size.
22144|  5.53k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1697|  27.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 5.53k]
  |  |  |  Branch (1697:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
22145|  5.53k|                                     && size_and_type.first > max_valueless_container_size))
22146|      0|            {
22147|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
22148|      0|            }
22149|       |
22150|  5.53k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1697|  5.53k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 5.53k]
  |  |  ------------------
  ------------------
22151|      0|            {
22152|      0|                return false;
22153|      0|            }
22154|       |
22155|  5.53k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (22155:17): [True: 0, False: 5.53k]
  ------------------
22156|      0|            {
22157|       |                // a no-op is not a value, so a container of them holds none;
22158|       |                // the declared size has already been passed to the SAX parser
22159|      0|                container_stack.back().remaining = 0;
22160|      0|            }
22161|       |
22162|  5.53k|            return size_and_type.second == 0
  ------------------
  |  Branch (22162:20): [True: 1.82k, False: 3.71k]
  ------------------
22163|  3.71k|                   || parse_ubjson_typed_run(container_stack.back().remaining, size_and_type.second, std::integral_constant<bool, bulk_scan> {});
  ------------------
  |  Branch (22163:23): [True: 3.71k, False: 0]
  ------------------
22164|  5.53k|        }
22165|       |
22166|  68.5k|        return enter_array(detail::unknown_size());
22167|  74.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runERmiNS4_17integral_constantIbLb1EEE:
21974|  6.46k|    {
21975|  6.46k|        switch (type)
21976|  6.46k|        {
21977|    971|            case 'U':
  ------------------
  |  Branch (21977:13): [True: 971, False: 5.49k]
  ------------------
21978|    971|                return parse_ubjson_typed_run<std::uint8_t>(remaining);
21979|    691|            case 'i':
  ------------------
  |  Branch (21979:13): [True: 691, False: 5.77k]
  ------------------
21980|    691|                return parse_ubjson_typed_run<std::int8_t>(remaining);
21981|    486|            case 'I':
  ------------------
  |  Branch (21981:13): [True: 486, False: 5.98k]
  ------------------
21982|    486|                return parse_ubjson_typed_run<std::int16_t>(remaining);
21983|    558|            case 'l':
  ------------------
  |  Branch (21983:13): [True: 558, False: 5.91k]
  ------------------
21984|    558|                return parse_ubjson_typed_run<std::int32_t>(remaining);
21985|    428|            case 'L':
  ------------------
  |  Branch (21985:13): [True: 428, False: 6.04k]
  ------------------
21986|    428|                return parse_ubjson_typed_run<std::int64_t>(remaining);
21987|    492|            case 'u':
  ------------------
  |  Branch (21987:13): [True: 492, False: 5.97k]
  ------------------
21988|    492|                return parse_ubjson_typed_run<std::uint16_t>(remaining);
21989|    435|            case 'm':
  ------------------
  |  Branch (21989:13): [True: 435, False: 6.03k]
  ------------------
21990|    435|                return parse_ubjson_typed_run<std::uint32_t>(remaining);
21991|    427|            case 'M':
  ------------------
  |  Branch (21991:13): [True: 427, False: 6.04k]
  ------------------
21992|    427|                return parse_ubjson_typed_run<std::uint64_t>(remaining);
21993|    480|            case 'd':
  ------------------
  |  Branch (21993:13): [True: 480, False: 5.98k]
  ------------------
21994|    480|                return parse_ubjson_typed_run<float>(remaining);
21995|    509|            case 'D':
  ------------------
  |  Branch (21995:13): [True: 509, False: 5.95k]
  ------------------
21996|    509|                return parse_ubjson_typed_run<double>(remaining);
21997|    991|            default:
  ------------------
  |  Branch (21997:13): [True: 991, False: 5.47k]
  ------------------
21998|    991|                return true;
21999|  6.46k|        }
22000|  6.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIhEEbRm:
22010|    971|    {
22011|    971|        constexpr std::size_t size = sizeof(NumberType);
22012|    971|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    971|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 227, False: 744]
  ------------------
22014|    227|        {
22015|    227|            return true;
22016|    227|        }
22017|    744|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    744|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    744|        std::size_t read = 0;
22021|    744|        bool accepted = true;
22022|  4.73k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 3.99k, False: 744]
  |  Branch (22022:32): [True: 3.99k, False: 0]
  ------------------
22023|  3.99k|        {
22024|  3.99k|            NumberType number{};
22025|  3.99k|            std::memcpy(&number, data + (read * size), size);
22026|  3.99k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 3.99k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  3.99k|            ++read;
22031|  3.99k|            accepted = emit_ubjson_number(number);
22032|  3.99k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    744|        ia.bulk_skip(read * size);
22035|    744|        chars_read += read * size;
22036|    744|        current = data[(read * size) - 1];
22037|    744|        remaining -= read;
22038|    744|        return accepted;
22039|    971|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIhTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|  3.99k|    {
22056|  3.99k|        return emit_unsigned(number);
22057|  3.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIaEEbRm:
22010|    691|    {
22011|    691|        constexpr std::size_t size = sizeof(NumberType);
22012|    691|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    691|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 187, False: 504]
  ------------------
22014|    187|        {
22015|    187|            return true;
22016|    187|        }
22017|    504|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    504|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    504|        std::size_t read = 0;
22021|    504|        bool accepted = true;
22022|  4.04k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 3.54k, False: 504]
  |  Branch (22022:32): [True: 3.54k, False: 0]
  ------------------
22023|  3.54k|        {
22024|  3.54k|            NumberType number{};
22025|  3.54k|            std::memcpy(&number, data + (read * size), size);
22026|  3.54k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 3.54k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  3.54k|            ++read;
22031|  3.54k|            accepted = emit_ubjson_number(number);
22032|  3.54k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    504|        ia.bulk_skip(read * size);
22035|    504|        chars_read += read * size;
22036|    504|        current = data[(read * size) - 1];
22037|    504|        remaining -= read;
22038|    504|        return accepted;
22039|    691|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIaTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|  3.54k|    {
22050|  3.54k|        return emit_signed(number);
22051|  3.54k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIsEEbRm:
22010|    486|    {
22011|    486|        constexpr std::size_t size = sizeof(NumberType);
22012|    486|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    486|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 201, False: 285]
  ------------------
22014|    201|        {
22015|    201|            return true;
22016|    201|        }
22017|    285|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    285|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    285|        std::size_t read = 0;
22021|    285|        bool accepted = true;
22022|  2.28k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 2.00k, False: 285]
  |  Branch (22022:32): [True: 2.00k, False: 0]
  ------------------
22023|  2.00k|        {
22024|  2.00k|            NumberType number{};
22025|  2.00k|            std::memcpy(&number, data + (read * size), size);
22026|  2.00k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 2.00k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  2.00k|            ++read;
22031|  2.00k|            accepted = emit_ubjson_number(number);
22032|  2.00k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    285|        ia.bulk_skip(read * size);
22035|    285|        chars_read += read * size;
22036|    285|        current = data[(read * size) - 1];
22037|    285|        remaining -= read;
22038|    285|        return accepted;
22039|    486|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIsTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|  2.00k|    {
22050|  2.00k|        return emit_signed(number);
22051|  2.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIiEEbRm:
22010|    558|    {
22011|    558|        constexpr std::size_t size = sizeof(NumberType);
22012|    558|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    558|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 257, False: 301]
  ------------------
22014|    257|        {
22015|    257|            return true;
22016|    257|        }
22017|    301|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    301|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    301|        std::size_t read = 0;
22021|    301|        bool accepted = true;
22022|  1.41k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 1.11k, False: 301]
  |  Branch (22022:32): [True: 1.11k, False: 0]
  ------------------
22023|  1.11k|        {
22024|  1.11k|            NumberType number{};
22025|  1.11k|            std::memcpy(&number, data + (read * size), size);
22026|  1.11k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 1.11k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  1.11k|            ++read;
22031|  1.11k|            accepted = emit_ubjson_number(number);
22032|  1.11k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    301|        ia.bulk_skip(read * size);
22035|    301|        chars_read += read * size;
22036|    301|        current = data[(read * size) - 1];
22037|    301|        remaining -= read;
22038|    301|        return accepted;
22039|    558|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIiTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|  1.11k|    {
22050|  1.11k|        return emit_signed(number);
22051|  1.11k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIlEEbRm:
22010|    428|    {
22011|    428|        constexpr std::size_t size = sizeof(NumberType);
22012|    428|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    428|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 244, False: 184]
  ------------------
22014|    244|        {
22015|    244|            return true;
22016|    244|        }
22017|    184|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    184|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    184|        std::size_t read = 0;
22021|    184|        bool accepted = true;
22022|    726|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 542, False: 184]
  |  Branch (22022:32): [True: 542, False: 0]
  ------------------
22023|    542|        {
22024|    542|            NumberType number{};
22025|    542|            std::memcpy(&number, data + (read * size), size);
22026|    542|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 542]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|    542|            ++read;
22031|    542|            accepted = emit_ubjson_number(number);
22032|    542|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    184|        ia.bulk_skip(read * size);
22035|    184|        chars_read += read * size;
22036|    184|        current = data[(read * size) - 1];
22037|    184|        remaining -= read;
22038|    184|        return accepted;
22039|    428|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIlTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuesr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22049|    542|    {
22050|    542|        return emit_signed(number);
22051|    542|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runItEEbRm:
22010|    492|    {
22011|    492|        constexpr std::size_t size = sizeof(NumberType);
22012|    492|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    492|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 231, False: 261]
  ------------------
22014|    231|        {
22015|    231|            return true;
22016|    231|        }
22017|    261|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    261|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    261|        std::size_t read = 0;
22021|    261|        bool accepted = true;
22022|  2.32k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 2.05k, False: 261]
  |  Branch (22022:32): [True: 2.05k, False: 0]
  ------------------
22023|  2.05k|        {
22024|  2.05k|            NumberType number{};
22025|  2.05k|            std::memcpy(&number, data + (read * size), size);
22026|  2.05k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 2.05k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  2.05k|            ++read;
22031|  2.05k|            accepted = emit_ubjson_number(number);
22032|  2.05k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    261|        ia.bulk_skip(read * size);
22035|    261|        chars_read += read * size;
22036|    261|        current = data[(read * size) - 1];
22037|    261|        remaining -= read;
22038|    261|        return accepted;
22039|    492|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberItTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|  2.05k|    {
22056|  2.05k|        return emit_unsigned(number);
22057|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIjEEbRm:
22010|    435|    {
22011|    435|        constexpr std::size_t size = sizeof(NumberType);
22012|    435|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    435|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 202, False: 233]
  ------------------
22014|    202|        {
22015|    202|            return true;
22016|    202|        }
22017|    233|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    233|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    233|        std::size_t read = 0;
22021|    233|        bool accepted = true;
22022|  1.24k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 1.01k, False: 233]
  |  Branch (22022:32): [True: 1.01k, False: 0]
  ------------------
22023|  1.01k|        {
22024|  1.01k|            NumberType number{};
22025|  1.01k|            std::memcpy(&number, data + (read * size), size);
22026|  1.01k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 1.01k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  1.01k|            ++read;
22031|  1.01k|            accepted = emit_ubjson_number(number);
22032|  1.01k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    233|        ia.bulk_skip(read * size);
22035|    233|        chars_read += read * size;
22036|    233|        current = data[(read * size) - 1];
22037|    233|        remaining -= read;
22038|    233|        return accepted;
22039|    435|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIjTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|  1.01k|    {
22056|  1.01k|        return emit_unsigned(number);
22057|  1.01k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runImEEbRm:
22010|    427|    {
22011|    427|        constexpr std::size_t size = sizeof(NumberType);
22012|    427|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    427|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 249, False: 178]
  ------------------
22014|    249|        {
22015|    249|            return true;
22016|    249|        }
22017|    178|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    178|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    178|        std::size_t read = 0;
22021|    178|        bool accepted = true;
22022|    813|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 635, False: 178]
  |  Branch (22022:32): [True: 635, False: 0]
  ------------------
22023|    635|        {
22024|    635|            NumberType number{};
22025|    635|            std::memcpy(&number, data + (read * size), size);
22026|    635|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 635]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|    635|            ++read;
22031|    635|            accepted = emit_ubjson_number(number);
22032|    635|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    178|        ia.bulk_skip(read * size);
22035|    178|        chars_read += read * size;
22036|    178|        current = data[(read * size) - 1];
22037|    178|        remaining -= read;
22038|    178|        return accepted;
22039|    427|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberImTnNS4_9enable_ifIXaasr3std11is_integralIT_EE5valuentsr3std9is_signedISN_EE5valueEiE4typeELi0EEEbSN_:
22055|    635|    {
22056|    635|        return emit_unsigned(number);
22057|    635|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIfEEbRm:
22010|    480|    {
22011|    480|        constexpr std::size_t size = sizeof(NumberType);
22012|    480|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    480|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 215, False: 265]
  ------------------
22014|    215|        {
22015|    215|            return true;
22016|    215|        }
22017|    265|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    265|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    265|        std::size_t read = 0;
22021|    265|        bool accepted = true;
22022|  1.76k|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 1.50k, False: 265]
  |  Branch (22022:32): [True: 1.50k, False: 0]
  ------------------
22023|  1.50k|        {
22024|  1.50k|            NumberType number{};
22025|  1.50k|            std::memcpy(&number, data + (read * size), size);
22026|  1.50k|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 1.50k]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|  1.50k|            ++read;
22031|  1.50k|            accepted = emit_ubjson_number(number);
22032|  1.50k|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    265|        ia.bulk_skip(read * size);
22035|    265|        chars_read += read * size;
22036|    265|        current = data[(read * size) - 1];
22037|    265|        remaining -= read;
22038|    265|        return accepted;
22039|    480|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIfTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEbSN_:
22043|  1.50k|    {
22044|  1.50k|        return emit_float(number);
22045|  1.50k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22parse_ubjson_typed_runIdEEbRm:
22010|    509|    {
22011|    509|        constexpr std::size_t size = sizeof(NumberType);
22012|    509|        const std::size_t count = (std::min)(remaining, ia.bulk_remaining() / size);
22013|    509|        if (count == 0)
  ------------------
  |  Branch (22013:13): [True: 280, False: 229]
  ------------------
22014|    280|        {
22015|    280|            return true;
22016|    280|        }
22017|    229|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
22018|       |        // UBJSON stores numbers big-endian, BJData little-endian
22019|    229|        const bool swap = is_little_endian != (input_format == input_format_t::bjdata);
22020|    229|        std::size_t read = 0;
22021|    229|        bool accepted = true;
22022|    916|        while (read < count && accepted)
  ------------------
  |  Branch (22022:16): [True: 687, False: 229]
  |  Branch (22022:32): [True: 687, False: 0]
  ------------------
22023|    687|        {
22024|    687|            NumberType number{};
22025|    687|            std::memcpy(&number, data + (read * size), size);
22026|    687|            if (swap)
  ------------------
  |  Branch (22026:17): [True: 0, False: 687]
  ------------------
22027|      0|            {
22028|      0|                byte_swap(number);
22029|      0|            }
22030|    687|            ++read;
22031|    687|            accepted = emit_ubjson_number(number);
22032|    687|        }
22033|       |        // as if read by get_number(): current is the last byte read
22034|    229|        ia.bulk_skip(read * size);
22035|    229|        chars_read += read * size;
22036|    229|        current = data[(read * size) - 1];
22037|    229|        remaining -= read;
22038|    229|        return accepted;
22039|    509|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE18emit_ubjson_numberIdTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEbSN_:
22043|    687|    {
22044|    687|        return emit_float(number);
22045|    687|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
23219|  3.04k|    {
23220|  3.04k|        return get_bytes(len, "binary", result);
23221|  3.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17get_ubjson_objectEv:
22173|  14.3k|    {
22174|  14.3k|        std::pair<std::size_t, char_int_type> size_and_type;
22175|  14.3k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1697|  14.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 14.3k]
  |  |  ------------------
  ------------------
22176|      0|        {
22177|      0|            return false;
22178|      0|        }
22179|       |
22180|       |        // do not accept ND-array size in objects in BJData
22181|  14.3k|        if ((size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (22181:13): [True: 1, False: 14.3k]
  ------------------
22182|      1|        {
22183|      1|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
22184|      1|        }
22185|       |
22186|  14.3k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (22186:13): [True: 362, False: 13.9k]
  ------------------
22187|    362|        {
22188|    362|            return enter_object(size_and_type.first, size_and_type.second);
22189|    362|        }
22190|       |
22191|  13.9k|        return enter_object(detail::unknown_size());
22192|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17get_ubjson_stringERSC_bPKc:
21355|  29.6k|    {
21356|  29.6k|        if (get_char)
  ------------------
  |  Branch (21356:13): [True: 6.89k, False: 22.7k]
  ------------------
21357|  6.89k|        {
21358|       |            // no get_ignore_noop() here: the byte read next must be a string
21359|       |            // length type specification, and a no-op ('N') is not valid in
21360|       |            // that position. No-ops at positions where a value may appear are
21361|       |            // already consumed by the callers via get_ignore_noop().
21362|  6.89k|            get();
21363|  6.89k|        }
21364|       |
21365|  29.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1697|  29.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
21366|      0|        {
21367|      0|            return false;
21368|      0|        }
21369|       |
21370|  29.6k|        switch (current)
21371|  29.6k|        {
21372|  20.7k|            case 'U':
  ------------------
  |  Branch (21372:13): [True: 20.7k, False: 8.89k]
  ------------------
21373|  20.7k|            {
21374|  20.7k|                return get_string_with_length<std::uint8_t>(result, context);
21375|      0|            }
21376|       |
21377|  4.93k|            case 'i':
  ------------------
  |  Branch (21377:13): [True: 4.93k, False: 24.7k]
  ------------------
21378|  4.93k|            {
21379|  4.93k|                std::int8_t len{};
21380|  4.93k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21380:24): [True: 4.92k, False: 4]
  |  Branch (21380:43): [True: 4.92k, False: 5]
  |  Branch (21380:78): [True: 4.88k, False: 34]
  |  Branch (21380:105): [True: 4.88k, False: 0]
  ------------------
21381|      0|            }
21382|       |
21383|    684|            case 'I':
  ------------------
  |  Branch (21383:13): [True: 684, False: 28.9k]
  ------------------
21384|    684|            {
21385|    684|                std::int16_t len{};
21386|    684|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21386:24): [True: 679, False: 5]
  |  Branch (21386:43): [True: 676, False: 3]
  |  Branch (21386:78): [True: 619, False: 57]
  |  Branch (21386:105): [True: 619, False: 0]
  ------------------
21387|      0|            }
21388|       |
21389|    508|            case 'l':
  ------------------
  |  Branch (21389:13): [True: 508, False: 29.1k]
  ------------------
21390|    508|            {
21391|    508|                std::int32_t len{};
21392|    508|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21392:24): [True: 499, False: 9]
  |  Branch (21392:43): [True: 468, False: 31]
  |  Branch (21392:78): [True: 394, False: 74]
  |  Branch (21392:105): [True: 394, False: 0]
  ------------------
21393|      0|            }
21394|       |
21395|    524|            case 'L':
  ------------------
  |  Branch (21395:13): [True: 524, False: 29.1k]
  ------------------
21396|    524|            {
21397|    524|                std::int64_t len{};
21398|    524|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (21398:24): [True: 511, False: 13]
  |  Branch (21398:43): [True: 448, False: 63]
  |  Branch (21398:78): [True: 303, False: 145]
  |  Branch (21398:105): [True: 303, False: 0]
  ------------------
21399|      0|            }
21400|       |
21401|    924|            case 'u':
  ------------------
  |  Branch (21401:13): [True: 924, False: 28.7k]
  ------------------
21402|    924|            {
21403|    924|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21403:21): [True: 0, False: 924]
  ------------------
21404|      0|                {
21405|      0|                    break;
21406|      0|                }
21407|    924|                return get_string_with_length<std::uint16_t>(result, context);
21408|    924|            }
21409|       |
21410|    426|            case 'm':
  ------------------
  |  Branch (21410:13): [True: 426, False: 29.2k]
  ------------------
21411|    426|            {
21412|    426|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21412:21): [True: 0, False: 426]
  ------------------
21413|      0|                {
21414|      0|                    break;
21415|      0|                }
21416|    426|                return get_string_with_length<std::uint32_t>(result, context);
21417|    426|            }
21418|       |
21419|    552|            case 'M':
  ------------------
  |  Branch (21419:13): [True: 552, False: 29.0k]
  ------------------
21420|    552|            {
21421|    552|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (21421:21): [True: 0, False: 552]
  ------------------
21422|      0|                {
21423|      0|                    break;
21424|      0|                }
21425|    552|                return get_string_with_length<std::uint64_t>(result, context);
21426|    552|            }
21427|       |
21428|     70|            default:
  ------------------
  |  Branch (21428:13): [True: 70, False: 29.5k]
  ------------------
21429|     70|                break;
21430|  29.6k|        }
21431|     70|        return length_type_error("", "string");
21432|  29.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIaEEbT_:
21332|  4.92k|    {
21333|  4.92k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|  4.92k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 5, False: 4.92k]
  |  |  ------------------
  ------------------
21334|      5|        {
21335|      5|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      5|        }
21337|  4.92k|        return true;
21338|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIaEEbT_RSC_:
23119|  4.92k|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|  4.92k|        return get_bytes(len, "string", result);
23130|  4.92k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIaSC_EEbT_PKcRT0_:
23245|  4.92k|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|  4.92k|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|  4.92k|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 4.19k, False: 725]
  ------------------
23250|  4.19k|        {
23251|  4.19k|            return true;
23252|  4.19k|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    725|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    725|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 34, False: 691]
  ------------------
23258|     34|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     34|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 34, False: 0]
  ------------------
23262|     34|                                       ? static_cast<std::size_t>(len)
23263|     34|                                       : chunk_size;
23264|     34|            const std::size_t old_size = result.size();
23265|     34|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     34|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     34|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 34, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     34|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     34|            chars_read += bytes_read;
23273|     34|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     34|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 34, False: 0]
  |  |  ------------------
  ------------------
23274|     34|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     34|                result.resize(old_size + bytes_read);
23279|     34|                ++chars_read;
23280|     34|                current = char_traits<char_type>::eof();
23281|     34|                return unexpect_eof(context);
23282|     34|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    691|        return true;
23288|    725|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIaEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|  4.92k|    {
23295|  4.92k|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 691, False: 4.23k]
  ------------------
23296|    691|        {
23297|    691|            return false;
23298|    691|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|  4.23k|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|  4.23k|        const std::size_t remaining = ia.bulk_remaining();
23303|  4.23k|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 34, False: 4.19k]
  ------------------
23304|     34|        {
23305|     34|            return false; // (the loop reports the premature end)
23306|     34|        }
23307|  4.19k|        const auto n = static_cast<std::size_t>(ulen);
23308|  4.19k|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|  4.19k|        ia.bulk_skip(n);
23310|  4.19k|        chars_read += n;
23311|  4.19k|        return true;
23312|  4.23k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIsEEbT_:
21332|    679|    {
21333|    679|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    679|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 3, False: 676]
  |  |  ------------------
  ------------------
21334|      3|        {
21335|      3|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|      3|        }
21337|    676|        return true;
21338|    679|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIsEEbT_RSC_:
23119|    676|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    676|        return get_bytes(len, "string", result);
23130|    676|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIsSC_EEbT_PKcRT0_:
23245|    676|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    676|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    676|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 338, False: 338]
  ------------------
23250|    338|        {
23251|    338|            return true;
23252|    338|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    338|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    338|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 57, False: 281]
  ------------------
23258|     57|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|     57|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 37, False: 20]
  ------------------
23262|     57|                                       ? static_cast<std::size_t>(len)
23263|     57|                                       : chunk_size;
23264|     57|            const std::size_t old_size = result.size();
23265|     57|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|     57|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|     57|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 57, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|     57|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|     57|            chars_read += bytes_read;
23273|     57|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|     57|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 57, False: 0]
  |  |  ------------------
  ------------------
23274|     57|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|     57|                result.resize(old_size + bytes_read);
23279|     57|                ++chars_read;
23280|     57|                current = char_traits<char_type>::eof();
23281|     57|                return unexpect_eof(context);
23282|     57|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    281|        return true;
23288|    338|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIsEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    676|    {
23295|    676|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 281, False: 395]
  ------------------
23296|    281|        {
23297|    281|            return false;
23298|    281|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    395|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    395|        const std::size_t remaining = ia.bulk_remaining();
23303|    395|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 57, False: 338]
  ------------------
23304|     57|        {
23305|     57|            return false; // (the loop reports the premature end)
23306|     57|        }
23307|    338|        const auto n = static_cast<std::size_t>(ulen);
23308|    338|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    338|        ia.bulk_skip(n);
23310|    338|        chars_read += n;
23311|    338|        return true;
23312|    395|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIiEEbT_:
21332|    499|    {
21333|    499|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    499|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 31, False: 468]
  |  |  ------------------
  ------------------
21334|     31|        {
21335|     31|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     31|        }
21337|    468|        return true;
21338|    499|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE26check_ubjson_string_lengthIlEEbT_:
21332|    511|    {
21333|    511|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1697|    511|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 63, False: 448]
  |  |  ------------------
  ------------------
21334|     63|        {
21335|     63|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
21336|     63|        }
21337|    448|        return true;
21338|    511|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringIlEEbT_RSC_:
23119|    448|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    448|        return get_bytes(len, "string", result);
23130|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE9get_bytesIlSC_EEbT_PKcRT0_:
23245|    448|    {
23246|       |        // a string that is in the block of input as a whole is appended from
23247|       |        // it, without the zero-filling resize() below
23248|    448|        constexpr bool from_block = bulk_scan && std::is_same<ContainerType, string_t>::value;
  ------------------
  |  Branch (23248:37): [True: 0, Folded]
  |  Branch (23248:50): [True: 0, Folded]
  ------------------
23249|    448|        if (append_from_block(len, result, std::integral_constant<bool, from_block> {}))
  ------------------
  |  Branch (23249:13): [True: 142, False: 306]
  ------------------
23250|    142|        {
23251|    142|            return true;
23252|    142|        }
23253|       |
23254|       |        // upper bound on the number of bytes read (and allocated) per chunk
23255|    306|        constexpr std::size_t chunk_size = 4096;
23256|       |
23257|    306|        while (len > 0)
  ------------------
  |  Branch (23257:16): [True: 145, False: 161]
  ------------------
23258|    145|        {
23259|       |            // number of bytes to read this iteration: min(chunk_size, len),
23260|       |            // computed without truncating chunk_size to a narrow NumberType
23261|    145|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (23261:40): [True: 35, False: 110]
  ------------------
23262|    145|                                       ? static_cast<std::size_t>(len)
23263|    145|                                       : chunk_size;
23264|    145|            const std::size_t old_size = result.size();
23265|    145|            result.resize(old_size + wanted);
23266|       |            // resize() is required to make size() exactly old_size + wanted;
23267|       |            // that is the room get_elements() is allowed to write into
23268|    145|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2643|    145|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23268:13): [True: 145, False: 0]
  ------------------
23269|       |            // false positive: bytes_read is read on the next lines
23270|       |            // @infer-ignore DEAD_STORE
23271|    145|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
23272|    145|            chars_read += bytes_read;
23273|    145|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1697|    145|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1697:57): [True: 145, False: 0]
  |  |  ------------------
  ------------------
23274|    145|            {
23275|       |                // premature end of input: shrink to what was actually read and
23276|       |                // report the failure at the first missing byte (same position
23277|       |                // accounting as get_to() for partial number reads)
23278|    145|                result.resize(old_size + bytes_read);
23279|    145|                ++chars_read;
23280|    145|                current = char_traits<char_type>::eof();
23281|    145|                return unexpect_eof(context);
23282|    145|            }
23283|       |            // a full chunk was read; get_elements() never returns more than requested
23284|      0|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2643|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (23284:13): [True: 0, False: 0]
  ------------------
23285|      0|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
23286|      0|        }
23287|    161|        return true;
23288|    306|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE17append_from_blockIlEEbT_RSC_NS4_17integral_constantIbLb1EEE:
23294|    448|    {
23295|    448|        if (len <= 0)
  ------------------
  |  Branch (23295:13): [True: 161, False: 287]
  ------------------
23296|    161|        {
23297|    161|            return false;
23298|    161|        }
23299|       |        // (len > 0, so the unsigned type holds it; casting a signed char
23300|       |        // straight to std::size_t would trip bugprone-signed-char-misuse)
23301|    287|        const auto ulen = static_cast<typename std::make_unsigned<NumberType>::type>(len);
23302|    287|        const std::size_t remaining = ia.bulk_remaining();
23303|    287|        if (static_cast<std::uintmax_t>(ulen) > static_cast<std::uintmax_t>(remaining))
  ------------------
  |  Branch (23303:13): [True: 145, False: 142]
  ------------------
23304|    145|        {
23305|    145|            return false; // (the loop reports the premature end)
23306|    145|        }
23307|    142|        const auto n = static_cast<std::size_t>(ulen);
23308|    142|        result.append(reinterpret_cast<const typename string_t::value_type*>(ia.bulk_data()), n);
23309|    142|        ia.bulk_skip(n);
23310|    142|        chars_read += n;
23311|    142|        return true;
23312|    287|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE22get_string_with_lengthImEEbRSC_PKc:
23198|    552|    {
23199|    552|        NumberType len{};
23200|    552|        return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (23200:16): [True: 533, False: 19]
  |  Branch (23200:35): [True: 348, False: 185]
  |  Branch (23200:62): [True: 348, False: 0]
  ------------------
23201|    552|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE10get_stringImEEbT_RSC_:
23119|    533|    {
23120|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
23121|       |        // leaves the choice to the decoder), MessagePack (whose spec
23122|       |        // explicitly allows a str object to contain an invalid byte
23123|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
23124|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
23125|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
23126|       |        // @ref error_handler, applied by @ref check_string_utf8 at the call
23127|       |        // site to the whole string or, for an indefinite-length CBOR string,
23128|       |        // to each chunk on its own (RFC 8949, Section 3.2.3).
23129|    533|        return get_bytes(len, "string", result);
23130|    533|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15get_ignore_noopEv:
22874|   304k|    {
22875|   304k|        do
22876|   310k|        {
22877|   310k|            get();
22878|   310k|        }
22879|   310k|        while (current == 'N');
  ------------------
  |  Branch (22879:16): [True: 5.91k, False: 304k]
  ------------------
22880|       |
22881|   304k|        return current;
22882|   304k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE3getEv:
22840|   491k|    {
22841|   491k|        ++chars_read;
22842|   491k|        return current = ia.get_character();
22843|   491k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter13get_characterEv:
 9416|   491k|    {
 9417|       |        // what getc_unlocked() does, while the buffer has characters
 9418|   491k|        const char* const next = buffer_ptr();
 9419|   491k|        if (JSON_HEDLEY_LIKELY(next != buffer_end()))
  ------------------
  |  | 1696|   491k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1696:57): [True: 466k, False: 24.5k]
  |  |  ------------------
  ------------------
 9420|   466k|        {
 9421|   466k|            current_in_buffer = true;
 9422|   466k|            buffer_bump(1);
 9423|   466k|            return std::char_traits<char>::to_int_type(*next);
 9424|   466k|        }
 9425|  24.5k|        return get_character_slow();
 9426|   491k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter18get_character_slowEv:
 9554|  24.5k|    {
 9555|  24.5k|        if (token_segment != nullptr)
  ------------------
  |  Branch (9555:13): [True: 0, False: 24.5k]
  ------------------
 9556|      0|        {
 9557|      0|            token_carry.append(token_segment, buffer_end());
 9558|      0|            token_segment = nullptr;
 9559|      0|        }
 9560|  24.5k|        const auto res = getc_unlocked(m_file);
 9561|  24.5k|        if (res == EOF)
  ------------------
  |  Branch (9561:13): [True: 9.66k, False: 14.9k]
  ------------------
 9562|  9.66k|        {
 9563|  9.66k|            current_in_buffer = false;
 9564|  9.66k|            return std::char_traits<char>::eof();
 9565|  9.66k|        }
 9566|       |        // the character was taken from the refilled buffer, at buffer_ptr() - 1
 9567|  14.9k|        current_in_buffer = true;
 9568|  14.9k|        if (tracking_token)
  ------------------
  |  Branch (9568:13): [True: 0, False: 14.9k]
  ------------------
 9569|      0|        {
 9570|      0|            token_segment = buffer_ptr() - 1;
 9571|      0|        }
 9572|  14.9k|        return res;
 9573|  24.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEE15last_byte_errorENS1_12exception_idERKSC_PKcSP_:
23407|    973|    {
23408|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
23409|    973|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
23410|    973|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (23410:51): [True: 832, False: 141]
  ------------------
23411|    973|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_26json_sax_dom_binary_parserISG_SH_EEED2Ev:
18487|  14.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail26json_sax_dom_binary_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEED2Ev:
17434|  14.9k|    ~json_sax_dom_binary_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterEP8_IO_FILE:
10710|  14.9k|{
10711|  14.9k|    if (file == nullptr)
  ------------------
  |  Branch (10711:9): [True: 0, False: 14.9k]
  ------------------
10712|      0|    {
10713|      0|        JSON_THROW(parse_error::create(exception_id::syntax_error, 0, empty_input_message(), nullptr));
  ------------------
  |  | 2608|      0|    #define JSON_THROW(exception) throw exception
  ------------------
10714|      0|    }
10715|  14.9k|    return file_input_adapter(file);
10716|  14.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapterC2EP8_IO_FILE:
 9387|  14.9k|        : m_file(f)
 9388|  14.9k|    {
 9389|  14.9k|        JSON_ASSERT(m_file != nullptr);
  ------------------
  |  | 2643|  14.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (9389:9): [True: 14.9k, False: 0]
  ------------------
 9390|  14.9k|        lock();
 9391|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter4lockEv:
 9581|  14.9k|    {
 9582|  14.9k|#if JSON_UNLOCKED_FILE_IO == 1
 9583|  14.9k|        flockfile(m_file);
 9584|       |#elif JSON_UNLOCKED_FILE_IO == 2
 9585|       |        _lock_file(m_file);
 9586|       |#endif
 9587|  14.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapterD2Ev:
 9410|  29.8k|    {
 9411|  29.8k|        unlock();
 9412|  29.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter6unlockEv:
 9590|  29.8k|    {
 9591|       |        // a moved-from adapter has no file and holds no lock
 9592|  29.8k|        if (m_file == nullptr)
  ------------------
  |  Branch (9592:13): [True: 14.9k, False: 14.9k]
  ------------------
 9593|  14.9k|        {
 9594|  14.9k|            return;
 9595|  14.9k|        }
 9596|  14.9k|#if JSON_UNLOCKED_FILE_IO == 1
 9597|  14.9k|        funlockfile(m_file);
 9598|       |#elif JSON_UNLOCKED_FILE_IO == 2
 9599|       |        _unlock_file(m_file);
 9600|       |#endif
 9601|  14.9k|    }

LLVMFuzzerTestOneInput:
   83|  14.9k|{
   84|  14.9k|    std::vector<uint8_t> const vec1(data, data + size);
   85|       |
   86|       |    // step 0: parse input without exceptions
   87|  14.9k|    bool noexcept_threw = false;
   88|  14.9k|    json const j_noexcept = parse_without_exceptions([&] { return json::from_bjdata(vec1, true, false); }, noexcept_threw);
   89|       |    // whether step 1 succeeded; if not, the catch blocks below check that
   90|       |    // step 0 failed, too
   91|  14.9k|    bool parsed = false;
   92|       |
   93|  14.9k|    try
   94|  14.9k|    {
   95|       |        // step 1: parse input
   96|  14.9k|        json const j1 = json::from_bjdata(vec1);
   97|  14.9k|        parsed = true;
   98|       |
   99|       |        // without exceptions, the same input must give the same value
  100|  14.9k|        assert(!noexcept_threw && !j_noexcept.is_discarded() && same_value(j_noexcept, j1));
  ------------------
  |  Branch (100:9): [True: 7.45k, False: 7.45k]
  |  Branch (100:9): [True: 7.45k, False: 0]
  |  Branch (100:9): [True: 7.45k, False: 0]
  |  Branch (100:9): [True: 7.45k, False: 7.45k]
  ------------------
  101|       |
  102|  7.45k|        try
  103|  7.45k|        {
  104|       |            // step 2.1: round trip without adding size annotations to container types
  105|  7.45k|            std::vector<uint8_t> const vec2 = json::to_bjdata(j1, false, false);
  106|       |
  107|       |            // step 2.2: round trip with adding size annotations but without adding type annotations to container types
  108|  7.45k|            std::vector<uint8_t> const vec3 = json::to_bjdata(j1, true, false);
  109|       |
  110|       |            // step 2.3: round trip with adding size as well as type annotations to container types
  111|  7.45k|            std::vector<uint8_t> const vec4 = json::to_bjdata(j1, true, true);
  112|       |
  113|       |            // parse serialization
  114|  7.45k|            json const j2 = json::from_bjdata(vec2);
  115|  7.45k|            json const j3 = json::from_bjdata(vec3);
  116|  7.45k|            json const j4 = json::from_bjdata(vec4);
  117|       |
  118|       |            // re-serializing must be value-stable (see the notes above on
  119|       |            // why byte-exact stability is not guaranteed in general, and
  120|       |            // why this compares dump()s rather than the values directly)
  121|  7.45k|            assert(is_value_stable(json::from_bjdata(json::to_bjdata(j2, false, false)), j2));
  ------------------
  |  Branch (121:13): [True: 6.17k, False: 1.28k]
  ------------------
  122|  7.45k|            assert(is_value_stable(json::from_bjdata(json::to_bjdata(j3, true, false)), j3));
  ------------------
  |  Branch (122:13): [True: 6.17k, False: 0]
  ------------------
  123|  6.17k|            assert(is_value_stable(json::from_bjdata(json::to_bjdata(j4, true, true)), j4));
  ------------------
  |  Branch (123:13): [True: 6.17k, False: 0]
  ------------------
  124|  6.17k|        }
  125|  7.45k|        catch (const json::parse_error&)
  126|  7.45k|        {
  127|       |            // parsing a BJData serialization must not fail
  128|      0|            assert(false);
  ------------------
  |  Branch (128:13): [Folded, False: 0]
  ------------------
  129|      0|        }
  130|  7.45k|    }
  131|  14.9k|    catch (const json::parse_error&)
  132|  14.9k|    {
  133|       |        // parse errors are ok, because input may be random bytes
  134|  7.01k|        assert(parsed || noexcept_threw || j_noexcept.is_discarded());
  ------------------
  |  Branch (134:9): [True: 0, False: 7.01k]
  |  Branch (134:9): [True: 0, False: 7.01k]
  |  Branch (134:9): [True: 7.01k, False: 0]
  |  Branch (134:9): [True: 7.01k, False: 0]
  ------------------
  135|  7.01k|    }
  136|  14.9k|    catch (const json::type_error&)
  137|  14.9k|    {
  138|       |        // type errors can occur during parsing, too
  139|  1.28k|        assert(parsed || noexcept_threw || j_noexcept.is_discarded());
  ------------------
  |  Branch (139:9): [True: 1.28k, False: 0]
  |  Branch (139:9): [True: 0, False: 0]
  |  Branch (139:9): [True: 0, False: 0]
  |  Branch (139:9): [True: 1.28k, False: 0]
  ------------------
  140|  1.28k|    }
  141|  14.9k|    catch (const json::out_of_range&)
  142|  14.9k|    {
  143|       |        // out of range errors may happen if provided sizes are excessive
  144|    434|        assert(parsed || noexcept_threw || j_noexcept.is_discarded());
  ------------------
  |  Branch (144:9): [True: 0, False: 434]
  |  Branch (144:9): [True: 0, False: 434]
  |  Branch (144:9): [True: 434, False: 0]
  |  Branch (144:9): [True: 434, False: 0]
  ------------------
  145|    434|    }
  146|       |
  147|       |    // step 3: the other input adapters must read the data alike
  148|  14.9k|    check_input_adapters(data, size, read_bjdata());
  149|       |
  150|       |    // return 0 - non-zero return values are reserved for future use
  151|  14.9k|    return 0;
  152|  14.9k|}
fuzzer-parse_bjdata.cpp:_ZL15is_value_stableRKN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEESG_:
   77|  19.8k|{
   78|  19.8k|    return lhs.dump() == rhs.dump();
   79|  19.8k|}
fuzzer-parse_bjdata.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_0clEv:
   88|  14.9k|    json const j_noexcept = parse_without_exceptions([&] { return json::from_bjdata(vec1, true, false); }, noexcept_threw);
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJRPKhS3_EEEN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS8_6vectorENS8_12basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEblmdSE_NS6_14adl_serializerENSA_IhNSE_IhEEEEvEEDpOT_:
   68|  14.9k|    {
   69|  14.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  14.9k|    }
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJRNSt3__119basic_istringstreamIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEEEN8nlohmann16json_abi_v3_12_010basic_jsonINS2_3mapENS2_6vectorENS2_12basic_stringIcS5_S7_EEblmdS6_NSB_14adl_serializerENSE_IhNS6_IhEEEEvEEDpOT_:
   68|  14.9k|    {
   69|  14.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  14.9k|    }
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJNSt3__121__list_const_iteratorIhPvEES5_EEEN8nlohmann16json_abi_v3_12_010basic_jsonINS2_3mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdSE_NS7_14adl_serializerENSA_IhNSE_IhEEEEvEEDpOT_:
   68|  14.9k|    {
   69|  14.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  14.9k|    }
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJRP8_IO_FILEEEEN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS8_6vectorENS8_12basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEblmdSE_NS6_14adl_serializerENSA_IhNSE_IhEEEEvEEDpOT_:
   68|  14.9k|    {
   69|  14.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  14.9k|    }

_Z10same_valueRKN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEESG_:
   34|  7.45k|{
   35|  7.45k|    return lhs.dump(-1, ' ', false, json::error_handler_t::keep) == rhs.dump(-1, ' ', false, json::error_handler_t::keep);
   36|  7.45k|}
fuzzer-parse_bjdata.cpp:_Z24parse_without_exceptionsIZ22LLVMFuzzerTestOneInputE3$_0EN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS2_14adl_serializerENS6_IhNSA_IhEEEEvEET_Rb:
   44|  14.9k|{
   45|  14.9k|    threw = false;
   46|  14.9k|    try
   47|  14.9k|    {
   48|  14.9k|        return parse();
   49|  14.9k|    }
   50|  14.9k|    catch (const json::parse_error&)
   51|  14.9k|    {
   52|      0|        assert(false);
  ------------------
  |  Branch (52:9): [Folded, False: 0]
  ------------------
   53|      0|    }
   54|  14.9k|    catch (const json::exception&)
   55|  14.9k|    {
   56|      0|        threw = true;
   57|      0|    }
   58|      0|    return {};
   59|  14.9k|}
fuzzer-parse_bjdata.cpp:_Z20check_input_adaptersIN12_GLOBAL__N_111read_bjdataEEvPKhmRKT_:
  117|  14.9k|{
  118|  14.9k|    const read_outcome expected = read_with(parse, data, data + size);
  119|       |
  120|       |    // stream adapter
  121|  14.9k|    {
  122|  14.9k|        std::istringstream stream(std::string(reinterpret_cast<const char*>(data), size));
  123|  14.9k|        assert(read_with(parse, stream) == expected);
  ------------------
  |  Branch (123:9): [True: 14.9k, False: 0]
  ------------------
  124|  14.9k|    }
  125|       |
  126|       |    // iterator adapter on a non-contiguous range
  127|  14.9k|    {
  128|  14.9k|        const std::list<std::uint8_t> list(data, data + size);
  129|  14.9k|        assert(read_with(parse, list.begin(), list.end()) == expected);
  ------------------
  |  Branch (129:9): [True: 14.9k, False: 0]
  ------------------
  130|  14.9k|    }
  131|       |
  132|  14.9k|#if defined(__unix__) || defined(__APPLE__)
  133|       |    // FILE* adapter; fmemopen may refuse an empty buffer
  134|  14.9k|    {
  135|  14.9k|        std::vector<std::uint8_t> buffer(data, data + size);
  136|  14.9k|        std::FILE* file = buffer.empty() ? nullptr : fmemopen(buffer.data(), buffer.size(), "rb");
  ------------------
  |  Branch (136:27): [True: 0, False: 14.9k]
  ------------------
  137|  14.9k|        if (file != nullptr)
  ------------------
  |  Branch (137:13): [True: 14.9k, False: 0]
  ------------------
  138|  14.9k|        {
  139|  14.9k|            const read_outcome actual = read_with(parse, file);
  140|  14.9k|            std::fclose(file);
  141|       |            assert(actual == expected);
  ------------------
  |  Branch (141:13): [True: 14.9k, False: 0]
  ------------------
  142|  14.9k|        }
  143|  14.9k|    }
  144|  14.9k|#endif
  145|  14.9k|}
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJRPKhS3_EE12read_outcomeRKT_DpOT0_:
   88|  14.9k|{
   89|  14.9k|    read_outcome result;
   90|  14.9k|    try
   91|  14.9k|    {
   92|  14.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  14.9k|    }
   94|  14.9k|    catch (const json::parse_error& e)
   95|  14.9k|    {
   96|  7.01k|        result.id = e.id;
   97|  7.01k|        result.what = e.what();
   98|  7.01k|        result.byte = e.byte;
   99|  7.01k|    }
  100|  14.9k|    catch (const json::exception& e)
  101|  14.9k|    {
  102|    434|        result.id = e.id;
  103|    434|        result.what = e.what();
  104|    434|    }
  105|  14.9k|    return result;
  106|  14.9k|}
_Z13outcome_valueRKN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEE:
   77|  29.8k|{
   78|  29.8k|    return j.dump(-1, ' ', false, json::error_handler_t::keep);
   79|  29.8k|}
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJRNSt3__119basic_istringstreamIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEE12read_outcomeRKT_DpOT0_:
   88|  14.9k|{
   89|  14.9k|    read_outcome result;
   90|  14.9k|    try
   91|  14.9k|    {
   92|  14.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  14.9k|    }
   94|  14.9k|    catch (const json::parse_error& e)
   95|  14.9k|    {
   96|  7.01k|        result.id = e.id;
   97|  7.01k|        result.what = e.what();
   98|  7.01k|        result.byte = e.byte;
   99|  7.01k|    }
  100|  14.9k|    catch (const json::exception& e)
  101|  14.9k|    {
  102|    434|        result.id = e.id;
  103|    434|        result.what = e.what();
  104|    434|    }
  105|  14.9k|    return result;
  106|  14.9k|}
_ZNK12read_outcomeeqERKS_:
   71|  44.7k|    {
   72|  44.7k|        return value == rhs.value && id == rhs.id && what == rhs.what && byte == rhs.byte;
  ------------------
  |  Branch (72:16): [True: 44.7k, False: 0]
  |  Branch (72:38): [True: 44.7k, False: 0]
  |  Branch (72:54): [True: 44.7k, False: 0]
  |  Branch (72:74): [True: 44.7k, False: 0]
  ------------------
   73|  44.7k|    }
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJNSt3__121__list_const_iteratorIhPvEES5_EE12read_outcomeRKT_DpOT0_:
   88|  14.9k|{
   89|  14.9k|    read_outcome result;
   90|  14.9k|    try
   91|  14.9k|    {
   92|  14.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  14.9k|    }
   94|  14.9k|    catch (const json::parse_error& e)
   95|  14.9k|    {
   96|  7.01k|        result.id = e.id;
   97|  7.01k|        result.what = e.what();
   98|  7.01k|        result.byte = e.byte;
   99|  7.01k|    }
  100|  14.9k|    catch (const json::exception& e)
  101|  14.9k|    {
  102|    434|        result.id = e.id;
  103|    434|        result.what = e.what();
  104|    434|    }
  105|  14.9k|    return result;
  106|  14.9k|}
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJRP8_IO_FILEEE12read_outcomeRKT_DpOT0_:
   88|  14.9k|{
   89|  14.9k|    read_outcome result;
   90|  14.9k|    try
   91|  14.9k|    {
   92|  14.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  14.9k|    }
   94|  14.9k|    catch (const json::parse_error& e)
   95|  14.9k|    {
   96|  7.01k|        result.id = e.id;
   97|  7.01k|        result.what = e.what();
   98|  7.01k|        result.byte = e.byte;
   99|  7.01k|    }
  100|  14.9k|    catch (const json::exception& e)
  101|  14.9k|    {
  102|    434|        result.id = e.id;
  103|    434|        result.what = e.what();
  104|    434|    }
  105|  14.9k|    return result;
  106|  14.9k|}

